diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/example/type-builder.cpp | 119 | ||||
-rw-r--r-- | test/example/type-builder.txt | 3 |
2 files changed, 75 insertions, 47 deletions
diff --git a/test/example/type-builder.cpp b/test/example/type-builder.cpp index 0ac13f974..29ff20f75 100644 --- a/test/example/type-builder.cpp +++ b/test/example/type-builder.cpp @@ -13,13 +13,16 @@ void test_builder() { // (type $struct (struct (field (ref null $array) (mut rtt 0 $array)))) // (type $array (array (mut externref))) - TypeBuilder builder(3); - - Type refSig = builder.getTempRefType(0, NonNullable); - Type refStruct = builder.getTempRefType(1, NonNullable); - Type refArray = builder.getTempRefType(2, NonNullable); - Type refNullArray = builder.getTempRefType(2, Nullable); - Type rttArray = builder.getTempRttType(2, 0); + TypeBuilder builder; + assert(builder.size() == 0); + builder.grow(3); + assert(builder.size() == 3); + + Type refSig = builder.getTempRefType(builder[0], NonNullable); + Type refStruct = builder.getTempRefType(builder[1], NonNullable); + Type refArray = builder.getTempRefType(builder[2], NonNullable); + Type refNullArray = builder.getTempRefType(builder[2], Nullable); + Type rttArray = builder.getTempRttType(Rtt(0, builder[2])); Type refNullExt(HeapType::ext, Nullable); Signature sig(refStruct, builder.getTempTupleType({refArray, Type::i32})); @@ -33,9 +36,9 @@ void test_builder() { std::cout << "(ref null $array) => " << refNullArray << "\n"; std::cout << "(rtt 0 $array) => " << rttArray << "\n\n"; - builder.setHeapType(0, sig); - builder.setHeapType(1, struct_); - builder.setHeapType(2, array); + builder[0] = sig; + builder[1] = struct_; + builder[2] = array; std::cout << "After setting heap types:\n"; std::cout << "(ref $sig) => " << refSig << "\n"; @@ -78,19 +81,19 @@ void test_canonicalization() { TypeBuilder builder(4); - Type tempSigRef1 = builder.getTempRefType(2, Nullable); - Type tempSigRef2 = builder.getTempRefType(3, Nullable); + Type tempSigRef1 = builder.getTempRefType(builder[2], Nullable); + Type tempSigRef2 = builder.getTempRefType(builder[3], Nullable); assert(tempSigRef1 != tempSigRef2); assert(tempSigRef1 != Type(sig, Nullable)); assert(tempSigRef2 != Type(sig, Nullable)); - builder.setHeapType( - 0, Struct({Field(tempSigRef1, Immutable), Field(tempSigRef1, Immutable)})); - builder.setHeapType( - 1, Struct({Field(tempSigRef2, Immutable), Field(tempSigRef2, Immutable)})); - builder.setHeapType(2, Signature(Type::none, Type::none)); - builder.setHeapType(3, Signature(Type::none, Type::none)); + builder[0] = + Struct({Field(tempSigRef1, Immutable), Field(tempSigRef1, Immutable)}); + builder[1] = + Struct({Field(tempSigRef2, Immutable), Field(tempSigRef2, Immutable)}); + builder[2] = Signature(Type::none, Type::none); + builder[3] = Signature(Type::none, Type::none); std::vector<HeapType> built = builder.build(); @@ -108,8 +111,8 @@ void test_recursive() { std::vector<HeapType> built; { TypeBuilder builder(1); - Type temp = builder.getTempRefType(0, Nullable); - builder.setHeapType(0, Signature(Type::none, temp)); + Type temp = builder.getTempRefType(builder[0], Nullable); + builder[0] = Signature(Type::none, temp); built = builder.build(); } std::cout << built[0] << "\n\n"; @@ -122,10 +125,10 @@ void test_recursive() { std::vector<HeapType> built; { TypeBuilder builder(2); - Type temp0 = builder.getTempRefType(0, Nullable); - Type temp1 = builder.getTempRefType(1, Nullable); - builder.setHeapType(0, Signature(Type::none, temp1)); - builder.setHeapType(1, Signature(Type::none, temp0)); + Type temp0 = builder.getTempRefType(builder[0], Nullable); + Type temp1 = builder.getTempRefType(builder[1], Nullable); + builder[0] = Signature(Type::none, temp1); + builder[1] = Signature(Type::none, temp0); built = builder.build(); } std::cout << built[0] << "\n"; @@ -140,16 +143,16 @@ void test_recursive() { std::vector<HeapType> built; { TypeBuilder builder(5); - Type temp0 = builder.getTempRefType(0, Nullable); - Type temp1 = builder.getTempRefType(1, Nullable); - Type temp2 = builder.getTempRefType(2, Nullable); - Type temp3 = builder.getTempRefType(3, Nullable); - Type temp4 = builder.getTempRefType(4, Nullable); - builder.setHeapType(0, Signature(Type::none, temp1)); - builder.setHeapType(1, Signature(Type::none, temp2)); - builder.setHeapType(2, Signature(Type::none, temp3)); - builder.setHeapType(3, Signature(Type::none, temp4)); - builder.setHeapType(4, Signature(Type::none, temp0)); + Type temp0 = builder.getTempRefType(builder[0], Nullable); + Type temp1 = builder.getTempRefType(builder[1], Nullable); + Type temp2 = builder.getTempRefType(builder[2], Nullable); + Type temp3 = builder.getTempRefType(builder[3], Nullable); + Type temp4 = builder.getTempRefType(builder[4], Nullable); + builder[0] = Signature(Type::none, temp1); + builder[1] = Signature(Type::none, temp2); + builder[2] = Signature(Type::none, temp3); + builder[3] = Signature(Type::none, temp4); + builder[4] = Signature(Type::none, temp0); built = builder.build(); } std::cout << built[0] << "\n"; @@ -174,18 +177,18 @@ void test_recursive() { std::vector<HeapType> built; { TypeBuilder builder(6); - Type temp0 = builder.getTempRefType(0, Nullable); - Type temp1 = builder.getTempRefType(1, Nullable); - Type temp2 = builder.getTempRefType(2, Nullable); - Type temp3 = builder.getTempRefType(3, Nullable); + Type temp0 = builder.getTempRefType(builder[0], Nullable); + Type temp1 = builder.getTempRefType(builder[1], Nullable); + Type temp2 = builder.getTempRefType(builder[2], Nullable); + Type temp3 = builder.getTempRefType(builder[3], Nullable); Type tuple0_2 = builder.getTempTupleType({temp0, temp2}); Type tuple1_3 = builder.getTempTupleType({temp1, temp3}); - builder.setHeapType(0, Signature(Type::none, tuple0_2)); - builder.setHeapType(1, Signature(Type::none, tuple1_3)); - builder.setHeapType(2, Signature()); - builder.setHeapType(3, Signature()); - builder.setHeapType(4, Signature(Type::none, temp0)); - builder.setHeapType(5, Signature(Type::none, temp1)); + builder[0] = Signature(Type::none, tuple0_2); + builder[1] = Signature(Type::none, tuple1_3); + builder[2] = Signature(); + builder[3] = Signature(); + builder[4] = Signature(Type::none, temp0); + builder[5] = Signature(Type::none, temp1); built = builder.build(); } std::cout << built[0] << "\n"; @@ -210,16 +213,38 @@ void test_recursive() { std::vector<HeapType> built; { TypeBuilder builder(2); - Type temp0 = builder.getTempRefType(0, Nullable); - builder.setHeapType(0, Signature(Type::none, temp0)); - builder.setHeapType(1, Signature(Type::none, temp0)); + Type temp0 = builder.getTempRefType(builder[0], Nullable); + builder[0] = Signature(Type::none, temp0); + builder[1] = Signature(Type::none, temp0); + built = builder.build(); + } + std::cout << built[0] << "\n"; + std::cout << built[1] << "\n\n"; + assert(built[0].getSignature().results.getHeapType() == built[0]); + assert(built[1].getSignature().results.getHeapType() == built[0]); + assert(built[0] == built[1]); + } + + { + // Including a basic heap type + std::vector<HeapType> built; + { + TypeBuilder builder(3); + Type temp0 = builder.getTempRefType(builder[0], Nullable); + Type anyref = builder.getTempRefType(builder[2], Nullable); + builder[0] = Signature(anyref, temp0); + builder[1] = Signature(anyref, temp0); + builder[2] = HeapType::any; built = builder.build(); } std::cout << built[0] << "\n"; std::cout << built[1] << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[0]); assert(built[1].getSignature().results.getHeapType() == built[0]); + assert(built[0].getSignature().params == Type::anyref); + assert(built[1].getSignature().params == Type::anyref); assert(built[0] == built[1]); + assert(built[2] == HeapType::any); } } diff --git a/test/example/type-builder.txt b/test/example/type-builder.txt index a2985c2ed..f65a94321 100644 --- a/test/example/type-builder.txt +++ b/test/example/type-builder.txt @@ -43,3 +43,6 @@ After building types: (func (result (ref null ...1))) (func (result (ref null ...1))) +(func (param anyref) (result (ref null ...1))) +(func (param anyref) (result (ref null ...1))) + |