Index: test/cctest/test-types.cc |
diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc |
index 95ef9eb4822e5cb2f11ce5353c828e3820c885c2..5853e955fa1703d33b7dcd2f60f4b61494b4482d 100644 |
--- a/test/cctest/test-types.cc |
+++ b/test/cctest/test-types.cc |
@@ -135,6 +135,14 @@ struct Tests : Rep { |
} |
} |
+ void CheckSubOrEqual(TypeHandle type1, TypeHandle type2) { |
+ CHECK(type1->Is(type2)); |
+ if (this->IsBitset(type1) && this->IsBitset(type2)) { |
+ CHECK((this->AsBitset(type1) | this->AsBitset(type2)) |
+ == this->AsBitset(type2)); |
+ } |
+ } |
+ |
void CheckUnordered(TypeHandle type1, TypeHandle type2) { |
CHECK(!type1->Is(type2)); |
CHECK(!type2->Is(type1)); |
@@ -293,39 +301,33 @@ struct Tests : Rep { |
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.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x3fffffff))->Is(T.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x40000000))->Is(T.NegativeSignedSmall)); |
+ 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)); |
if (SmiValuesAre31Bits()) { |
- CHECK(T.Constant(fac->NewNumber(0x40000000))->Is(T.NonNegativeSigned32)); |
CHECK(!T.Constant(fac->NewNumber(0x40000000))->Is(T.UnsignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.NonNegativeSigned32)); |
CHECK(!T.Constant(fac->NewNumber(0x7fffffff))->Is(T.UnsignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSigned32)); |
- CHECK( |
- !T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSigned32)); |
- CHECK(!T.Constant(fac->NewNumber(-0x7fffffff - 1)) |
- ->Is(T.NegativeSignedSmall)); |
+ CHECK(!T.Constant(fac->NewNumber(-0x40000001))->Is(T.SignedSmall)); |
+ CHECK(!T.Constant(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(0x40000000))->Is(T.NonNegativeSigned32)); |
- CHECK(T.Constant(fac->NewNumber(0x7fffffff))->Is(T.NonNegativeSigned32)); |
- CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x7fffffff - 1)) |
- ->Is(T.NegativeSignedSmall)); |
- CHECK(T.Constant(fac->NewNumber(-0x40000001))->Is(T.NegativeSigned32)); |
- CHECK(T.Constant(fac->NewNumber(-0x7fffffff))->Is(T.NegativeSigned32)); |
- CHECK( |
- T.Constant(fac->NewNumber(-0x7fffffff - 1))->Is(T.NegativeSigned32)); |
+ 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.NonNegativeSigned32)); |
+ 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.NonNegativeSigned32)); |
+ 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)); |
@@ -795,6 +797,7 @@ struct Tests : Rep { |
(type1->IsClass() && type2->IsClass()) || |
(type1->IsConstant() && type2->IsConstant()) || |
(type1->IsConstant() && type2->IsRange()) || |
+ (this->IsBitset(type1) && type2->IsRange()) || |
(type1->IsRange() && type2->IsRange()) || |
(type1->IsContext() && type2->IsContext()) || |
(type1->IsArray() && type2->IsArray()) || |
@@ -933,7 +936,7 @@ struct Tests : Rep { |
CheckSub(T.SignedSmall, T.Number); |
CheckSub(T.Signed32, T.Number); |
- CheckSub(T.SignedSmall, T.Signed32); |
+ CheckSubOrEqual(T.SignedSmall, T.Signed32); |
CheckUnordered(T.SignedSmall, T.MinusZero); |
CheckUnordered(T.Signed32, T.Unsigned32); |
@@ -1477,8 +1480,8 @@ struct Tests : Rep { |
CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number); |
// Bitset-class |
- CheckSub( |
- T.Union(T.ObjectClass, T.SignedSmall), T.Union(T.Object, T.Number)); |
+ CheckSub(T.Union(T.ObjectClass, T.SignedSmall), |
+ T.Union(T.Object, T.Number)); |
CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); |
CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); |
CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object); |
@@ -1548,11 +1551,9 @@ struct Tests : Rep { |
T.Union(T.ObjectConstant2, T.ObjectConstant1), |
T.Union(T.ObjectConstant1, T.ObjectConstant2)), |
T.Union(T.ObjectConstant2, T.ObjectConstant1)); |
- CheckEqual( |
- T.Union( |
- T.Union(T.Number, T.ArrayClass), |
- T.Union(T.SignedSmall, T.Array)), |
- T.Union(T.Number, T.Array)); |
+ CheckEqual(T.Union(T.Union(T.Number, T.ArrayClass), |
+ T.Union(T.SignedSmall, T.Array)), |
+ T.Union(T.Number, T.Array)); |
} |
void Intersect() { |
@@ -1766,11 +1767,9 @@ struct Tests : Rep { |
->IsInhabited()); // !!! |
// Union-union |
- CheckEqual( |
- T.Intersect( |
- T.Union(T.Number, T.ArrayClass), |
- T.Union(T.SignedSmall, T.Array)), |
- T.Union(T.SignedSmall, T.ArrayClass)); |
+ CheckEqual(T.Intersect(T.Union(T.Number, T.ArrayClass), |
+ T.Union(T.SignedSmall, T.Array)), |
+ T.Union(T.SignedSmall, T.ArrayClass)); |
CheckEqual( |
T.Intersect( |
T.Union(T.Number, T.ObjectClass), |