1 //===-- extensible_address_test.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 // This file is a part of the ORC runtime. 10 // 11 // Note: 12 // This unit test was adapted from 13 // llvm/unittests/Support/ExecutorAddressTest.cpp 14 // 15 //===----------------------------------------------------------------------===// 16 17 #include "executor_address.h" 18 #include "gtest/gtest.h" 19 20 using namespace __orc_rt; 21 22 TEST(ExecutorAddrTest, DefaultAndNull) { 23 // Check that default constructed values and isNull behave as expected. 24 25 ExecutorAddr Default; 26 ExecutorAddr Null(0); 27 ExecutorAddr NonNull(1); 28 29 EXPECT_TRUE(Null.isNull()); 30 EXPECT_EQ(Default, Null); 31 32 EXPECT_FALSE(NonNull.isNull()); 33 EXPECT_NE(Default, NonNull); 34 } 35 36 TEST(ExecutorAddrTest, Ordering) { 37 // Check that ordering operations. 38 ExecutorAddr A1(1), A2(2); 39 40 EXPECT_LE(A1, A1); 41 EXPECT_LT(A1, A2); 42 EXPECT_GT(A2, A1); 43 EXPECT_GE(A2, A2); 44 } 45 46 TEST(ExecutorAddrTest, PtrConversion) { 47 // Test toPtr / fromPtr round-tripping. 48 int X = 0; 49 auto XAddr = ExecutorAddr::fromPtr(&X); 50 int *XPtr = XAddr.toPtr<int *>(); 51 52 EXPECT_EQ(XPtr, &X); 53 } 54 55 TEST(ExecutorAddrTest, AddrRanges) { 56 ExecutorAddr A0(0), A1(1), A2(2), A3(3); 57 ExecutorAddrRange R0(A0, A1), R1(A1, A2), R2(A2, A3), R3(A0, A2), R4(A1, A3); 58 // 012 59 // R0: # -- Before R1 60 // R1: # -- 61 // R2: # -- After R1 62 // R3: ## -- Overlaps R1 start 63 // R4: ## -- Overlaps R1 end 64 65 EXPECT_EQ(R1, ExecutorAddrRange(A1, A2)); 66 EXPECT_EQ(R1, ExecutorAddrRange(A1, ExecutorAddrDiff(1))); 67 EXPECT_NE(R1, R2); 68 69 EXPECT_TRUE(R1.contains(A1)); 70 EXPECT_FALSE(R1.contains(A0)); 71 EXPECT_FALSE(R1.contains(A2)); 72 73 EXPECT_FALSE(R1.overlaps(R0)); 74 EXPECT_FALSE(R1.overlaps(R2)); 75 EXPECT_TRUE(R1.overlaps(R3)); 76 EXPECT_TRUE(R1.overlaps(R4)); 77 } 78 79 TEST(ExecutorAddrTest, Hashable) { 80 uint64_t RawAddr = 0x1234567890ABCDEF; 81 ExecutorAddr Addr(RawAddr); 82 83 EXPECT_EQ(std::hash<uint64_t>()(RawAddr), std::hash<ExecutorAddr>()(Addr)); 84 } 85