Chromium Code Reviews| Index: test/cctest/test-types.cc |
| diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc |
| index dd1b3e370391fb76700b91bde60e36a90161be44..641389c7bef5ddb5d03555a6dd47b5e8a1cd6b19 100644 |
| --- a/test/cctest/test-types.cc |
| +++ b/test/cctest/test-types.cc |
| @@ -191,15 +191,26 @@ struct Tests { |
| // Constructor |
| for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) { |
| Handle<i::Object> value = *vt; |
| - Type* type = T.Constant(value); |
| - CHECK(type->IsConstant()); |
| + Type* type = T.NewConstant(value); |
| + CHECK(type->IsConstant() || type->IsNumberConstant() || type->IsRange()); |
| } |
| // Value attribute |
| for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) { |
| Handle<i::Object> value = *vt; |
| - Type* type = T.Constant(value); |
| - CHECK(*value == *type->AsConstant()->Value()); |
| + Type* type = T.NewConstant(value); |
| + if (type->IsConstant()) { |
| + CHECK(*value == *type->AsConstant()->Value()); |
| + } else if (type->IsNumberConstant()) { |
| + double v = value->IsSmi() ? Smi::cast(*value)->value() |
| + : HeapNumber::cast(*value)->value(); |
| + CHECK(v == type->AsNumberConstant()->Value()); |
| + } else { |
| + CHECK(type->IsRange()); |
| + double v = value->IsSmi() ? Smi::cast(*value)->value() |
| + : HeapNumber::cast(*value)->value(); |
| + CHECK(v == type->AsRange()->Min() && v == type->AsRange()->Max()); |
| + } |
| } |
| // Functionality & Injectivity: Constant(V1) = Constant(V2) iff V1 = V2 |
| @@ -207,61 +218,62 @@ struct Tests { |
| for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { |
| Handle<i::Object> value1 = *vt1; |
| Handle<i::Object> value2 = *vt2; |
| - Type* type1 = T.Constant(value1); |
| - Type* type2 = T.Constant(value2); |
| + Type* type1 = T.NewConstant(value1); |
| + Type* type2 = T.NewConstant(value2); |
| CHECK(Equal(type1, type2) == (*value1 == *value2)); |
| } |
| } |
| // Typing of numbers |
| Factory* fac = isolate->factory(); |
| - CHECK(T.Constant(fac->NewNumber(0))->Is(T.UnsignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(1))->Is(T.UnsignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(0x3fffffff))->Is(T.UnsignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(-1))->Is(T.Negative31)); |
| - CHECK(T.Constant(fac->NewNumber(-0x3fffffff))->Is(T.Negative31)); |
| - CHECK(T.Constant(fac->NewNumber(-0x40000000))->Is(T.Negative31)); |
| - CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.Unsigned31)); |
| - CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.Unsigned30)); |
| - CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.Unsigned31)); |
| - CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.Unsigned30)); |
| - CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.Negative32)); |
| - CHECK(!T.Constant(fac->NewNumber(-0x40000001))->Is(T.Negative31)); |
| - CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.Negative32)); |
| - CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 1))->Is(T.Negative31)); |
| + CHECK(T.NewConstant(fac->NewNumber(0))->Is(T.UnsignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(1))->Is(T.UnsignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(0x3fffffff))->Is(T.UnsignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(-1))->Is(T.Negative31)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x3fffffff))->Is(T.Negative31)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x40000000))->Is(T.Negative31)); |
| + CHECK(T.NewConstant(fac->NewNumber(0x40000000))->Is(T.Unsigned31)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0x40000000))->Is(T.Unsigned30)); |
| + CHECK(T.NewConstant(fac->NewNumber(0x7fffffff))->Is(T.Unsigned31)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0x7fffffff))->Is(T.Unsigned30)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x40000001))->Is(T.Negative32)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-0x40000001))->Is(T.Negative31)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x7fffffff))->Is(T.Negative32)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-0x7fffffff - 1))->Is(T.Negative31)); |
| if (SmiValuesAre31Bits()) { |
| - CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| - CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| - CHECK(!T.Constant(fac->NewNumber(-0x40000001))->Is(T.SignedSmall)); |
| - CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 1))->Is(T.SignedSmall)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-0x40000001))->Is(T.SignedSmall)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-0x7fffffff - 1))->Is(T.SignedSmall)); |
| } else { |
| CHECK(SmiValuesAre32Bits()); |
| - CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.SignedSmall)); |
| - CHECK(T.Constant(fac->NewNumber(-0x7fffffff - 1))->Is(T.SignedSmall)); |
| - } |
| - CHECK(T.Constant(fac->NewNumber(0x80000000u))->Is(T.Unsigned32)); |
| - CHECK(!T.Constant(fac->NewNumber(0x80000000u))->Is(T.Unsigned31)); |
| - CHECK(T.Constant(fac->NewNumber(0xffffffffu))->Is(T.Unsigned32)); |
| - CHECK(!T.Constant(fac->NewNumber(0xffffffffu))->Is(T.Unsigned31)); |
| - CHECK(T.Constant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(0.1))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(0.1))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(-10.1))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(-10.1))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(10e60))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(10e60))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(-1.0*0.0))->Is(T.MinusZero)); |
| - CHECK(T.Constant(fac->NewNumber(std::numeric_limits<double>::quiet_NaN())) |
| - ->Is(T.NaN)); |
| - CHECK(T.Constant(fac->NewNumber(V8_INFINITY))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(V8_INFINITY))->Is(T.Integral32)); |
| - CHECK(T.Constant(fac->NewNumber(-V8_INFINITY))->Is(T.PlainNumber)); |
| - CHECK(!T.Constant(fac->NewNumber(-V8_INFINITY))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x40000001))->Is(T.SignedSmall)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x7fffffff - 1))->Is(T.SignedSmall)); |
| + } |
| + CHECK(T.NewConstant(fac->NewNumber(0x80000000u))->Is(T.Unsigned32)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0x80000000u))->Is(T.Unsigned31)); |
| + CHECK(T.NewConstant(fac->NewNumber(0xffffffffu))->Is(T.Unsigned32)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0xffffffffu))->Is(T.Unsigned31)); |
| + CHECK(T.NewConstant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0xffffffffu + 1.0))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-0x7fffffff - 2.0))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(0.1))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(0.1))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(-10.1))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-10.1))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(10e60))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(10e60))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(-1.0 * 0.0))->Is(T.MinusZero)); |
| + CHECK( |
| + T.NewConstant(fac->NewNumber(std::numeric_limits<double>::quiet_NaN())) |
| + ->Is(T.NaN)); |
| + CHECK(T.NewConstant(fac->NewNumber(V8_INFINITY))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(V8_INFINITY))->Is(T.Integral32)); |
| + CHECK(T.NewConstant(fac->NewNumber(-V8_INFINITY))->Is(T.PlainNumber)); |
| + CHECK(!T.NewConstant(fac->NewNumber(-V8_INFINITY))->Is(T.Integral32)); |
| } |
| void Range() { |
| @@ -317,7 +329,7 @@ struct Tests { |
| // Constant(V)->Is(Of(V)) |
| for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) { |
| Handle<i::Object> value = *vt; |
| - Type* const_type = T.Constant(value); |
| + Type* const_type = T.NewConstant(value); |
| Type* of_type = T.Of(value); |
| CHECK(const_type->Is(of_type)); |
| } |
| @@ -327,7 +339,7 @@ struct Tests { |
| for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
| Handle<i::Object> value = *vt; |
| Type* type = *it; |
| - Type* const_type = T.Constant(value); |
| + Type* const_type = T.NewConstant(value); |
| Type* of_type = T.Of(value); |
| CHECK(!of_type->Is(type) || const_type->Is(type)); |
| } |
| @@ -338,7 +350,7 @@ struct Tests { |
| for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { |
| Handle<i::Object> value = *vt; |
| Type* type = *it; |
| - Type* const_type = T.Constant(value); |
| + Type* const_type = T.NewConstant(value); |
| Type* of_type = T.Of(value); |
| CHECK(!const_type->Is(type) || |
| of_type->Is(type) || type->Maybe(const_type)); |
| @@ -559,8 +571,8 @@ struct Tests { |
| for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { |
| Handle<i::Object> value1 = *vt1; |
| Handle<i::Object> value2 = *vt2; |
| - Type* const_type1 = T.Constant(value1); |
| - Type* const_type2 = T.Constant(value2); |
| + Type* const_type1 = T.NewConstant(value1); |
| + Type* const_type2 = T.NewConstant(value2); |
| CHECK(const_type1->Is(const_type2) == (*value1 == *value2)); |
| } |
| } |
| @@ -712,8 +724,8 @@ struct Tests { |
| for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { |
| Handle<i::Object> value1 = *vt1; |
| Handle<i::Object> value2 = *vt2; |
| - Type* const_type1 = T.Constant(value1); |
| - Type* const_type2 = T.Constant(value2); |
| + Type* const_type1 = T.NewConstant(value1); |
| + Type* const_type2 = T.NewConstant(value2); |
|
mvstanton
2016/09/28 14:47:44
This and other "rule-enforcement" tests need condi
mvstanton
2016/10/04 11:55:55
Done.
|
| CHECK(const_type1->Maybe(const_type2) == (*value1 == *value2)); |
| } |
| } |