@@ -217,6 +217,62 @@ TEST_F(shared_heap_test, test_preallocated_shared_heap_malloc_fail)
217217 EXPECT_EQ (0 , argv[0 ]);
218218}
219219
220+ TEST_F (shared_heap_test, test_preallocated_shared_runtime_api)
221+ {
222+ struct ret_env tmp_module_env;
223+ SharedHeapInitArgs args = { 0 };
224+ WASMSharedHeap *shared_heap = nullptr ;
225+ uint32 argv[1 ] = { 0 };
226+ void *native_ptr;
227+ uint64 offset, size;
228+ bool ret;
229+
230+ args.size = 0x4000 ;
231+ shared_heap = wasm_runtime_create_shared_heap (&args);
232+
233+ if (!shared_heap) {
234+ FAIL () << " Failed to create shared heap" ;
235+ }
236+
237+ if (!load_wasm (" test.wasm" , 0 , tmp_module_env)) {
238+ FAIL () << " Failed to load wasm file\n " ;
239+ }
240+
241+ if (!wasm_runtime_attach_shared_heap (tmp_module_env.wasm_module_inst ,
242+ shared_heap)) {
243+ ADD_FAILURE () << " Failed to attach shared heap\n " ;
244+ goto fail1;
245+ }
246+
247+ offset = wasm_runtime_shared_heap_malloc (tmp_module_env.wasm_module_inst ,
248+ 32 , &native_ptr);
249+ if (!offset) {
250+ ADD_FAILURE () << " Failed to attach shared heap\n " ;
251+ goto fail2;
252+ }
253+
254+ size = (uint64_t )UINT32_MAX + 0x2000 ;
255+ printf (" offset %lx size: %lx\n " , offset, size);
256+ ASSERT_EQ (false , wasm_runtime_validate_app_addr (
257+ tmp_module_env.wasm_module_inst , offset, size));
258+
259+ ASSERT_EQ (NULL , wasm_runtime_addr_app_to_native (
260+ tmp_module_env.wasm_module_inst , offset + size));
261+
262+ size = (uint64_t )10 ;
263+ ASSERT_EQ (true , wasm_runtime_validate_app_addr (
264+ tmp_module_env.wasm_module_inst , offset, size));
265+
266+ ASSERT_EQ (native_ptr + size,
267+ wasm_runtime_addr_app_to_native (tmp_module_env.wasm_module_inst ,
268+ offset + size));
269+
270+ fail2:
271+ wasm_runtime_detach_shared_heap (tmp_module_env.wasm_module_inst );
272+ fail1:
273+ destroy_module_env (tmp_module_env);
274+ }
275+
220276static void
221277create_test_shared_heap (uint8 *preallocated_buf, size_t size,
222278 WASMSharedHeap **shared_heap_res)
0 commit comments