Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(742)

Side by Side Diff: test/cctest/test-types.cc

Issue 2310923002: [turbofan] Also nuke Array and Function types. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/types.cc ('k') | test/cctest/types-fuzz.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "src/crankshaft/hydrogen-types.h" 7 #include "src/crankshaft/hydrogen-types.h"
8 #include "src/factory.h" 8 #include "src/factory.h"
9 #include "src/heap/heap.h" 9 #include "src/heap/heap.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 CHECK(!type2->Is(type1)); 106 CHECK(!type2->Is(type1));
107 CHECK(!type1->Maybe(type2)); 107 CHECK(!type1->Maybe(type2));
108 CHECK(!type2->Maybe(type1)); 108 CHECK(!type2->Maybe(type1));
109 } 109 }
110 110
111 void IsSomeType() { 111 void IsSomeType() {
112 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { 112 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) {
113 Type* t = *it; 113 Type* t = *it;
114 CHECK(1 == 114 CHECK(1 ==
115 this->IsBitset(t) + t->IsConstant() + t->IsRange() + 115 this->IsBitset(t) + t->IsConstant() + t->IsRange() +
116 this->IsUnion(t) + t->IsArray() + t->IsFunction()); 116 this->IsUnion(t));
117 } 117 }
118 } 118 }
119 119
120 void Bitset() { 120 void Bitset() {
121 // None and Any are bitsets. 121 // None and Any are bitsets.
122 CHECK(this->IsBitset(T.None)); 122 CHECK(this->IsBitset(T.None));
123 CHECK(this->IsBitset(T.Any)); 123 CHECK(this->IsBitset(T.Any));
124 124
125 CHECK(bitset(0) == this->AsBitset(T.None)); 125 CHECK(bitset(0) == this->AsBitset(T.None));
126 CHECK(bitset(0xfffffffeu) == this->AsBitset(T.Any)); 126 CHECK(bitset(0xfffffffeu) == this->AsBitset(T.Any));
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 if (min2 > max2) std::swap(min2, max2); 371 if (min2 > max2) std::swap(min2, max2);
372 Type* type1 = T.Range(min1, max1); 372 Type* type1 = T.Range(min1, max1);
373 Type* type2 = T.Range(min2, max2); 373 Type* type2 = T.Range(min2, max2);
374 CHECK(Equal(type1, type2) == (min1 == min2 && max1 == max2)); 374 CHECK(Equal(type1, type2) == (min1 == min2 && max1 == max2));
375 } 375 }
376 } 376 }
377 } 377 }
378 } 378 }
379 } 379 }
380 380
381 void Array() {
382 // Constructor
383 for (int i = 0; i < 20; ++i) {
384 Type* type = T.Random();
385 Type* array = T.Array1(type);
386 CHECK(array->IsArray());
387 }
388
389 // Attributes
390 for (int i = 0; i < 20; ++i) {
391 Type* type = T.Random();
392 Type* array = T.Array1(type);
393 CheckEqual(type, array->AsArray()->Element());
394 }
395
396 // Functionality & Injectivity: Array(T1) = Array(T2) iff T1 = T2
397 for (int i = 0; i < 20; ++i) {
398 for (int j = 0; j < 20; ++j) {
399 Type* type1 = T.Random();
400 Type* type2 = T.Random();
401 Type* array1 = T.Array1(type1);
402 Type* array2 = T.Array1(type2);
403 CHECK(Equal(array1, array2) == Equal(type1, type2));
404 }
405 }
406 }
407
408 void Function() {
409 // Constructors
410 for (int i = 0; i < 20; ++i) {
411 for (int j = 0; j < 20; ++j) {
412 for (int k = 0; k < 20; ++k) {
413 Type* type1 = T.Random();
414 Type* type2 = T.Random();
415 Type* type3 = T.Random();
416 Type* function0 = T.Function0(type1, type2);
417 Type* function1 = T.Function1(type1, type2, type3);
418 Type* function2 = T.Function2(type1, type2, type3);
419 CHECK(function0->IsFunction());
420 CHECK(function1->IsFunction());
421 CHECK(function2->IsFunction());
422 }
423 }
424 }
425
426 // Attributes
427 for (int i = 0; i < 20; ++i) {
428 for (int j = 0; j < 20; ++j) {
429 for (int k = 0; k < 20; ++k) {
430 Type* type1 = T.Random();
431 Type* type2 = T.Random();
432 Type* type3 = T.Random();
433 Type* function0 = T.Function0(type1, type2);
434 Type* function1 = T.Function1(type1, type2, type3);
435 Type* function2 = T.Function2(type1, type2, type3);
436 CHECK_EQ(0, function0->AsFunction()->Arity());
437 CHECK_EQ(1, function1->AsFunction()->Arity());
438 CHECK_EQ(2, function2->AsFunction()->Arity());
439 CheckEqual(type1, function0->AsFunction()->Result());
440 CheckEqual(type1, function1->AsFunction()->Result());
441 CheckEqual(type1, function2->AsFunction()->Result());
442 CheckEqual(type2, function0->AsFunction()->Receiver());
443 CheckEqual(type2, function1->AsFunction()->Receiver());
444 CheckEqual(T.Any, function2->AsFunction()->Receiver());
445 CheckEqual(type3, function1->AsFunction()->Parameter(0));
446 CheckEqual(type2, function2->AsFunction()->Parameter(0));
447 CheckEqual(type3, function2->AsFunction()->Parameter(1));
448 }
449 }
450 }
451
452 // Functionality & Injectivity: Function(Ts1) = Function(Ts2) iff Ts1 = Ts2
453 for (int i = 0; i < 20; ++i) {
454 for (int j = 0; j < 20; ++j) {
455 for (int k = 0; k < 20; ++k) {
456 Type* type1 = T.Random();
457 Type* type2 = T.Random();
458 Type* type3 = T.Random();
459 Type* function01 = T.Function0(type1, type2);
460 Type* function02 = T.Function0(type1, type3);
461 Type* function03 = T.Function0(type3, type2);
462 Type* function11 = T.Function1(type1, type2, type2);
463 Type* function12 = T.Function1(type1, type2, type3);
464 Type* function21 = T.Function2(type1, type2, type2);
465 Type* function22 = T.Function2(type1, type2, type3);
466 Type* function23 = T.Function2(type1, type3, type2);
467 CHECK(Equal(function01, function02) == Equal(type2, type3));
468 CHECK(Equal(function01, function03) == Equal(type1, type3));
469 CHECK(Equal(function11, function12) == Equal(type2, type3));
470 CHECK(Equal(function21, function22) == Equal(type2, type3));
471 CHECK(Equal(function21, function23) == Equal(type2, type3));
472 }
473 }
474 }
475 }
476
477 void Of() { 381 void Of() {
478 // Constant(V)->Is(Of(V)) 382 // Constant(V)->Is(Of(V))
479 for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) { 383 for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) {
480 Handle<i::Object> value = *vt; 384 Handle<i::Object> value = *vt;
481 Type* const_type = T.Constant(value); 385 Type* const_type = T.Constant(value);
482 Type* of_type = T.Of(value); 386 Type* of_type = T.Of(value);
483 CHECK(const_type->Is(of_type)); 387 CHECK(const_type->Is(of_type));
484 } 388 }
485 389
486 // If Of(V)->Is(T), then Constant(V)->Is(T) 390 // If Of(V)->Is(T), then Constant(V)->Is(T)
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 for (TypeIterator i = T.types.begin(); i != T.types.end(); ++i) { 583 for (TypeIterator i = T.types.begin(); i != T.types.end(); ++i) {
680 for (TypeIterator j = T.types.begin(); j != T.types.end(); ++j) { 584 for (TypeIterator j = T.types.begin(); j != T.types.end(); ++j) {
681 Type* type1 = *i; 585 Type* type1 = *i;
682 Type* type2 = *j; 586 Type* type2 = *j;
683 CHECK(!type1->Is(type2) || this->IsBitset(type2) || 587 CHECK(!type1->Is(type2) || this->IsBitset(type2) ||
684 this->IsUnion(type2) || this->IsUnion(type1) || 588 this->IsUnion(type2) || this->IsUnion(type1) ||
685 (type1->IsConstant() && type2->IsConstant()) || 589 (type1->IsConstant() && type2->IsConstant()) ||
686 (type1->IsConstant() && type2->IsRange()) || 590 (type1->IsConstant() && type2->IsRange()) ||
687 (this->IsBitset(type1) && type2->IsRange()) || 591 (this->IsBitset(type1) && type2->IsRange()) ||
688 (type1->IsRange() && type2->IsRange()) || 592 (type1->IsRange() && type2->IsRange()) ||
689 (type1->IsArray() && type2->IsArray()) ||
690 (type1->IsFunction() && type2->IsFunction()) ||
691 !type1->IsInhabited()); 593 !type1->IsInhabited());
692 } 594 }
693 } 595 }
694 } 596 }
695 597
696 void Is2() { 598 void Is2() {
697 // Range(X1, Y1)->Is(Range(X2, Y2)) iff X1 >= X2 /\ Y1 <= Y2 599 // Range(X1, Y1)->Is(Range(X2, Y2)) iff X1 >= X2 /\ Y1 <= Y2
698 for (ValueIterator i1 = T.integers.begin(); 600 for (ValueIterator i1 = T.integers.begin();
699 i1 != T.integers.end(); ++i1) { 601 i1 != T.integers.end(); ++i1) {
700 for (ValueIterator j1 = i1; 602 for (ValueIterator j1 = i1;
(...skipping 20 matching lines...) Expand all
721 for (ValueIterator vt1 = T.values.begin(); vt1 != T.values.end(); ++vt1) { 623 for (ValueIterator vt1 = T.values.begin(); vt1 != T.values.end(); ++vt1) {
722 for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) { 624 for (ValueIterator vt2 = T.values.begin(); vt2 != T.values.end(); ++vt2) {
723 Handle<i::Object> value1 = *vt1; 625 Handle<i::Object> value1 = *vt1;
724 Handle<i::Object> value2 = *vt2; 626 Handle<i::Object> value2 = *vt2;
725 Type* const_type1 = T.Constant(value1); 627 Type* const_type1 = T.Constant(value1);
726 Type* const_type2 = T.Constant(value2); 628 Type* const_type2 = T.Constant(value2);
727 CHECK(const_type1->Is(const_type2) == (*value1 == *value2)); 629 CHECK(const_type1->Is(const_type2) == (*value1 == *value2));
728 } 630 }
729 } 631 }
730 632
731 // Array(T1)->Is(Array(T2)) iff T1 = T2
732 for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) {
733 for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) {
734 Type* element1 = *it1;
735 Type* element2 = *it2;
736 Type* type1 = T.Array1(element1);
737 Type* type2 = T.Array1(element2);
738 CHECK(type1->Is(type2) == element1->Equals(element2));
739 }
740 }
741
742 // Function0(S1, T1)->Is(Function0(S2, T2)) iff S1 = S2 and T1 = T2
743 for (TypeIterator i = T.types.begin(); i != T.types.end(); ++i) {
744 for (TypeIterator j = T.types.begin(); j != T.types.end(); ++j) {
745 Type* result1 = *i;
746 Type* receiver1 = *j;
747 Type* type1 = T.Function0(result1, receiver1);
748 Type* result2 = T.Random();
749 Type* receiver2 = T.Random();
750 Type* type2 = T.Function0(result2, receiver2);
751 CHECK(type1->Is(type2) ==
752 (result1->Equals(result2) && receiver1->Equals(receiver2)));
753 }
754 }
755
756
757 // Range-specific subtyping 633 // Range-specific subtyping
758 634
759 // If IsInteger(v) then Constant(v)->Is(Range(v, v)). 635 // If IsInteger(v) then Constant(v)->Is(Range(v, v)).
760 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { 636 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) {
761 Type* type = *it; 637 Type* type = *it;
762 if (type->IsConstant() && IsInteger(*type->AsConstant()->Value())) { 638 if (type->IsConstant() && IsInteger(*type->AsConstant()->Value())) {
763 CHECK(type->Is(T.Range(type->AsConstant()->Value()->Number(), 639 CHECK(type->Is(T.Range(type->AsConstant()->Value()->Number(),
764 type->AsConstant()->Value()->Number()))); 640 type->AsConstant()->Value()->Number())));
765 } 641 }
766 } 642 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 CheckSub(T.ObjectConstant1, T.Object); 705 CheckSub(T.ObjectConstant1, T.Object);
830 CheckSub(T.ObjectConstant2, T.Object); 706 CheckSub(T.ObjectConstant2, T.Object);
831 CheckSub(T.ArrayConstant, T.Object); 707 CheckSub(T.ArrayConstant, T.Object);
832 CheckSub(T.ArrayConstant, T.OtherObject); 708 CheckSub(T.ArrayConstant, T.OtherObject);
833 CheckSub(T.ArrayConstant, T.Receiver); 709 CheckSub(T.ArrayConstant, T.Receiver);
834 CheckSub(T.UninitializedConstant, T.Internal); 710 CheckSub(T.UninitializedConstant, T.Internal);
835 CheckUnordered(T.ObjectConstant1, T.ObjectConstant2); 711 CheckUnordered(T.ObjectConstant1, T.ObjectConstant2);
836 CheckUnordered(T.ObjectConstant1, T.ArrayConstant); 712 CheckUnordered(T.ObjectConstant1, T.ArrayConstant);
837 CheckUnordered(T.UninitializedConstant, T.Null); 713 CheckUnordered(T.UninitializedConstant, T.Null);
838 CheckUnordered(T.UninitializedConstant, T.Undefined); 714 CheckUnordered(T.UninitializedConstant, T.Undefined);
839
840 CheckSub(T.NumberArray, T.OtherObject);
841 CheckSub(T.NumberArray, T.Receiver);
842 CheckSub(T.NumberArray, T.Object);
843 CheckUnordered(T.StringArray, T.AnyArray);
844
845 CheckSub(T.MethodFunction, T.Object);
846 CheckSub(T.NumberFunction1, T.Object);
847 CheckUnordered(T.SignedFunction1, T.NumberFunction1);
848 CheckUnordered(T.NumberFunction1, T.NumberFunction2);
849 } 715 }
850 716
851 void Contains() { 717 void Contains() {
852 // T->Contains(V) iff Constant(V)->Is(T) 718 // T->Contains(V) iff Constant(V)->Is(T)
853 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { 719 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) {
854 for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) { 720 for (ValueIterator vt = T.values.begin(); vt != T.values.end(); ++vt) {
855 Type* type = *it; 721 Type* type = *it;
856 Handle<i::Object> value = *vt; 722 Handle<i::Object> value = *vt;
857 Type* const_type = T.Constant(value); 723 Type* const_type = T.Constant(value);
858 CHECK(type->Contains(value) == const_type->Is(type)); 724 CHECK(type->Contains(value) == const_type->Is(type));
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 CheckOverlap(T.SmiConstant, T.SignedSmall); 821 CheckOverlap(T.SmiConstant, T.SignedSmall);
956 CheckOverlap(T.SmiConstant, T.Signed32); 822 CheckOverlap(T.SmiConstant, T.Signed32);
957 CheckOverlap(T.SmiConstant, T.Number); 823 CheckOverlap(T.SmiConstant, T.Number);
958 CheckOverlap(T.ObjectConstant1, T.Object); 824 CheckOverlap(T.ObjectConstant1, T.Object);
959 CheckOverlap(T.ObjectConstant2, T.Object); 825 CheckOverlap(T.ObjectConstant2, T.Object);
960 CheckOverlap(T.ArrayConstant, T.Object); 826 CheckOverlap(T.ArrayConstant, T.Object);
961 CheckOverlap(T.ArrayConstant, T.Receiver); 827 CheckOverlap(T.ArrayConstant, T.Receiver);
962 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1); 828 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1);
963 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2); 829 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2);
964 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant); 830 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant);
965 CheckOverlap(T.NumberArray, T.Receiver);
966 CheckDisjoint(T.NumberArray, T.AnyArray);
967 CheckDisjoint(T.NumberArray, T.StringArray);
968 CheckOverlap(T.MethodFunction, T.Object);
969 CheckDisjoint(T.SignedFunction1, T.NumberFunction1);
970 CheckDisjoint(T.SignedFunction1, T.NumberFunction2);
971 CheckDisjoint(T.NumberFunction1, T.NumberFunction2);
972 CheckDisjoint(T.SignedFunction1, T.MethodFunction);
973 } 831 }
974 832
975 void Union1() { 833 void Union1() {
976 // Identity: Union(T, None) = T 834 // Identity: Union(T, None) = T
977 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) { 835 for (TypeIterator it = T.types.begin(); it != T.types.end(); ++it) {
978 Type* type = *it; 836 Type* type = *it;
979 Type* union_type = T.Union(type, T.None); 837 Type* union_type = T.Union(type, T.None);
980 CheckEqual(union_type, type); 838 CheckEqual(union_type, type);
981 } 839 }
982 840
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 } 963 }
1106 964
1107 void Union4() { 965 void Union4() {
1108 // Constant-constant 966 // Constant-constant
1109 CheckSub(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.Object); 967 CheckSub(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.Object);
1110 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.OtherObject); 968 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.OtherObject);
1111 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.OtherObject); 969 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.OtherObject);
1112 CheckDisjoint( 970 CheckDisjoint(
1113 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number); 971 T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number);
1114 972
1115 // Bitset-array
1116 CHECK(this->IsBitset(T.Union(T.AnyArray, T.Receiver)));
1117 CHECK(this->IsUnion(T.Union(T.NumberArray, T.Number)));
1118
1119 CheckEqual(T.Union(T.AnyArray, T.Receiver), T.Receiver);
1120 CheckEqual(T.Union(T.AnyArray, T.OtherObject), T.OtherObject);
1121 CheckUnordered(T.Union(T.AnyArray, T.String), T.Receiver);
1122 CheckOverlap(T.Union(T.NumberArray, T.String), T.Object);
1123 CheckDisjoint(T.Union(T.NumberArray, T.String), T.Number);
1124
1125 // Bitset-function
1126 CHECK(this->IsBitset(T.Union(T.MethodFunction, T.Object)));
1127 CHECK(this->IsUnion(T.Union(T.NumberFunction1, T.Number)));
1128
1129 CheckEqual(T.Union(T.MethodFunction, T.Object), T.Object);
1130 CheckUnordered(T.Union(T.NumberFunction1, T.String), T.Object);
1131 CheckOverlap(T.Union(T.NumberFunction2, T.String), T.Object);
1132 CheckDisjoint(T.Union(T.NumberFunction1, T.String), T.Number);
1133
1134 // Bitset-constant 973 // Bitset-constant
1135 CheckSub( 974 CheckSub(
1136 T.Union(T.ObjectConstant1, T.Signed32), T.Union(T.Object, T.Number)); 975 T.Union(T.ObjectConstant1, T.Signed32), T.Union(T.Object, T.Number));
1137 CheckSub(T.Union(T.ObjectConstant1, T.OtherObject), T.Object); 976 CheckSub(T.Union(T.ObjectConstant1, T.OtherObject), T.Object);
1138 CheckUnordered(T.Union(T.ObjectConstant1, T.String), T.OtherObject); 977 CheckUnordered(T.Union(T.ObjectConstant1, T.String), T.OtherObject);
1139 CheckOverlap(T.Union(T.ObjectConstant1, T.String), T.Object); 978 CheckOverlap(T.Union(T.ObjectConstant1, T.String), T.Object);
1140 CheckDisjoint(T.Union(T.ObjectConstant1, T.String), T.Number); 979 CheckDisjoint(T.Union(T.ObjectConstant1, T.String), T.Number);
1141 980
1142 // Constant-union 981 // Constant-union
1143 CheckEqual( 982 CheckEqual(
1144 T.Union( 983 T.Union(
1145 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), 984 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)),
1146 T.Union(T.ObjectConstant2, T.ObjectConstant1)); 985 T.Union(T.ObjectConstant2, T.ObjectConstant1));
1147 CheckEqual( 986 CheckEqual(
1148 T.Union( 987 T.Union(
1149 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1), 988 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1),
1150 T.Union( 989 T.Union(
1151 T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1))); 990 T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1)));
1152 991
1153 // Array-union
1154 CheckEqual(
1155 T.Union(T.AnyArray, T.Union(T.NumberArray, T.AnyArray)),
1156 T.Union(T.AnyArray, T.NumberArray));
1157 CheckSub(T.Union(T.AnyArray, T.NumberArray), T.OtherObject);
1158
1159 // Function-union
1160 CheckEqual(
1161 T.Union(T.NumberFunction1, T.NumberFunction2),
1162 T.Union(T.NumberFunction2, T.NumberFunction1));
1163 CheckSub(T.Union(T.SignedFunction1, T.MethodFunction), T.Object);
1164
1165 // Union-union 992 // Union-union
1166 CheckEqual( 993 CheckEqual(
1167 T.Union( 994 T.Union(
1168 T.Union(T.ObjectConstant2, T.ObjectConstant1), 995 T.Union(T.ObjectConstant2, T.ObjectConstant1),
1169 T.Union(T.ObjectConstant1, T.ObjectConstant2)), 996 T.Union(T.ObjectConstant1, T.ObjectConstant2)),
1170 T.Union(T.ObjectConstant2, T.ObjectConstant1)); 997 T.Union(T.ObjectConstant2, T.ObjectConstant1));
1171 } 998 }
1172 999
1173 void Intersect() { 1000 void Intersect() {
1174 // Identity: Intersect(T, Any) = T 1001 // Identity: Intersect(T, Any) = T
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 Type* type1 = *it1; 1048 Type* type1 = *it1;
1222 Type* type2 = *it2; 1049 Type* type2 = *it2;
1223 Type* type3 = *it3; 1050 Type* type3 = *it3;
1224 Type* intersect23 = T.Intersect(type2, type3); 1051 Type* intersect23 = T.Intersect(type2, type3);
1225 CHECK(!(type1->Is(type2) && type1->Is(type3)) || 1052 CHECK(!(type1->Is(type2) && type1->Is(type3)) ||
1226 type1->Is(intersect23)); 1053 type1->Is(intersect23));
1227 } 1054 }
1228 } 1055 }
1229 } 1056 }
1230 1057
1231 // Bitset-array
1232 CheckEqual(T.Intersect(T.NumberArray, T.Object), T.NumberArray);
1233 CheckEqual(T.Semantic(T.Intersect(T.AnyArray, T.Proxy)), T.None);
1234
1235 // Bitset-function
1236 CheckEqual(T.Intersect(T.MethodFunction, T.Object), T.MethodFunction);
1237 CheckEqual(T.Semantic(T.Intersect(T.NumberFunction1, T.Proxy)), T.None);
1238
1239 // Array-union
1240 CheckEqual(
1241 T.Intersect(T.AnyArray, T.Union(T.Object, T.SmiConstant)),
1242 T.AnyArray);
1243 CHECK(
1244 !T.Intersect(T.Union(T.AnyArray, T.ArrayConstant), T.NumberArray)
1245 ->IsInhabited());
1246
1247 // Function-union
1248 CheckEqual(
1249 T.Intersect(T.MethodFunction, T.Union(T.String, T.MethodFunction)),
1250 T.MethodFunction);
1251 CheckEqual(
1252 T.Intersect(T.NumberFunction1, T.Union(T.Object, T.SmiConstant)),
1253 T.NumberFunction1);
1254 CHECK(
1255 !T.Intersect(T.Union(T.MethodFunction, T.Name), T.NumberFunction2)
1256 ->IsInhabited());
1257
1258 // Constant-union 1058 // Constant-union
1259 CheckEqual( 1059 CheckEqual(
1260 T.Intersect( 1060 T.Intersect(
1261 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), 1061 T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)),
1262 T.ObjectConstant1); 1062 T.ObjectConstant1);
1263 CheckEqual( 1063 CheckEqual(
1264 T.Intersect(T.SmiConstant, T.Union(T.Number, T.ObjectConstant2)), 1064 T.Intersect(T.SmiConstant, T.Union(T.Number, T.ObjectConstant2)),
1265 T.SmiConstant); 1065 T.SmiConstant);
1266 1066
1267 // Union-union 1067 // Union-union
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 TEST(IsSomeType) { Tests().IsSomeType(); } 1153 TEST(IsSomeType) { Tests().IsSomeType(); }
1354 1154
1355 TEST(PointwiseRepresentation) { Tests().PointwiseRepresentation(); } 1155 TEST(PointwiseRepresentation) { Tests().PointwiseRepresentation(); }
1356 1156
1357 TEST(BitsetType) { Tests().Bitset(); } 1157 TEST(BitsetType) { Tests().Bitset(); }
1358 1158
1359 TEST(ConstantType) { Tests().Constant(); } 1159 TEST(ConstantType) { Tests().Constant(); }
1360 1160
1361 TEST(RangeType) { Tests().Range(); } 1161 TEST(RangeType) { Tests().Range(); }
1362 1162
1363 TEST(ArrayType) { Tests().Array(); }
1364
1365 TEST(FunctionType) { Tests().Function(); }
1366
1367 TEST(Of) { Tests().Of(); } 1163 TEST(Of) { Tests().Of(); }
1368 1164
1369 TEST(MinMax) { Tests().MinMax(); } 1165 TEST(MinMax) { Tests().MinMax(); }
1370 1166
1371 TEST(BitsetGlb) { Tests().BitsetGlb(); } 1167 TEST(BitsetGlb) { Tests().BitsetGlb(); }
1372 1168
1373 TEST(BitsetLub) { Tests().BitsetLub(); } 1169 TEST(BitsetLub) { Tests().BitsetLub(); }
1374 1170
1375 TEST(Is1) { Tests().Is1(); } 1171 TEST(Is1) { Tests().Is1(); }
1376 1172
1377 TEST(Is2) { Tests().Is2(); } 1173 TEST(Is2) { Tests().Is2(); }
1378 1174
1379 TEST(Contains) { Tests().Contains(); } 1175 TEST(Contains) { Tests().Contains(); }
1380 1176
1381 TEST(Maybe) { Tests().Maybe(); } 1177 TEST(Maybe) { Tests().Maybe(); }
1382 1178
1383 TEST(Union1) { Tests().Union1(); } 1179 TEST(Union1) { Tests().Union1(); }
1384 1180
1385 TEST(Union2) { Tests().Union2(); } 1181 TEST(Union2) { Tests().Union2(); }
1386 1182
1387 TEST(Union3) { Tests().Union3(); } 1183 TEST(Union3) { Tests().Union3(); }
1388 1184
1389 TEST(Union4) { Tests().Union4(); } 1185 TEST(Union4) { Tests().Union4(); }
1390 1186
1391 TEST(Intersect) { Tests().Intersect(); } 1187 TEST(Intersect) { Tests().Intersect(); }
1392 1188
1393 TEST(Distributivity) { Tests().Distributivity(); } 1189 TEST(Distributivity) { Tests().Distributivity(); }
1394 1190
1395 TEST(GetRange) { Tests().GetRange(); } 1191 TEST(GetRange) { Tests().GetRange(); }
OLDNEW
« no previous file with comments | « src/types.cc ('k') | test/cctest/types-fuzz.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698