Skip to content

Commit 43c99e5

Browse files
committed
feat: Add Table, Element_Segment test
1 parent 2091fc9 commit 43c99e5

File tree

4 files changed

+189
-7
lines changed

4 files changed

+189
-7
lines changed

src/table.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
type t
22

33
val add_table : Module.t -> string -> int -> int -> Type.t -> t
4+
(** Module, name, initial size, maximum size, table type *)
45

56
val add_active_element_segment :
67
Module.t ->
@@ -9,6 +10,7 @@ val add_active_element_segment :
910
string list ->
1011
Expression.t ->
1112
Element_segment.t
13+
(** Module, table, name, function names, offset. *)
1214

1315
val remove_element_segment : Module.t -> string -> unit
1416
val get_num_element_segments : Module.t -> int

test/element_segment_test.re

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
open Binaryen;
2+
open Frame_work;
3+
4+
suite("Element Segment", () => {
5+
let create_test_func = (wasm_mod, name) => {
6+
let _ =
7+
Function.add_function(
8+
wasm_mod,
9+
name,
10+
Type.none,
11+
Type.none,
12+
[||],
13+
Expression.Nop.make(wasm_mod),
14+
);
15+
();
16+
};
17+
let create_segment = (wasm_mod, table_name, segment_name) => {
18+
let _ = Table.add_table(wasm_mod, table_name, 10, 20, Type.funcref);
19+
let _ = create_test_func(wasm_mod, "testFunc1");
20+
let _ = create_test_func(wasm_mod, "testFunc2");
21+
Table.add_active_element_segment(
22+
wasm_mod,
23+
table_name,
24+
segment_name,
25+
[ "testFunc1", "testFunc2" ],
26+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
27+
);
28+
};
29+
test("GetName", () => {
30+
let wasm_mod = Module.create();
31+
let table_name = "testTable";
32+
let segment_name = "testSegment";
33+
let segment = create_segment(wasm_mod, table_name, segment_name);
34+
assert (Element_segment.get_name(segment) == segment_name);
35+
Module.dispose(wasm_mod);
36+
});
37+
test("GetTable", () => {
38+
let wasm_mod = Module.create();
39+
let table_name = "testTable";
40+
let segment_name = "testSegment";
41+
let segment = create_segment(wasm_mod, table_name, segment_name);
42+
assert (Element_segment.get_table(segment) == table_name);
43+
Module.dispose(wasm_mod);
44+
});
45+
test("GetOffset", () => {
46+
let wasm_mod = Module.create();
47+
let table_name = "testTable";
48+
let segment_name = "testSegment";
49+
let segment = create_segment(wasm_mod, table_name, segment_name);
50+
let offset_expr = Element_segment.get_offset(segment);
51+
assert (Expression.get_kind(offset_expr) == Expression.Const);
52+
Module.dispose(wasm_mod);
53+
});
54+
test("GetLength", () => {
55+
let wasm_mod = Module.create();
56+
let table_name = "testTable";
57+
let segment_name = "testSegment";
58+
let segment = create_segment(wasm_mod, table_name, segment_name);
59+
assert (Element_segment.get_length(segment) == 2);
60+
Module.dispose(wasm_mod);
61+
});
62+
test("GetData", () => {
63+
let wasm_mod = Module.create();
64+
let table_name = "testTable";
65+
let segment_name = "testSegment";
66+
let segment = create_segment(wasm_mod, table_name, segment_name);
67+
assert (Element_segment.get_data(segment, 0) == "testFunc1");
68+
assert (Element_segment.get_data(segment, 1) == "testFunc2");
69+
Module.dispose(wasm_mod);
70+
});
71+
});

