xref: /llvm-project/llvm/unittests/Object/SymbolicFileTest.cpp (revision 0165e3346fdb1a3f51352821227d6ff1af5aee59)
1 //===- SymbolicFileTest.cpp - Tests for SymbolicFile.cpp ------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/Object/SymbolicFile.h"
10 #include "llvm/ADT/STLExtras.h"
11 #include "llvm/Support/raw_ostream.h"
12 #include "llvm/TargetParser/Host.h"
13 #include "gmock/gmock.h"
14 #include "gtest/gtest.h"
15 #include <sstream>
16 
17 TEST(Object, DataRefImplOstream) {
18   std::string s;
19   llvm::raw_string_ostream OS(s);
20   llvm::object::DataRefImpl Data;
21   Data.d.a = 0xeeee0000;
22   Data.d.b = 0x0000ffff;
23 
24   static_assert(sizeof Data.p == sizeof(uint64_t) ||
25                     sizeof Data.p == sizeof(uint32_t),
26                 "Test expected pointer type to be 32 or 64-bit.");
27 
28   char const *Expected;
29 
30   if (sizeof Data.p == sizeof(uint64_t)) {
31     Expected = llvm::sys::IsLittleEndianHost
32                              ? "(0xffffeeee0000 (0xeeee0000, 0x0000ffff))"
33                              : "(0xeeee00000000ffff (0xeeee0000, 0x0000ffff))";
34   }
35   else {
36     Expected = "(0xeeee0000 (0xeeee0000, 0x0000ffff))";
37   }
38 
39   OS << Data;
40 
41   EXPECT_EQ(Expected, s);
42 }
43 
44 struct ProxyContent {
45   unsigned Index = 0;
46   ProxyContent(unsigned Index) : Index(Index) {};
47   void moveNext() { ++Index; }
48 
49   bool operator==(const ProxyContent &Another) const {
50     return Index == Another.Index;
51   }
52 };
53 
54 TEST(Object, ContentIterator) {
55   using Iter = llvm::object::content_iterator<ProxyContent>;
56   auto Sequence = llvm::make_range(Iter(0u), Iter(10u));
57   auto EvenSequence = llvm::make_filter_range(
58       Sequence, [](auto &&PC) { return PC.Index % 2 == 0; });
59 
60   EXPECT_THAT(EvenSequence, testing::ElementsAre(0u, 2u, 4u, 6u, 8u));
61 }
62