summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index ac6d9ba5891..130bc256b2c 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -446,6 +446,58 @@ TEST(APIntTest, compareLargeIntegers) {
EXPECT_TRUE(!MinusTwo.slt(MinusTwo));
}
+TEST(APIntTest, binaryOpsWithRawIntegers) {
+ // Single word check.
+ uint64_t E1 = 0x2CA7F46BF6569915ULL;
+ APInt A1(64, E1);
+
+ EXPECT_EQ(A1 & E1, E1);
+ EXPECT_EQ(A1 & 0, 0);
+ EXPECT_EQ(A1 & 1, 1);
+ EXPECT_EQ(A1 & 5, 5);
+ EXPECT_EQ(A1 & UINT64_MAX, E1);
+
+ EXPECT_EQ(A1 | E1, E1);
+ EXPECT_EQ(A1 | 0, E1);
+ EXPECT_EQ(A1 | 1, E1);
+ EXPECT_EQ(A1 | 2, E1 | 2);
+ EXPECT_EQ(A1 | UINT64_MAX, UINT64_MAX);
+
+ EXPECT_EQ(A1 ^ E1, 0);
+ EXPECT_EQ(A1 ^ 0, E1);
+ EXPECT_EQ(A1 ^ 1, E1 ^ 1);
+ EXPECT_EQ(A1 ^ 7, E1 ^ 7);
+ EXPECT_EQ(A1 ^ UINT64_MAX, ~E1);
+
+ // Multiword check.
+ uint64_t N = 0xEB6EB136591CBA21ULL;
+ integerPart E2[4] = {
+ N,
+ 0x7B9358BD6A33F10AULL,
+ 0x7E7FFA5EADD8846ULL,
+ 0x305F341CA00B613DULL
+ };
+ APInt A2(integerPartWidth*4, E2);
+
+ EXPECT_EQ(A2 & N, N);
+ EXPECT_EQ(A2 & 0, 0);
+ EXPECT_EQ(A2 & 1, 1);
+ EXPECT_EQ(A2 & 5, 1);
+ EXPECT_EQ(A2 & UINT64_MAX, N);
+
+ EXPECT_EQ(A2 | N, A2);
+ EXPECT_EQ(A2 | 0, A2);
+ EXPECT_EQ(A2 | 1, A2);
+ EXPECT_EQ(A2 | 2, A2 + 2);
+ EXPECT_EQ(A2 | UINT64_MAX, A2 - N + UINT64_MAX);
+
+ EXPECT_EQ(A2 ^ N, A2 - N);
+ EXPECT_EQ(A2 ^ 0, A2);
+ EXPECT_EQ(A2 ^ 1, A2 - 1);
+ EXPECT_EQ(A2 ^ 7, A2 + 5);
+ EXPECT_EQ(A2 ^ UINT64_MAX, A2 - N + ~N);
+}
+
TEST(APIntTest, rvalue_arithmetic) {
// Test all combinations of lvalue/rvalue lhs/rhs of add/sub
OpenPOWER on IntegriCloud