Skip to content

Commit 10ce11e

Browse files
committed
add testcases for shared_heap
Signed-off-by: wenlingyun1 <[email protected]>
1 parent 19160f0 commit 10ce11e

File tree

5 files changed

+199
-20
lines changed

5 files changed

+199
-20
lines changed

tests/unit/shared-heap/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ project(test-shared-heap)
88
add_definitions(-DRUN_ON_LINUX)
99

1010
set(WAMR_BUILD_APP_FRAMEWORK 0)
11-
set(WAMR_BUILD_AOT 0)
11+
set(WAMR_BUILD_AOT 1)
1212
set(WAMR_BUILD_INTERP 1)
1313
set(WAMR_BUILD_FAST_INTERP 1)
1414
set(WAMR_BUILD_JIT 0)

tests/unit/shared-heap/shared_heap_test.cc

Lines changed: 119 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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("\nFailed 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("\nFailed 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;
139131
test_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+
}

tests/unit/shared-heap/wasm-apps/CMakeLists.txt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ cmake_minimum_required(VERSION 3.14)
55
project(wasm-apps)
66

77
set(WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../..)
8+
set(WAMRC_ROOT_DIR ${WAMR_ROOT_DIR}/wamr-compiler/build)
89

910
set(CMAKE_SYSTEM_PROCESSOR wasm32)
1011
set(CMAKE_SYSROOT ${WAMR_ROOT_DIR}/wamr-sdk/app/libc-builtin-sysroot)
@@ -36,4 +37,36 @@ add_custom_command(TARGET test.wasm POST_BUILD
3637
${CMAKE_CURRENT_BINARY_DIR}/test.wasm
3738
${CMAKE_CURRENT_BINARY_DIR}/../
3839
COMMENT "Copy test.wasm to the same directory of google test"
39-
)
40+
)
41+
42+
add_custom_command(TARGET test.wasm POST_BUILD
43+
COMMAND ${WAMRC_ROOT_DIR}/wamrc --opt-level=0 --enable-shared-heap --bounds-checks=1
44+
-o
45+
test.aot
46+
test.wasm
47+
COMMAND ${CMAKE_COMMAND} -E copy
48+
${CMAKE_CURRENT_BINARY_DIR}/test.aot
49+
${CMAKE_CURRENT_BINARY_DIR}/../
50+
COMMENT "Copy test.aot to the same directory of google test"
51+
)
52+
53+
add_executable(test_addr_conv.wasm test_addr_conv.c)
54+
target_link_libraries(test.wasm)
55+
56+
add_custom_command(TARGET test_addr_conv.wasm POST_BUILD
57+
COMMAND ${CMAKE_COMMAND} -E copy
58+
${CMAKE_CURRENT_BINARY_DIR}/test_addr_conv.wasm
59+
${CMAKE_CURRENT_BINARY_DIR}/../
60+
COMMENT "Copy test_addr_conv.wasm to the same directory of google test"
61+
)
62+
63+
add_custom_command(TARGET test_addr_conv.wasm POST_BUILD
64+
COMMAND ${WAMRC_ROOT_DIR}/wamrc --opt-level=0 --enable-shared-heap --bounds-checks=1
65+
-o
66+
test_addr_conv.aot
67+
test_addr_conv.wasm
68+
COMMAND ${CMAKE_COMMAND} -E copy
69+
${CMAKE_CURRENT_BINARY_DIR}/test_addr_conv.aot
70+
${CMAKE_CURRENT_BINARY_DIR}/../
71+
COMMENT "Copy test_addr_conv.aot to the same directory of google test"
72+
)

tests/unit/shared-heap/wasm-apps/test.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,22 @@ shared_heap_free(void *offset);
1313
int
1414
test()
1515
{
16-
int *ptr = (int *)shared_heap_malloc(10);
16+
int *ptr = (int *)shared_heap_malloc(4);
1717

1818
*ptr = 10;
1919
int a = *ptr;
2020
shared_heap_free(ptr);
2121
return a;
2222
}
23+
24+
int
25+
test_malloc_fail()
26+
{
27+
int *ptr = (int *)shared_heap_malloc(8192);
28+
29+
if (ptr == NULL) {
30+
return 1;
31+
}
32+
shared_heap_free(ptr);
33+
return 0;
34+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright (C) 2024 Xiaomi Corporation. All rights reserved.
3+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
*/
5+
6+
#include <stdio.h>
7+
8+
extern void *
9+
shared_heap_malloc(int size);
10+
extern void
11+
shared_heap_free(void *offset);
12+
extern void *
13+
test_addr_conv(void *ptr);
14+
15+
int
16+
test()
17+
{
18+
int *ptr = NULL;
19+
int *ptr2 = NULL;
20+
21+
ptr = (int *)shared_heap_malloc(4);
22+
23+
if (ptr == NULL) {
24+
return 0;
25+
}
26+
ptr2 = test_addr_conv(ptr);
27+
if (ptr2 != ptr) {
28+
return 0;
29+
}
30+
shared_heap_free(ptr);
31+
return 1;
32+
}

0 commit comments

Comments
 (0)