Index: runtime/vm/intermediate_language_test.cc |
diff --git a/runtime/vm/intermediate_language_test.cc b/runtime/vm/intermediate_language_test.cc |
index 918849b0db823975108b905eddf1d7f470084781..67f304efbbce2263b050fdc47a4fc109b486d9b4 100644 |
--- a/runtime/vm/intermediate_language_test.cc |
+++ b/runtime/vm/intermediate_language_test.cc |
@@ -62,7 +62,7 @@ TEST_CASE(RangeTests) { |
EXPECT(!range_x->IsWithin(-15, 99)); |
EXPECT(!range_x->IsWithin(-14, 100)); |
-#define TEST_RANGE_OP(Op, l_min, l_max, r_min, r_max, result_min, result_max) \ |
+#define TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, Clamp, res_min, res_max)\ |
{ \ |
RangeBoundary min, max; \ |
Range* left_range = new Range( \ |
@@ -72,12 +72,24 @@ TEST_CASE(RangeTests) { |
RangeBoundary::FromConstant(r_min), \ |
RangeBoundary::FromConstant(r_max)); \ |
Op(left_range, shift_range, &min, &max); \ |
- EXPECT(min.Equals(result_min)); \ |
- if (!min.Equals(result_min)) OS::Print("%s\n", min.ToCString()); \ |
- EXPECT(max.Equals(result_max)); \ |
- if (!max.Equals(result_max)) OS::Print("%s\n", max.ToCString()); \ |
+ min = Clamp(min); \ |
+ max = Clamp(max); \ |
+ EXPECT(min.Equals(res_min)); \ |
+ if (!min.Equals(res_min)) OS::Print("%s\n", min.ToCString()); \ |
+ EXPECT(max.Equals(res_max)); \ |
+ if (!max.Equals(res_max)) OS::Print("%s\n", max.ToCString()); \ |
} |
+#define NO_CLAMP(b) (b) |
+#define TEST_RANGE_OP(Op, l_min, l_max, r_min, r_max, result_min, result_max) \ |
+ TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, \ |
+ NO_CLAMP, result_min, result_max) |
+ |
+#define CLAMP_TO_SMI(b) (b.Clamp(RangeBoundary::kRangeBoundarySmi)) |
+#define TEST_RANGE_OP_SMI(Op, l_min, l_max, r_min, r_max, res_min, res_max) \ |
+ TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, \ |
+ CLAMP_TO_SMI, res_min, res_max) |
+ |
TEST_RANGE_OP(Range::Shl, -15, 100, 0, 2, |
RangeBoundary(-60), RangeBoundary(400)); |
TEST_RANGE_OP(Range::Shl, -15, 100, -2, 2, |
@@ -90,22 +102,22 @@ TEST_CASE(RangeTests) { |
RangeBoundary::NegativeInfinity(), |
RangeBoundary::PositiveInfinity()); |
TEST_RANGE_OP(Range::Shl, -1, 1, 63, 63, |
- RangeBoundary::NegativeInfinity(), |
+ RangeBoundary(kMinInt64), |
RangeBoundary::PositiveInfinity()); |
if (kBitsPerWord == 64) { |
- TEST_RANGE_OP(Range::Shl, -1, 1, 62, 62, |
+ TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 62, 62, |
RangeBoundary(kSmiMin), |
- RangeBoundary::PositiveInfinity()); |
- TEST_RANGE_OP(Range::Shl, -1, 1, 30, 30, |
+ RangeBoundary(kSmiMax)); |
+ TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30, |
RangeBoundary(-1 << 30), |
RangeBoundary(1 << 30)); |
} else { |
- TEST_RANGE_OP(Range::Shl, -1, 1, 30, 30, |
+ TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30, |
+ RangeBoundary(kSmiMin), |
+ RangeBoundary(kSmiMax)); |
+ TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 62, 62, |
RangeBoundary(kSmiMin), |
- RangeBoundary::PositiveInfinity()); |
- TEST_RANGE_OP(Range::Shl, -1, 1, 62, 62, |
- RangeBoundary::NegativeInfinity(), |
- RangeBoundary::PositiveInfinity()); |
+ RangeBoundary(kSmiMax)); |
} |
TEST_RANGE_OP(Range::Shl, 0, 100, 0, 64, |
RangeBoundary(0), RangeBoundary::PositiveInfinity()); |