1open Wonka_types;
2
3let testWithListenable = operator => {
4 let sink = ref((. _: signalT(int)) => ());
5 let signals = [||];
6 let source = x => {
7 sink := x;
8 x(. Start((. signal) => ignore(Js.Array.push(signal, signals))));
9 };
10
11 let talkback = ref((. _: talkbackT) => ());
12 let res = [||];
13 operator(source, (. signal) =>
14 switch (signal) {
15 | Start(x) => talkback := x
16 | _ => ignore(Js.Array.push(signal, res))
17 }
18 );
19
20 Js.Promise.make((~resolve, ~reject as _) => {
21 sink^(. Push(1));
22 ignore(
23 Js.Global.setTimeout(
24 () => {
25 sink^(. Push(2));
26 ignore(
27 Js.Global.setTimeout(
28 () => {
29 sink^(. End);
30 ignore(
31 Js.Global.setTimeout(() => resolve(. (signals, res)), 0),
32 );
33 },
34 0,
35 ),
36 );
37 },
38 0,
39 ),
40 );
41 });
42};
43
44let testTalkbackEnd = operator => {
45 let sink = ref((. _: signalT(int)) => ());
46 let signals: array(talkbackT) = [||];
47 let source = x => {
48 x(. Start((. signal) => ignore(Js.Array.push(signal, signals))));
49 sink := x;
50 };
51
52 let talkback = ref((. _: talkbackT) => ());
53 let res = [||];
54 operator(source, (. signal) =>
55 switch (signal) {
56 | Start(x) => talkback := x
57 | _ => ignore(Js.Array.push(signal, res))
58 }
59 );
60
61 Js.Promise.make((~resolve, ~reject as _) => {
62 sink^(. Push(1));
63 ignore(
64 Js.Global.setTimeout(
65 () => {
66 talkback^(. Close);
67 ignore(Js.Global.setTimeout(() => resolve(. (signals, res)), 0));
68 },
69 0,
70 ),
71 );
72 });
73};