diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/example/type-builder-nominal.cpp | 1 | ||||
-rw-r--r-- | test/gtest/type-builder.cpp | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/test/example/type-builder-nominal.cpp b/test/example/type-builder-nominal.cpp index 34571c48e..8dbbfcf30 100644 --- a/test/example/type-builder-nominal.cpp +++ b/test/example/type-builder-nominal.cpp @@ -1,6 +1,7 @@ #include <cassert> #include <iostream> +#include "wasm-builder.h" #include "wasm-type-printing.h" #include "wasm-type.h" diff --git a/test/gtest/type-builder.cpp b/test/gtest/type-builder.cpp index 42b388532..5f3ed7384 100644 --- a/test/gtest/type-builder.cpp +++ b/test/gtest/type-builder.cpp @@ -1,3 +1,4 @@ +#include "ir/subtypes.h" #include "type-test.h" #include "wasm-type-printing.h" #include "wasm-type.h" @@ -498,3 +499,32 @@ TEST_F(EquirecursiveTest, CanonicalizeBasicTypes) { TEST_F(IsorecursiveTest, CanonicalizeBasicTypes) { testCanonicalizeBasicTypes(); } + +// Test SubTypes utility code. +TEST_F(NominalTest, testSubTypes) { + // Build type types, the second of which is a subtype. + TypeBuilder builder(2); + builder[0] = Struct({Field(Type::anyref, Immutable)}); + builder[1] = Struct({Field(Type::funcref, Immutable)}); + builder[1].subTypeOf(builder[0]); + auto built = *builder.build(); + + // Build a tiny wasm module that uses the types, so that we can test the + // SubTypes utility code. + Module wasm; + Builder wasmBuilder(wasm); + wasm.addFunction(wasmBuilder.makeFunction( + "func", + Signature(Type::none, Type::none), + {Type(built[0], Nullable), Type(built[1], Nullable)}, + wasmBuilder.makeNop())); + SubTypes subTypes(wasm); + auto subTypes0 = subTypes.getStrictSubTypes(built[0]); + EXPECT_TRUE(subTypes0.size() == 1 && subTypes0[0] == built[1]); + auto subTypes0Inclusive = subTypes.getAllSubTypes(built[0]); + EXPECT_TRUE(subTypes0Inclusive.size() == 2 && + subTypes0Inclusive[0] == built[1] && + subTypes0Inclusive[1] == built[0]); + auto subTypes1 = subTypes.getStrictSubTypes(built[1]); + EXPECT_EQ(subTypes1.size(), 0u); +} |