EXPECT_EQ(*R16.binaryXor(R16).getSingleElement(), APInt(8, 0));
EXPECT_EQ(*R16.binaryXor(R20).getSingleElement(), APInt(8, 16 ^ 20));
- // Ranges with more than a single element. Handled conservatively for now.
+ // Ranges with more than a single element.
ConstantRange R16_35(APInt(8, 16), APInt(8, 35));
ConstantRange R0_99(APInt(8, 0), APInt(8, 99));
- EXPECT_TRUE(R16_35.binaryXor(R16_35).isFullSet());
- EXPECT_TRUE(R16_35.binaryXor(R0_99).isFullSet());
- EXPECT_TRUE(R0_99.binaryXor(R16_35).isFullSet());
+ EXPECT_EQ(R16_35.binaryXor(R16_35), ConstantRange(APInt(8, 0), APInt(8, 64)));
+ EXPECT_EQ(R16_35.binaryXor(R0_99), ConstantRange(APInt(8, 0), APInt(8, 128)));
+ EXPECT_EQ(R0_99.binaryXor(R16_35), ConstantRange(APInt(8, 0), APInt(8, 128)));
+
+ TestBinaryOpExhaustive(
+ [](const ConstantRange &CR1, const ConstantRange &CR2) {
+ return CR1.binaryXor(CR2);
+ },
+ [](const APInt &N1, const APInt &N2) {
+ return N1 ^ N2;
+ },
+ PreferSmallest,
+ CheckSingleElementsOnly);
}
TEST_F(ConstantRangeTest, binaryNot) {