Skip to content

Commit b4dc856

Browse files
committed
more tests
1 parent b1a9aff commit b4dc856

File tree

2 files changed

+95
-3
lines changed

2 files changed

+95
-3
lines changed

compiler/tests-jsoo/test_weak.ml

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,96 @@ let%expect_test _ =
5959
[%expect {|
6060
found
6161
found
62-
|}]
62+
|}]
63+
64+
let copy_eq a b =
65+
if a == b
66+
then false
67+
else
68+
let a = Obj.repr a in
69+
let b = Obj.repr b in
70+
if Obj.size a <> Obj.size b || Obj.tag a <> Obj.tag b
71+
then false
72+
else
73+
let exception False in
74+
try
75+
for i = 0 to Obj.size a - 1 do
76+
if Obj.field a i != Obj.field b i then raise False
77+
done;
78+
true
79+
with False -> false
80+
81+
let bool x = Printf.printf "%b" x
82+
83+
let%expect_test _ =
84+
let module E = Obj.Ephemeron in
85+
let ki = Obj.repr None in
86+
let k1 = Obj.repr (Some 2) in
87+
let k2 = Obj.repr (Some 43) in
88+
let e = E.create 10 in
89+
let e2 = E.create 3 in
90+
Printf.printf "%d\n" (E.length e);
91+
[%expect {| 10 |}];
92+
E.set_key e 1 ki;
93+
E.set_key e 2 k1;
94+
E.set_key e 3 k2;
95+
bool (Option.get (E.get_key e 2) == k1);
96+
[%expect {| true |}];
97+
bool (Option.get (E.get_key_copy e 2) == k1);
98+
[%expect {| false |}];
99+
bool (copy_eq (Option.get (E.get_key_copy e 2)) k1);
100+
[%expect {| true |}];
101+
bool (Option.get (E.get_key e 1) == ki);
102+
[%expect {| true |}];
103+
bool (Option.get (E.get_key_copy e 1) == ki);
104+
[%expect {| true |}];
105+
bool (copy_eq (Option.get (E.get_key_copy e 1)) ki);
106+
[%expect {| false |}];
107+
bool (E.check_key e 0);
108+
[%expect {| false |}];
109+
bool (E.check_key e 2);
110+
[%expect {| true |}];
111+
bool (E.check_key e 3);
112+
[%expect {| true |}];
113+
E.unset_key e 3;
114+
bool (E.check_key e 3);
115+
[%expect {| false |}];
116+
117+
bool (E.check_data e);
118+
[%expect {| false |}];
119+
E.set_data e k1;
120+
bool (E.check_data e);
121+
[%expect {| true |}];
122+
123+
bool (Option.get (E.get_data e) == k1);
124+
[%expect {| true |}];
125+
bool (Option.get (E.get_data_copy e) == k1);
126+
[%expect {| false |}];
127+
bool (copy_eq (Option.get (E.get_data_copy e)) k1);
128+
[%expect {| true |}];
129+
130+
E.set_data e ki;
131+
bool (Option.get (E.get_data e) == ki);
132+
[%expect {| true |}];
133+
bool (Option.get (E.get_data_copy e) == ki);
134+
[%expect {| true |}];
135+
bool (copy_eq (Option.get (E.get_data_copy e)) ki);
136+
[%expect {| false |}];
137+
138+
bool (E.check_data e2);
139+
[%expect {| false |}];
140+
E.blit_data e e2;
141+
bool (E.check_data e2);
142+
[%expect {| true |}];
143+
144+
E.blit_key e 1 e2 0 3;
145+
bool (E.check_key e2 0);
146+
[%expect {| true |}];
147+
bool (E.check_key e2 1);
148+
[%expect {| true |}];
149+
bool (E.check_key e2 2);
150+
[%expect {| false |}];
151+
152+
E.unset_data e;
153+
bool (E.check_data e);
154+
[%expect {| false |}]

runtime/weak.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ function caml_ephe_get_data_copy(x) {
190190
if (r === 0) return 0;
191191
var z = r[1];
192192
if (Array.isArray(z)) return [0, caml_obj_dup(z)];
193-
return z;
193+
return r;
194194
}
195195

196196
//Provides: caml_ephe_set_data
@@ -206,7 +206,7 @@ function caml_ephe_set_data(x, data) {
206206
continue;
207207
}
208208
if (globalThis.WeakMap) {
209-
data = new globalThis.WeakMap().set(k,data);
209+
data = new globalThis.WeakMap().set(k, data);
210210
}
211211
}
212212
}

0 commit comments

Comments
 (0)