23 lines
1.0 KiB
OCaml
23 lines
1.0 KiB
OCaml
let each xs callback = List.map callback xs
|
|
|
|
let () =
|
|
assert ((let%continue x = each [1; 2; 3] in x * 5) = [5; 10; 15]);
|
|
assert ((let%cps x = each [1; 2] in x + 1) = [2; 3]);
|
|
assert ((let%continue (x, y) = each [2, 3] in x + y) = [5]);
|
|
assert ((let%continue x = each [1; 2] in
|
|
let%continue y = each [3; 4] in x + y) = [[4; 5]; [5; 6]]);
|
|
let active = ref false in
|
|
let scope callback = active := true; callback (); active := false in
|
|
(let%continue () = scope in assert !active);
|
|
assert (not !active);
|
|
let calls = ref 0 in
|
|
let producer () = incr calls; each [1; 2] in
|
|
assert ((let%continue x = producer () in x) = [1; 2]);
|
|
assert (!calls = 1);
|
|
assert ((let%continue _ = each [] in failwith "unreachable") = []);
|
|
assert ((let%continue x = (let%continue f = each [each [7]] in f) |> List.hd
|
|
in x + 1) = [8]);
|
|
(try (let%continue () = scope in failwith "callback"); assert false
|
|
with Failure message -> assert (message = "callback"));
|
|
print_endline "continuum_ppx: behavior checks passed"
|