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