@@ -92,37 +92,32 @@ 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+ else
109+ {
110+ printf (" Attach shared heap success\n " );
111+ }
112+ func_test = wasm_runtime_lookup_function (tmp_module_env.wasm_module_inst ,
113+ func_name);
119114 if (!func_test) {
120115 printf (" \n Failed to wasm_runtime_lookup_function!\n " );
121116 goto test_failed;
122117 }
123118
124119 ret =
125- wasm_runtime_call_wasm (tmp_module_env.exec_env , func_test, 1 , argv);
120+ wasm_runtime_call_wasm (tmp_module_env.exec_env , func_test, argc , argv);
126121 if (!ret) {
127122 printf (" \n Failed to wasm_runtime_call_wasm!\n " );
128123 const char *s = wasm_runtime_get_exception (tmp_module_env.wasm_module_inst );
@@ -131,12 +126,119 @@ TEST_F(shared_heap_test, test_shared_heap)
131126 }
132127
133128 wasm_runtime_detach_shared_heap (tmp_module_env.wasm_module_inst );
134-
135- EXPECT_EQ (10 , argv[0 ]);
136-
137129 destroy_module_env (tmp_module_env);
138130 return ;
139131test_failed:
140132 destroy_module_env (tmp_module_env);
141133 EXPECT_EQ (1 , 0 );
142134}
135+
136+ TEST_F (shared_heap_test, test_shared_heap_basic)
137+ {
138+ SharedHeapInitArgs args;
139+ WASMSharedHeap *shared_heap = nullptr ;
140+ uint32 argv[1 ] = { 0 };
141+
142+ args.size = 1024 ;
143+ shared_heap = wasm_runtime_create_shared_heap (&args);
144+
145+ if (!shared_heap) {
146+ printf (" Failed to create shared heap\n " );
147+ EXPECT_EQ (1 , 0 );
148+ }
149+
150+ // test wasm
151+ test_shared_heap (shared_heap, " test.wasm" , " test" , 1 , argv);
152+ EXPECT_EQ (10 , argv[0 ]);
153+
154+ // test aot
155+ test_shared_heap (shared_heap, " test.aot" , " test" , 1 , argv);
156+ EXPECT_EQ (10 , argv[0 ]);
157+
158+ }
159+
160+ TEST_F (shared_heap_test, test_shared_heap_malloc_fail)
161+ {
162+ SharedHeapInitArgs args;
163+ WASMSharedHeap *shared_heap = nullptr ;
164+ uint32 argv[1 ] = { 0 };
165+
166+ args.size = 1024 ;
167+ shared_heap = wasm_runtime_create_shared_heap (&args);
168+
169+ if (!shared_heap) {
170+ printf (" Failed to create shared heap\n " );
171+ EXPECT_EQ (1 , 0 );
172+ }
173+
174+ // test wasm
175+ test_shared_heap (shared_heap, " test.wasm" , " test_malloc_fail" , 1 , argv);
176+ EXPECT_EQ (1 , argv[0 ]);
177+
178+ // test aot
179+ test_shared_heap (shared_heap, " test.aot" , " test_malloc_fail" , 1 , argv);
180+ EXPECT_EQ (1 , argv[0 ]);
181+ }
182+
183+ #ifndef native_function
184+ #define native_function (func_name, signature ) \
185+ { #func_name, (void *)glue_##func_name, signature, NULL }
186+
187+ #endif
188+ #ifndef nitems
189+ #define nitems (_a ) (sizeof (_a) / sizeof (0 [(_a)]))
190+ #endif /* nitems */
191+ uintptr_t glue_test_addr_conv (wasm_exec_env_t env, uintptr_t addr)
192+ {
193+ wasm_module_inst_t module_inst = get_module_inst (env);
194+ uintptr_t ret;
195+ void *native_addr = (void *)addr;
196+ uintptr_t app_addr = addr_native_to_app (native_addr);
197+
198+ native_addr = addr_app_to_native (app_addr);
199+ if (native_addr != (void *)addr)
200+ {
201+ EXPECT_EQ (1 , 0 );
202+ }
203+ return app_addr;
204+ }
205+
206+ static NativeSymbol g_test_native_symbols[] =
207+ {
208+ native_function (test_addr_conv," (*)i" ),
209+ };
210+
211+ TEST_F (shared_heap_test, test_addr_conv)
212+ {
213+ SharedHeapInitArgs args;
214+ WASMSharedHeap *shared_heap = nullptr ;
215+ uint32 argv[1 ] = { 0 };
216+ struct ret_env tmp_module_env;
217+ WASMFunctionInstanceCommon *func_test = nullptr ;
218+ bool ret = false ;
219+ const char *exception = nullptr ;
220+ wasm_module_inst_t module_inst = tmp_module_env.wasm_module_inst ;
221+
222+ ret = wasm_native_register_natives (" env" , g_test_native_symbols,
223+ nitems (g_test_native_symbols));
224+ if (!ret)
225+ {
226+ EXPECT_EQ (1 , 0 );
227+ return ;
228+ }
229+
230+ args.size = 1024 ;
231+ shared_heap = wasm_runtime_create_shared_heap (&args);
232+ if (!shared_heap) {
233+ printf (" Failed to create shared heap\n " );
234+ EXPECT_EQ (1 , 0 );
235+ }
236+
237+ // test wasm
238+ test_shared_heap (shared_heap, " test_addr_conv.wasm" , " test" , 1 , argv);
239+ EXPECT_EQ (1 , argv[0 ]);
240+
241+ // test aot
242+ test_shared_heap (shared_heap, " test_addr_conv.aot" , " test" , 1 , argv);
243+ EXPECT_EQ (1 , argv[0 ]);
244+ }
0 commit comments