Skip to content

Commit 60b313d

Browse files
committed
feat: Implement tests for Global
1 parent fd124ea commit 60b313d

File tree

5 files changed

+147
-43
lines changed

5 files changed

+147
-43
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1+
# Esy
12
node_modules/
23
_esy/
34
_build/
5+
6+
# Ocaml
47
.merlin
8+
9+
# General
510
META
6-
.vscode/
711
.DS_Store
812
*.tar.gz
913
*.install
1014
*.zip
15+

.vscode/extensions.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"ocamllabs.ocaml-platform"
4+
]
5+
}

test/global_test.re

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
open Binaryen;
2+
open Frame_work;
3+
4+
suite("Global", () => {
5+
let create_test_global = (wasm_mod, name) => {
6+
Global.add_global(
7+
wasm_mod,
8+
name,
9+
Type.int32,
10+
false,
11+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
12+
);
13+
};
14+
test("Add global", () => {
15+
let wasm_mod = Module.create();
16+
let _ = create_test_global(wasm_mod, "test_global");
17+
Printf.printf("%s\n", Module.write_text(wasm_mod));
18+
Module.dispose(wasm_mod);
19+
});
20+
test("Get Name", () => {
21+
let wasm_mod = Module.create();
22+
let name = "test_global";
23+
let test_global = create_test_global(wasm_mod, name);
24+
assert(Global.get_name(test_global) == name);
25+
Module.dispose(wasm_mod);
26+
});
27+
test("Get Type", () => {
28+
let wasm_mod = Module.create();
29+
let test_global = create_test_global(wasm_mod, "test_non_null");
30+
assert(!Type.is_nullable(Global.get_type(test_global)));
31+
let test_global =
32+
Global.add_global(
33+
wasm_mod,
34+
"test_null",
35+
Type.nullref,
36+
false,
37+
Expression.Null.make(),
38+
);
39+
assert(Type.is_nullable(Global.get_type(test_global)));
40+
Module.dispose(wasm_mod);
41+
});
42+
test("Get Global", () => {
43+
let wasm_mod = Module.create();
44+
let name = "test_global";
45+
let _ = create_test_global(wasm_mod, name);
46+
let test_global = Global.get_global(wasm_mod, name);
47+
assert(Global.get_name(test_global) == name);
48+
Module.dispose(wasm_mod);
49+
});
50+
test("Is Mutable", () => {
51+
let wasm_mod = Module.create();
52+
let test_global = create_test_global(wasm_mod, "test_global");
53+
assert(!Global.is_mutable(test_global));
54+
let mutable_global =
55+
Global.add_global(
56+
wasm_mod,
57+
"mutable_global",
58+
Type.int32,
59+
true,
60+
Expression.Const.make(wasm_mod, Literal.int32(42l)),
61+
);
62+
assert(Global.is_mutable(mutable_global));
63+
Module.dispose(wasm_mod);
64+
});
65+
test("Number of Globals", () => {
66+
let wasm_mod = Module.create();
67+
assert(Global.get_num_globals(wasm_mod) == 0);
68+
let _ = create_test_global(wasm_mod, "global1");
69+
let _ = create_test_global(wasm_mod, "global2");
70+
assert(Global.get_num_globals(wasm_mod) == 2);
71+
Module.dispose(wasm_mod);
72+
});
73+
test("Remove Global", () => {
74+
let wasm_mod = Module.create();
75+
let _ = create_test_global(wasm_mod, "global_to_remove");
76+
assert(Global.get_num_globals(wasm_mod) == 1);
77+
Global.remove_global(wasm_mod, "global_to_remove");
78+
assert(Global.get_num_globals(wasm_mod) == 0);
79+
Module.dispose(wasm_mod);
80+
});
81+
test("Get Global by Index", () => {
82+
let wasm_mod = Module.create();
83+
let name1 = "global1";
84+
let name2 = "global2";
85+
let _ = create_test_global(wasm_mod, name1);
86+
let _ = create_test_global(wasm_mod, name2);
87+
let global1 = Global.get_global_by_index(wasm_mod, 0);
88+
let global2 = Global.get_global_by_index(wasm_mod, 1);
89+
assert(Global.get_name(global1) == name1);
90+
assert(Global.get_name(global2) == name2);
91+
Module.dispose(wasm_mod);
92+
});
93+
test("Get Init Expr", () => {
94+
let wasm_mod = Module.create();
95+
let test_global = create_test_global(wasm_mod, "test_global");
96+
let init_expr = Global.get_init_expr(test_global);
97+
switch (Expression.get_kind(init_expr)) {
98+
| Expression.Const => assert(true)
99+
| _ => assert(false)
100+
};
101+
Module.dispose(wasm_mod);
102+
});
103+
});

