1 module libd.algorithm.comparison;
2 
3 import libd.algorithm;
4 
5 bool any(alias Func, Range)(Range r)
6 {
7     while(!r.empty)
8     {
9         if(Func(r.front))
10             return true;
11         r.popFront();
12     }
13     return false;
14 }
15 ///
16 @("any")
17 unittest
18 {
19     import libd.datastructures : Array;
20     Array!int array;
21     array.put(0, 1, 2, 3, 4, 5, 6);
22     assert(array.range.any!(n => n == 6));
23     assert(!array.range.any!(n => n > 10));
24 }
25 
26 bool all(alias Func, Range)(Range r)
27 {
28     while(!r.empty)
29     {
30         if(!Func(r.front))
31             return false;
32         r.popFront();
33     }
34     return true;
35 }
36 ///
37 @("all")
38 unittest
39 {
40     import libd.datastructures : LinkedList;
41     LinkedList!int list;
42     list.put(0, 1, 2, 3, 4, 5, 6);
43     assert(list.range.all!(n => n < 10));
44     assert(!list.range.all!(n => (n % 2) == 0));
45 }
46 
47 bool equals(alias Comparator, Range1, Range2)(Range1 r1, Range2 r2)
48 {
49     while(true)
50     {
51         if(r1.empty && r2.empty)
52             return true;
53         else if(r1.empty != r2.empty)
54             return false;
55         else if(!Comparator(r1.front, r2.front))
56             return false;
57         r1.popFront();
58         r2.popFront();
59     }
60 }
61 ///
62 @("equals - array==array")
63 unittest
64 {
65     int[3] array = [1, 2, 3];
66     assert(array[0..$].equals!((a,b) => a==b)(array[0..$]));
67 }