summaryrefslogtreecommitdiff
path: root/test/gtest
diff options
context:
space:
mode:
Diffstat (limited to 'test/gtest')
-rw-r--r--test/gtest/possible-contents.cpp6
-rw-r--r--test/gtest/type-builder.cpp100
-rw-r--r--test/gtest/type-test.h17
3 files changed, 26 insertions, 97 deletions
diff --git a/test/gtest/possible-contents.cpp b/test/gtest/possible-contents.cpp
index dc10c00bf..85a4e86fd 100644
--- a/test/gtest/possible-contents.cpp
+++ b/test/gtest/possible-contents.cpp
@@ -66,11 +66,6 @@ static std::unique_ptr<Module> parse(std::string module) {
// that.
class PossibleContentsTest : public testing::Test {
protected:
- void SetUp() override {
- // Use nominal typing to test struct types.
- wasm::setTypeSystem(TypeSystem::Nominal);
- }
-
Type anyref = Type(HeapType::any, Nullable);
Type funcref = Type(HeapType::func, Nullable);
Type i31ref = Type(HeapType::i31, Nullable);
@@ -542,6 +537,7 @@ TEST_F(PossibleContentsTest, TestStructCones) {
D
*/
TypeBuilder builder(5);
+ builder.createRecGroup(0, 5);
builder.setHeapType(0, Struct(FieldList{}));
builder.setHeapType(1, Struct(FieldList{}));
builder.setHeapType(2, Struct(FieldList{}));
diff --git a/test/gtest/type-builder.cpp b/test/gtest/type-builder.cpp
index af6613bd2..7d5f5aa98 100644
--- a/test/gtest/type-builder.cpp
+++ b/test/gtest/type-builder.cpp
@@ -156,7 +156,7 @@ TEST_F(TypeTest, ModuleTypePrinter) {
EXPECT_EQ(stream.str(), "(type $1 (struct (field i32)))");
}
-TEST_F(IsorecursiveTest, Basics) {
+TEST_F(TypeTest, Basics) {
// (type $sig (func (param (ref $struct)) (result (ref $array) i32)))
// (type $struct (struct (field (ref null $array))))
// (type $array (array (mut anyref)))
@@ -207,7 +207,7 @@ TEST_F(IsorecursiveTest, Basics) {
EXPECT_NE(newRefNullArray, refNullArray);
}
-static void testDirectSelfSupertype() {
+TEST_F(TypeTest, DirectSelfSupertype) {
// Type is directly a supertype of itself.
TypeBuilder builder(1);
builder[0] = Struct{};
@@ -218,19 +218,11 @@ static void testDirectSelfSupertype() {
const auto* error = result.getError();
ASSERT_TRUE(error);
- if (getTypeSystem() == TypeSystem::Nominal) {
- EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::SelfSupertype);
- } else if (getTypeSystem() == TypeSystem::Isorecursive) {
- EXPECT_EQ(error->reason,
- TypeBuilder::ErrorReason::ForwardSupertypeReference);
- }
+ EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::ForwardSupertypeReference);
EXPECT_EQ(error->index, 0u);
}
-TEST_F(NominalTest, DirectSelfSupertype) { testDirectSelfSupertype(); }
-TEST_F(IsorecursiveTest, DirectSelfSupertype) { testDirectSelfSupertype(); }
-
-static void testIndirectSelfSupertype() {
+TEST_F(TypeTest, IndirectSelfSupertype) {
// Type is indirectly a supertype of itself.
TypeBuilder builder(2);
builder.createRecGroup(0, 2);
@@ -244,21 +236,11 @@ static void testIndirectSelfSupertype() {
const auto* error = result.getError();
ASSERT_TRUE(error);
- if (getTypeSystem() == TypeSystem::Nominal) {
- EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::SelfSupertype);
- } else if (getTypeSystem() == TypeSystem::Isorecursive) {
- EXPECT_EQ(error->reason,
- TypeBuilder::ErrorReason::ForwardSupertypeReference);
- } else {
- WASM_UNREACHABLE("unexpected type system");
- }
+ EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::ForwardSupertypeReference);
EXPECT_EQ(error->index, 0u);
}
-TEST_F(NominalTest, IndirectSelfSupertype) { testIndirectSelfSupertype(); }
-TEST_F(IsorecursiveTest, IndirectSelfSupertype) { testIndirectSelfSupertype(); }
-
-static void testInvalidSupertype() {
+TEST_F(TypeTest, InvalidSupertype) {
TypeBuilder builder(2);
builder.createRecGroup(0, 2);
builder[0] = Struct({Field(Type::i32, Immutable)});
@@ -274,10 +256,7 @@ static void testInvalidSupertype() {
EXPECT_EQ(error->index, 1u);
}
-TEST_F(NominalTest, InvalidSupertype) { testInvalidSupertype(); }
-TEST_F(IsorecursiveTest, InvalidSupertype) { testInvalidSupertype(); }
-
-TEST_F(IsorecursiveTest, ForwardReferencedChild) {
+TEST_F(TypeTest, ForwardReferencedChild) {
TypeBuilder builder(3);
builder.createRecGroup(0, 2);
Type refA1 = builder.getTempRefType(builder[1], Nullable);
@@ -297,7 +276,7 @@ TEST_F(IsorecursiveTest, ForwardReferencedChild) {
EXPECT_EQ(error->index, 1u);
}
-TEST_F(IsorecursiveTest, RecGroupIndices) {
+TEST_F(TypeTest, RecGroupIndices) {
TypeBuilder builder(5);
builder.createRecGroup(0, 2);
@@ -324,7 +303,7 @@ TEST_F(IsorecursiveTest, RecGroupIndices) {
EXPECT_EQ(built[4].getRecGroupIndex(), 2u);
}
-TEST_F(IsorecursiveTest, CanonicalizeGroups) {
+TEST_F(TypeTest, CanonicalizeGroups) {
// Trivial types in the same group are not equivalent.
TypeBuilder builderA(2);
builderA.createRecGroup(0, 2);
@@ -374,7 +353,7 @@ TEST_F(IsorecursiveTest, CanonicalizeGroups) {
EXPECT_EQ(builtB2[0], builtB[0]);
}
-TEST_F(IsorecursiveTest, CanonicalizeUses) {
+TEST_F(TypeTest, CanonicalizeUses) {
TypeBuilder builder(8);
builder[0] = makeStruct(builder, {});
builder[1] = makeStruct(builder, {});
@@ -402,7 +381,7 @@ TEST_F(IsorecursiveTest, CanonicalizeUses) {
EXPECT_NE(built[4], built[6]);
}
-TEST_F(IsorecursiveTest, CanonicalizeSelfReferences) {
+TEST_F(TypeTest, CanonicalizeSelfReferences) {
TypeBuilder builder(5);
// Single self-reference
builder[0] = makeStruct(builder, {0});
@@ -428,7 +407,7 @@ TEST_F(IsorecursiveTest, CanonicalizeSelfReferences) {
EXPECT_NE(built[3], built[4]);
}
-TEST_F(IsorecursiveTest, CanonicalizeSupertypes) {
+TEST_F(TypeTest, CanonicalizeSupertypes) {
TypeBuilder builder(6);
builder[0] = Struct{};
builder[1] = Struct{};
@@ -455,7 +434,7 @@ TEST_F(IsorecursiveTest, CanonicalizeSupertypes) {
EXPECT_NE(built[4], built[5]);
}
-TEST_F(IsorecursiveTest, HeapTypeConstructors) {
+TEST_F(TypeTest, HeapTypeConstructors) {
HeapType sig(Signature(Type::i32, Type::i32));
HeapType struct_(Struct({Field(Type(sig, Nullable), Mutable)}));
HeapType array(Field(Type(struct_, Nullable), Mutable));
@@ -484,7 +463,7 @@ TEST_F(IsorecursiveTest, HeapTypeConstructors) {
EXPECT_EQ(array, array2);
}
-TEST_F(IsorecursiveTest, CanonicalizeTypesBeforeSubtyping) {
+TEST_F(TypeTest, CanonicalizeTypesBeforeSubtyping) {
TypeBuilder builder(6);
// A rec group
builder.createRecGroup(0, 2);
@@ -510,7 +489,7 @@ TEST_F(IsorecursiveTest, CanonicalizeTypesBeforeSubtyping) {
EXPECT_TRUE(result);
}
-TEST_F(IsorecursiveTest, CanonicalizeBasicTypes) {
+TEST_F(TypeTest, CanonicalizeBasicTypes) {
TypeBuilder builder(5);
Type anyref = builder.getTempRefType(builder[0], Nullable);
@@ -532,7 +511,7 @@ TEST_F(IsorecursiveTest, CanonicalizeBasicTypes) {
EXPECT_EQ(built[3], built[4]);
}
-TEST_F(IsorecursiveTest, TestHeapTypeRelations) {
+TEST_F(TypeTest, TestHeapTypeRelations) {
HeapType ext = HeapType::ext;
HeapType func = HeapType::func;
HeapType any = HeapType::any;
@@ -829,7 +808,7 @@ TEST_F(IsorecursiveTest, TestHeapTypeRelations) {
}
}
-TEST_F(IsorecursiveTest, TestSubtypeErrors) {
+TEST_F(TypeTest, TestSubtypeErrors) {
Type anyref = Type(HeapType::any, Nullable);
Type eqref = Type(HeapType::eq, Nullable);
Type funcref = Type(HeapType::func, Nullable);
@@ -872,7 +851,7 @@ TEST_F(IsorecursiveTest, TestSubtypeErrors) {
}
// Test SubTypes utility code.
-TEST_F(NominalTest, TestSubTypes) {
+TEST_F(TypeTest, TestSubTypes) {
Type anyref = Type(HeapType::any, Nullable);
Type eqref = Type(HeapType::eq, Nullable);
@@ -907,40 +886,7 @@ TEST_F(NominalTest, TestSubTypes) {
}
// Test reuse of a previously built type as supertype.
-TEST_F(NominalTest, TestExistingSuperType) {
- // Build an initial type A
- Type A;
- {
- TypeBuilder builder(1);
- builder[0] = Struct();
- auto result = builder.build();
- ASSERT_TRUE(result);
- auto built = *result;
- A = Type(built[0], Nullable);
- }
-
- // Build a type B <: A using a new builder
- Type B;
- {
- TypeBuilder builder(1);
- builder[0] = Struct();
- builder.setSubType(0, A.getHeapType());
- auto result = builder.build();
- ASSERT_TRUE(result);
- auto built = *result;
- B = Type(built[0], Nullable);
- }
-
- // Test that B <: A where A is the initial type A
- auto superOfB = B.getHeapType().getSuperType();
- ASSERT_TRUE(superOfB);
- EXPECT_EQ(*superOfB, A.getHeapType());
- EXPECT_NE(B.getHeapType(), A.getHeapType());
-}
-
-// Test reuse of a previously built type as supertype, where in isorecursive
-// mode canonicalization is performed.
-TEST_F(IsorecursiveTest, TestExistingSuperType) {
+TEST_F(TypeTest, TestExistingSuperType) {
// Build an initial type A1
Type A1;
{
@@ -993,7 +939,7 @@ TEST_F(IsorecursiveTest, TestExistingSuperType) {
}
// Test .getMaxDepths() helper.
-TEST_F(NominalTest, TestMaxStructDepths) {
+TEST_F(TypeTest, TestMaxStructDepths) {
/*
A
|
@@ -1022,7 +968,7 @@ TEST_F(NominalTest, TestMaxStructDepths) {
EXPECT_EQ(maxDepths[HeapType::any], Index(4));
}
-TEST_F(NominalTest, TestMaxArrayDepths) {
+TEST_F(TypeTest, TestMaxArrayDepths) {
HeapType A;
{
TypeBuilder builder(1);
@@ -1043,7 +989,7 @@ TEST_F(NominalTest, TestMaxArrayDepths) {
}
// Test .depth() helper.
-TEST_F(NominalTest, TestDepth) {
+TEST_F(TypeTest, TestDepth) {
HeapType A, B, C;
{
TypeBuilder builder(3);
@@ -1086,7 +1032,7 @@ TEST_F(NominalTest, TestDepth) {
}
// Test .iterSubTypes() helper.
-TEST_F(NominalTest, TestIterSubTypes) {
+TEST_F(TypeTest, TestIterSubTypes) {
/*
A
/ \
diff --git a/test/gtest/type-test.h b/test/gtest/type-test.h
index 49c6381fa..f029b8027 100644
--- a/test/gtest/type-test.h
+++ b/test/gtest/type-test.h
@@ -5,19 +5,10 @@
#define wasm_test_gtest_type_test_h
// Helper test fixture for managing the global type system state.
-template<wasm::TypeSystem system>
-class TypeSystemTest : public ::testing::Test {
- wasm::TypeSystem originalSystem;
+class TypeTest : public ::testing::Test {
protected:
- void SetUp() override {
- originalSystem = wasm::getTypeSystem();
- wasm::setTypeSystem(system);
- }
- void TearDown() override {
- wasm::destroyAllTypesForTestingPurposesOnly();
- wasm::setTypeSystem(originalSystem);
- }
+ void TearDown() override { wasm::destroyAllTypesForTestingPurposesOnly(); }
// Utilities
wasm::Struct makeStruct(wasm::TypeBuilder& builder,
@@ -32,8 +23,4 @@ protected:
}
};
-using TypeTest = TypeSystemTest<wasm::TypeSystem::Isorecursive>;
-using NominalTest = TypeSystemTest<wasm::TypeSystem::Nominal>;
-using IsorecursiveTest = TypeSystemTest<wasm::TypeSystem::Isorecursive>;
-
#endif // wasm_test_gtest_type_test_h