test/test.expected

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,21 @@ Running suite: Function
4646
)
4747
)
4848
. Running test: set_debug_location
49-
{"version":3,"sources":[],"names":[],"mappings":"uBASoB,C"}Running suite: Literal
49+
{"version":3,"sources":[],"names":[],"mappings":"uBASoB,C"}Running suite: Global
50+
. Running test: Add global
51+
(module
52+
(global $test_global i32 (i32.const 0))
53+
)
54+
55+
. Running test: Get Name
56+
. Running test: Get Type
57+
. Running test: Get Global
58+
. Running test: Is Mutable
59+
. Running test: Number of Globals
60+
. Running test: Remove Global
61+
. Running test: Get Global by Index
62+
. Running test: Get Init Expr
63+
Running suite: Literal
5064
. Running test: int32
5165
(module
5266
(type $0 (func))

test/test.re

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,22 @@
1-
open Module_test;
2-
open Literal_test;
3-
open Function_test;
4-
open Settings_test;
1+
open Module_test; // TODO: Document
2+
open Literal_test; // TODO: Document
3+
open Function_test; // TODO: Document
4+
open Settings_test; // TODO: Document
55
open Type_test;
6-
// TODO: Table
7-
// TODO: Struct_Type
8-
// TODO: Signature_Type
9-
// TODO: Passes
10-
// TODO: Packed_Type
11-
// TODO: OP
12-
// TODO: Memory
13-
// TODO: Import
14-
// TODO: Heap_Type
15-
// TODO: Global
16-
// TODO: Expression
17-
// TODO: Export
18-
// TODO: Element_Segment
19-
// TODO: Array_Type
20-
21-
// let wasm_mod = Module.create ()
22-
// let _ = Module.set_features wasm_mod [ Module.Feature.all ]
23-
// let import_wasm_mod = Module.create ()
24-
25-
// (* Testing pass_argument *)
26-
// let _ = assert (Settings.get_pass_argument "theKey" = None)
27-
// let _ = Settings.set_pass_argument "theKey" "theValue"
28-
// let _ = assert (Settings.get_pass_argument "theKey" = Some "theValue")
29-
// let _ = Settings.set_pass_argument "theKey" "theValue2"
30-
// let _ = assert (Settings.get_pass_argument "theKey" = Some "theValue2")
6+
// TODO: Heap_Type (quick)
7+
// TODO: Array_Type (quick)
8+
// TODO: Struct_Type (quick)
9+
// TODO: Signature_Type (quick)
10+
// TODO: Packed_Type (quick)
11+
open Global_test; // TODO: Document
12+
// TODO: Memory (Medium)
13+
// TODO: Table (Medium)
14+
// TODO: Element_Segment (Medium)
15+
// TODO: Export (Medium)
16+
// TODO: Import (Medium)
17+
// TODO: Passes (Hard)
18+
// TODO: Expression (Hard)
19+
// TODO: OP (Medium)
3120

3221
// let _ =
3322
// Import.add_memory_import import_wasm_mod "internal_name" "external_name"
@@ -142,18 +131,6 @@ open Type_test;
142131

143132
// let _ = Expression.print table_grow
144133

145-
// let _ =
146-
// Global.add_global wasm_mod "max_int64" Type.int64 false
147-
// (Expression.Const.make wasm_mod (Literal.int64 Int64.max_int))
148-
149-
// let _ =
150-
// Global.add_global wasm_mod "max_int64_mut" Type.int64 true
151-
// (Expression.Const.make wasm_mod (Literal.int64 Int64.max_int))
152-
153-
// let _ =
154-
// Global.add_global wasm_mod "test_float64_bits" Type.float64 false
155-
// (Expression.Const.make wasm_mod (Literal.float64_bits 0x3FF3AE147AE147AEL))
156-
157134
// let _ =
158135
// Table.add_active_element_segment wasm_mod "table" "elem" [ "adder" ]
159136
// (Expression.Const.make wasm_mod (Literal.int32 0l))

0 commit comments

Comments
 (0)