forked from rescript-lang/rescript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcps_test.ml
42 lines (34 loc) · 854 Bytes
/
cps_test.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
let test () =
let v = ref 0 in
let rec f n acc =
if n = 0 then acc ()
else f (n - 1) (fun _ -> v := !v + n; acc ()) in
f 10 (fun _ -> ());
!v
let test_closure () =
let n = 6 in
let v = ref 0 in
let arr = Array.make n (fun x -> x ) in
for i = 0 to n - 1 do
arr.(i) <- fun _ -> i
done;
Array.iter (fun i -> v:= !v + i 0) arr;
!v
let test_closure2 () =
let n = 6 in
let v = ref 0 in
let arr = Array.make n (fun x -> x ) in
for i = 0 to n - 1 do
let j = i + i in
arr.(i) <- fun _ -> j
done;
Array.iter (fun i -> v:= !v + i 0) arr;
!v
;; Mt.from_pair_suites __FILE__ Mt.[
"cps_test_sum", (fun _ ->
Eq (55, (test())));
"cps_test_closure", (fun _ ->
Eq (15, (test_closure ())));
"cps_test_closure2", (fun _ ->
Eq (30, (test_closure2 ())));
]