summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/example/type-builder-nominal.cpp1
-rw-r--r--test/gtest/type-builder.cpp30
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);
+}