@@ -92,37 +92,28 @@ destroy_module_env(struct ret_env module_env)
9292 }
9393}
9494
95- TEST_F (shared_heap_test, test_shared_heap )
95+ static void test_shared_heap (WASMSharedHeap *shared_heap, const char *file, const char *func_name, uint32 argc, uint32 argv[] )
9696{
9797 struct ret_env tmp_module_env;
9898 WASMFunctionInstanceCommon *func_test = nullptr ;
9999 bool ret = false ;
100- uint32 argv[1 ] = { 65535 };
101100 const char *exception = nullptr ;
102- SharedHeapInitArgs args;
103- WASMSharedHeap *shared_heap = nullptr ;
104101
105- args.size = 1024 ;
106- shared_heap = wasm_runtime_create_shared_heap (&args);
107- tmp_module_env = load_wasm ((char *)" test.wasm" , 0 );
102+ tmp_module_env = load_wasm ((char *)file, 0 );
108103
109- if (!shared_heap) {
110- printf (" Failed to create shared heap\n " );
111- goto test_failed;
112- }
113104 if (!wasm_runtime_attach_shared_heap (tmp_module_env.wasm_module_inst , shared_heap)) {
114105 printf (" Failed to attach shared heap\n " );
115106 goto test_failed;
116107 }
117- func_test = wasm_runtime_lookup_function (
118- tmp_module_env. wasm_module_inst , " test " );
108+ func_test = wasm_runtime_lookup_function (tmp_module_env. wasm_module_inst ,
109+ func_name );
119110 if (!func_test) {
120111 printf (" \n Failed to wasm_runtime_lookup_function!\n " );
121112 goto test_failed;
122113 }
123114
124115 ret =
125- wasm_runtime_call_wasm (tmp_module_env.exec_env , func_test, 1 , argv);
116+ wasm_runtime_call_wasm (tmp_module_env.exec_env , func_test, argc , argv);
126117 if (!ret) {
127118 printf (" \n Failed to wasm_runtime_call_wasm!\n " );
128119 const char *s = wasm_runtime_get_exception (tmp_module_env.wasm_module_inst );
@@ -131,12 +122,119 @@ TEST_F(shared_heap_test, test_shared_heap)
131122 }
132123
133124 wasm_runtime_detach_shared_heap (tmp_module_env.wasm_module_inst );
134-
135- EXPECT_EQ (10 , argv[0 ]);
136-
137125 destroy_module_env (tmp_module_env);
138126 return ;
139127test_failed:
140128 destroy_module_env (tmp_module_env);
141129 EXPECT_EQ (1 , 0 );
142130}
131+
132+ TEST_F (shared_heap_test, test_shared_heap_basic)
133+ {
134+ SharedHeapInitArgs args;
135+ WASMSharedHeap *shared_heap = nullptr ;
136+ uint32 argv[1 ] = { 0 };
137+
138+ args.size = 1024 ;
139+ shared_heap = wasm_runtime_create_shared_heap (&args);
140+
141+ if (!shared_heap) {
142+ printf (" Failed to create shared heap\n " );
143+ EXPECT_EQ (1 , 0 );
144+ }
145+
146+ // test wasm
147+ test_shared_heap (shared_heap, " test.wasm" , " test" , 1 , argv);
148+ EXPECT_EQ (10 , argv[0 ]);
149+
150+ // test aot
151+ test_shared_heap (shared_heap, " test.aot" , " test" , 1 , argv);
152+ EXPECT_EQ (10 , argv[0 ]);
153+
154+ }
155+
156+ TEST_F (shared_heap_test, test_shared_heap_malloc_fail)
157+ {
158+ SharedHeapInitArgs args;
159+ WASMSharedHeap *shared_heap = nullptr ;
160+ uint32 argv[1 ] = { 0 };
161+
162+ args.size = 1024 ;
163+ shared_heap = wasm_runtime_create_shared_heap (&args);
164+
165+ if (!shared_heap) {
166+ printf (" Failed to create shared heap\n " );
167+ EXPECT_EQ (1 , 0 );
168+ }
169+
170+ // test wasm
171+ test_shared_heap (shared_heap, " test.wasm" , " test_malloc_fail" , 1 , argv);
172+ EXPECT_EQ (1 , argv[0 ]);
173+
174+ // test aot
175+ test_shared_heap (shared_heap, " test.aot" , " test_malloc_fail" , 1 , argv);
176+ EXPECT_EQ (1 , argv[0 ]);
177+ }
178+
179+ #ifndef native_function
180+ #define native_function (func_name, signature ) \
181+ { #func_name, (void *)glue_##func_name, signature, NULL }
182+
183+ #endif
184+ #ifndef nitems
185+ #define nitems (_a ) (sizeof (_a) / sizeof (0 [(_a)]))
186+ #endif /* nitems */
187+ uintptr_t glue_test_addr_conv (wasm_exec_env_t env, uintptr_t addr)
188+ {
189+ wasm_module_inst_t module_inst = get_module_inst (env);
190+ uintptr_t ret;
191+ void *native_addr = (void *)addr;
192+ uintptr_t app_addr = addr_native_to_app (native_addr);
193+
194+ native_addr = addr_app_to_native (app_addr);
195+ if (native_addr != (void *)addr)
196+ {
197+ EXPECT_EQ (1 , 0 );
198+ }
199+ return app_addr;
200+ }
201+
202+ static NativeSymbol g_test_native_symbols[] =
203+ {
204+ native_function (test_addr_conv," (*)i" ),
205+ };
206+
207+ TEST_F (shared_heap_test, test_addr_conv)
208+ {
209+ SharedHeapInitArgs args;
210+ WASMSharedHeap *shared_heap = nullptr ;
211+ uint32 argv[1 ] = { 0 };
212+ struct ret_env tmp_module_env;
213+ WASMFunctionInstanceCommon *func_test = nullptr ;
214+ bool ret = false ;
215+ const char *exception = nullptr ;
216+ wasm_module_inst_t module_inst = tmp_module_env.wasm_module_inst ;
217+
218+ ret = wasm_native_register_natives (" env" , g_test_native_symbols,
219+ nitems (g_test_native_symbols));
220+ if (!ret)
221+ {
222+ EXPECT_EQ (1 , 0 );
223+ return ;
224+ }
225+
226+ args.size = 1024 ;
227+ shared_heap = wasm_runtime_create_shared_heap (&args);
228+ if (!shared_heap) {
229+ printf (" Failed to create shared heap\n " );
230+ EXPECT_EQ (1 , 0 );
231+ }
232+
233+ // test wasm
234+ test_shared_heap (shared_heap, " test_addr_conv.wasm" , " test" , 1 , argv);
235+ EXPECT_EQ (1 , argv[0 ]);
236+
237+ // test aot
238+ test_shared_heap (shared_heap, " test_addr_conv.aot" , " test" , 1 , argv);
239+ EXPECT_EQ (1 , argv[0 ]);
240+ }
0 commit comments