@@ -810,3 +810,77 @@ TEST(api, find_exported_memory_reimport)
810
810
// importing the same table into the module with equal limits, instantiate should succeed
811
811
instantiate (parse (wasm_reimported_memory), {}, {}, {*opt_memory});
812
812
}
813
+
814
+ TEST (api, find_exported_memory_after_grow)
815
+ {
816
+ /* wat2wasm
817
+ (module
818
+ (memory (export "mem") 1 2)
819
+ (func (drop (memory.grow (i32.const 1))))
820
+ )
821
+ */
822
+ const auto wasm = from_hex (
823
+ " 0061736d0100000001040160000003020100050401010102070701036d656d02000a09010700410140001a0b" );
824
+
825
+ auto instance = instantiate (parse (wasm));
826
+
827
+ EXPECT_THAT (execute (*instance, 0 , {}), Result ());
828
+
829
+ auto opt_memory = find_exported_memory (*instance, " mem" );
830
+ ASSERT_TRUE (opt_memory);
831
+ EXPECT_EQ (opt_memory->data ->size (), 2 * PageSize);
832
+ EXPECT_EQ (opt_memory->limits .min , 2 );
833
+ ASSERT_TRUE (opt_memory->limits .max .has_value ());
834
+ EXPECT_EQ (opt_memory->limits .max , 2 );
835
+ }
836
+
837
+ TEST (api, import_grown_memory)
838
+ {
839
+ /* wat2wasm
840
+ (module
841
+ (memory (export "mem") 1)
842
+ (func (drop (memory.grow (i32.const 1))))
843
+ )
844
+ */
845
+ const auto wasm = from_hex (
846
+ " 0061736d01000000010401600000030201000503010001070701036d656d02000a09010700410140001a0b" );
847
+
848
+ auto instance = instantiate (parse (wasm));
849
+
850
+ EXPECT_THAT (execute (*instance, 0 , {}), Result ());
851
+
852
+ auto memory = find_exported_memory (*instance, " mem" );
853
+ ASSERT_TRUE (memory);
854
+ EXPECT_EQ (memory->data ->size (), 2 * PageSize);
855
+ EXPECT_EQ (memory->limits .min , 2 );
856
+ ASSERT_FALSE (memory->limits .max .has_value ());
857
+
858
+ /* wat2wasm
859
+ (module
860
+ (memory (export "mem2") (import "m" "mem") 2)
861
+ (func (drop (memory.grow (i32.const 1))))
862
+ )
863
+ */
864
+ const auto wasm_reexported_mem = from_hex (
865
+ " 0061736d01000000010401600000020a01016d036d656d02000203020100070801046d656d3202000a09010700"
866
+ " 410140001a0b" );
867
+
868
+ auto instance_reexported_mem = instantiate (parse (wasm_reexported_mem), {}, {}, {*memory});
869
+
870
+ EXPECT_THAT (execute (*instance_reexported_mem, 0 , {}), Result ());
871
+
872
+ auto reexported_memory = find_exported_memory (*instance_reexported_mem, " mem2" );
873
+ ASSERT_TRUE (reexported_memory);
874
+ EXPECT_EQ (reexported_memory->data ->size (), 3 * PageSize);
875
+ EXPECT_EQ (reexported_memory->limits .min , 3 );
876
+ ASSERT_FALSE (reexported_memory->limits .max .has_value ());
877
+
878
+ /* wat2wasm
879
+ (module
880
+ (memory (import "m" "mem2") 2)
881
+ )
882
+ */
883
+ const auto wasm_imported_mem = from_hex (" 0061736d01000000020b01016d046d656d32020002" );
884
+
885
+ EXPECT_NO_THROW (instantiate (parse (wasm_imported_mem), {}, {}, {*reexported_memory}));
886
+ }
0 commit comments