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

Unified Diff: test/cctest/test-types.cc

Issue 145083007: Type representation converter (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/types.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-types.cc
diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc
index 9c3cce95339a47506a1203e53d070ee2f5d02c43..0b9d0100a08c8cba5703b81793fd02c5f8b6e307 100644
--- a/test/cctest/test-types.cc
+++ b/test/cctest/test-types.cc
@@ -119,6 +119,54 @@ class Types {
return Type::Intersect(t1, t2, region_);
}
+ template<class Type2, class TypeHandle2>
+ TypeHandle Convert(TypeHandle2 t) {
+ return Type::template Convert<Type2>(t, region_);
+ }
+
+ TypeHandle Fuzz(int depth = 5) {
+ switch (random() % (depth == 0 ? 3 : 20)) {
+ case 0: { // bitset
+ int n = 0
+ #define COUNT_BITSET_TYPES(type, value) + 1
+ BITSET_TYPE_LIST(COUNT_BITSET_TYPES)
+ #undef COUNT_BITSET_TYPES
+ ;
+ int i = random() % n;
+ #define PICK_BITSET_TYPES(type, value) \
+ if (i-- == 0) return Type::type(region_);
+ BITSET_TYPE_LIST(PICK_BITSET_TYPES)
+ #undef PICK_BITSET_TYPES
+ UNREACHABLE();
+ }
+ case 1: // class
+ switch (random() % 2) {
+ case 0: return ObjectClass;
+ case 1: return ArrayClass;
+ }
+ UNREACHABLE();
+ case 2: // constant
+ switch (random() % 6) {
+ case 0: return SmiConstant;
+ case 1: return Signed32Constant;
+ case 2: return ObjectConstant1;
+ case 3: return ObjectConstant2;
+ case 4: return ArrayConstant1;
+ case 5: return ArrayConstant2;
+ }
+ UNREACHABLE();
+ default: { // union
+ int n = random() % 10;
+ TypeHandle type = None;
+ for (int i = 0; i < n; ++i) {
+ type = Type::Union(type, Fuzz(depth - 1), region_);
+ }
+ return type;
+ }
+ }
+ UNREACHABLE();
+ }
+
private:
Region* region_;
};
@@ -756,6 +804,16 @@ struct Tests : Rep {
T.Union(T.ObjectConstant1, T.ArrayConstant2)),
T.ArrayConstant1);
}
+
+ template<class Type2, class TypeHandle2, class Region2, class Rep2>
+ void Convert() {
+ Types<Type2, TypeHandle2, Region2> T2(
+ Rep2::ToRegion(&zone, isolate), isolate);
+ for (int i = 0; i < 100; ++i) {
+ TypeHandle type = T.Fuzz();
+ CheckEqual(type, T.Convert<Type2>(T2.Convert<Type>(type)));
+ }
+ }
};
typedef Tests<Type, Type*, Zone, ZoneRep> ZoneTests;
@@ -809,3 +867,10 @@ TEST(Intersect) {
ZoneTests().Intersect();
HeapTests().Intersect();
}
+
+
+TEST(Convert) {
+ CcTest::InitializeVM();
+ ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>();
+ HeapTests().Convert<Type, Type*, Zone, ZoneRep>();
+}
« no previous file with comments | « src/types.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698