1 module rx.algorithm;
2 
3 public import rx.algorithm.all;
4 public import rx.algorithm.any;
5 public import rx.algorithm.buffer;
6 public import rx.algorithm.debounce;
7 public import rx.algorithm.filter;
8 public import rx.algorithm.fold;
9 public import rx.algorithm.map;
10 public import rx.algorithm.merge;
11 public import rx.algorithm.scan;
12 public import rx.algorithm.tee;
13 public import rx.algorithm.uniq;
14 
15 //####################
16 // Overview
17 //####################
18 ///
19 unittest
20 {
21     import rx;
22     import std.algorithm : equal;
23     import std.array : appender;
24     import std.conv : to;
25     import std.range : iota, put;
26 
27     auto subject = new SubjectObject!int;
28     auto pub = subject.filter!(n => n % 2 == 0).map!(o => to!string(o));
29 
30     auto buf = appender!(string[]);
31     auto disposable = pub.doSubscribe(buf);
32     scope (exit)
33         disposable.dispose();
34 
35     put(subject, iota(10));
36 
37     auto result = buf.data;
38     assert(equal(result, ["0", "2", "4", "6", "8"]));
39 }
40 
41 ///
42 unittest
43 {
44     import rx;
45 
46     auto sub = new SubjectObject!int;
47 
48     auto hasEven = sub.any!"a % 2 == 0"();
49     auto result = false;
50     auto disposable = hasEven.doSubscribe((bool b) { result = b; });
51     scope (exit)
52         disposable.dispose();
53 
54     sub.put(1);
55     sub.put(3);
56     sub.put(2);
57     assert(result);
58 }