@@ -92,37 +92,28 @@ destroy_module_env(struct ret_env module_env)
92
92
}
93
93
}
94
94
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[] )
96
96
{
97
97
struct ret_env tmp_module_env;
98
98
WASMFunctionInstanceCommon *func_test = nullptr ;
99
99
bool ret = false ;
100
- uint32 argv[1 ] = { 65535 };
101
100
const char *exception = nullptr ;
102
- SharedHeapInitArgs args;
103
- WASMSharedHeap *shared_heap = nullptr ;
104
101
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 );
108
103
109
- if (!shared_heap) {
110
- printf (" Failed to create shared heap\n " );
111
- goto test_failed;
112
- }
113
104
if (!wasm_runtime_attach_shared_heap (tmp_module_env.wasm_module_inst , shared_heap)) {
114
105
printf (" Failed to attach shared heap\n " );
115
106
goto test_failed;
116
107
}
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 );
119
110
if (!func_test) {
120
111
printf (" \n Failed to wasm_runtime_lookup_function!\n " );
121
112
goto test_failed;
122
113
}
123
114
124
115
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);
126
117
if (!ret) {
127
118
printf (" \n Failed to wasm_runtime_call_wasm!\n " );
128
119
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)
131
122
}
132
123
133
124
wasm_runtime_detach_shared_heap (tmp_module_env.wasm_module_inst );
134
-
135
- EXPECT_EQ (10 , argv[0 ]);
136
-
137
125
destroy_module_env (tmp_module_env);
138
126
return ;
139
127
test_failed:
140
128
destroy_module_env (tmp_module_env);
141
129
EXPECT_EQ (1 , 0 );
142
130
}
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