test/table_test.re

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
open Binaryen;
2+
open Frame_work;
3+
4+
suite("Table", () => {
5+
let create_test_func = (wasm_mod, name) => {
6+
let _ =
7+
Function.add_function(
8+
wasm_mod,
9+
name,
10+
Type.none,
11+
Type.none,
12+
[||],
13+
Expression.Nop.make(wasm_mod),
14+
);
15+
();
16+
};
17+
test("Add Table", () => {
18+
let wasm_mod = Module.create();
19+
let _ = Table.add_table(wasm_mod, "addTableTest", 10, 20, Type.funcref);
20+
Printf.printf("%s", Module.write_text(wasm_mod));
21+
Module.dispose(wasm_mod);
22+
});
23+
test("Add Active Element Segment", () => {
24+
let wasm_mod = Module.create();
25+
let name = "addActiveElementSegment";
26+
let _ = Table.add_table(wasm_mod, name, 6, 9, Type.funcref);
27+
create_test_func(wasm_mod, "func1");
28+
create_test_func(wasm_mod, "func2");
29+
create_test_func(wasm_mod, "func3");
30+
let _ = Table.add_active_element_segment(
31+
wasm_mod,
32+
name,
33+
"ActiveSegmentTest",
34+
[ "func1", "func2", "func3" ],
35+
Expression.Const.make(wasm_mod, Literal.int32(3l)),
36+
);
37+
Printf.printf("%s", Module.write_text(wasm_mod));
38+
Module.dispose(wasm_mod);
39+
});
40+
test("Get Num Element Segments", () => {
41+
let wasm_mod = Module.create();
42+
let name = "GetNumElementSegments";
43+
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
44+
create_test_func(wasm_mod, "func1");
45+
assert (Table.get_num_element_segments(wasm_mod) == 0);
46+
let _ = Table.add_active_element_segment(
47+
wasm_mod,
48+
name,
49+
"GetNumSegs1",
50+
[ "func1" ],
51+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
52+
);
53+
assert (Table.get_num_element_segments(wasm_mod) == 1);
54+
Module.dispose(wasm_mod);
55+
});
56+
test("Remove Element Segment", () => {
57+
let wasm_mod = Module.create();
58+
let name = "RemoveElementSegment";
59+
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
60+
create_test_func(wasm_mod, "func1");
61+
let _ = Table.add_active_element_segment(
62+
wasm_mod,
63+
name,
64+
"RemoveSeg1",
65+
[ "func1" ],
66+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
67+
);
68+
assert (Table.get_num_element_segments(wasm_mod) == 1);
69+
Table.remove_element_segment(wasm_mod, "RemoveSeg1");
70+
assert (Table.get_num_element_segments(wasm_mod) == 0);
71+
Module.dispose(wasm_mod);
72+
});
73+
test("Get Element Segment", () => {
74+
let wasm_mod = Module.create();
75+
let name = "GetElementSegmentByName";
76+
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
77+
create_test_func(wasm_mod, "func1");
78+
let segmentName = "GetSegByName";
79+
let _ = Table.add_active_element_segment(
80+
wasm_mod,
81+
name,
82+
segmentName,
83+
[ "func1" ],
84+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
85+
);
86+
let segment =
87+
Table.get_element_segment(wasm_mod, segmentName);
88+
assert (Element_segment.get_name(segment) == segmentName);
89+
Module.dispose(wasm_mod);
90+
});
91+
test("Get Element Segment By Index", () => {
92+
let wasm_mod = Module.create();
93+
let name = "GetElementSegmentByIndex";
94+
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
95+
create_test_func(wasm_mod, "func1");
96+
let segmentName = "GetSegByIndex";
97+
let _ = Table.add_active_element_segment(
98+
wasm_mod,
99+
name,
100+
segmentName,
101+
[ "func1" ],
102+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
103+
);
104+
let segment =
105+
Table.get_element_segment_by_index(wasm_mod, 0);
106+
assert (Element_segment.get_name(segment) == segmentName);
107+
Module.dispose(wasm_mod);
108+
});
109+
});

test/test.re

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ open Literal_test; // TODO: Document
33
open Function_test; // TODO: Document
44
open Settings_test; // TODO: Document
55
open Type_test;
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)
6+
// TODO: Heap_Type (quick) (Blocked on gc)
7+
// TODO: Array_Type (quick) (Blocked on gc)
8+
// TODO: Struct_Type (quick) (Blocked on gc)
9+
// TODO: Signature_Type (quick) (Blocked on gc)
10+
// TODO: Packed_Type (quick) (Blocked on gc)
1111
open Global_test; // TODO: Document
1212
open Memory_test; // TODO: Document
13-
// TODO: Table (Medium)
14-
// TODO: Element_Segment (Medium)
13+
open Table_test; // TODO: Document
14+
open Element_segment_test; // TODO: Document
1515
// TODO: Export (Medium)
1616
// TODO: Import (Medium)
1717
// TODO: Passes (Hard)

0 commit comments

Comments
 (0)