1 module SetDemo;
2 
3 import std.stdio;
4 
5 import hunt.util.UnitTest;
6 import hunt.collection.Set;
7 import hunt.collection.SortedSet;
8 import hunt.collection.TreeSet;
9 import std.conv;
10 import std.range;
11 
12 import hunt.Exceptions;
13 import hunt.logging.ConsoleLogger;
14 import hunt.util.UnitTest;
15 import hunt.Assert;
16 
17 alias assertTrue = Assert.assertTrue;
18 alias assertFalse = Assert.assertFalse;
19 alias assertThat = Assert.assertThat;
20 alias assertEquals = Assert.assertEquals;
21 alias assertNotNull = Assert.assertNotNull;
22 alias assertNull = Assert.assertNull;
23 
24 class SetDemo {
25 
26     enum one = 1;
27     enum two = 2;
28     enum three = 3;
29     enum four = 4;
30     enum five = 5;
31 
32     /**
33      * Returns a new set of first 5 ints.
34      */
35     private static TreeSet!int set5() {
36         TreeSet!int q = new TreeSet!int();
37         assertTrue(q.isEmpty());
38         q.add(1);
39         q.add(3);
40         q.add(4);
41         q.add(2);
42         q.add(5);
43         assertEquals(5, q.size());
44         return q;
45     }
46 
47     void testTailSetContents() {
48         TreeSet!int set = set5();
49         SortedSet!int sm = set.tailSet(two);
50         assertFalse(sm.contains(1));
51         assertTrue(sm.contains(2));
52         assertTrue(sm.contains(3));
53         assertTrue(sm.contains(4));
54         assertTrue(sm.contains(5));
55         
56         // trace(sm.toString());
57 
58         InputRange!int i = sm.iterator();
59         int k;
60         k = (i.front());
61         assertEquals(two, k);
62         i.popFront();
63         k = (i.front());
64         assertEquals(three, k);
65         i.popFront();
66         k = (i.front());
67         assertEquals(four, k);
68         i.popFront();
69         k = (i.front());
70         assertEquals(five, k);
71         i.popFront();
72         assertTrue(i.empty());
73 
74         SortedSet!int ssm = sm.tailSet(four);
75         // trace(ssm.toString());
76         assertEquals(four, ssm.first());
77         assertEquals(five, ssm.last());
78         trace("ssm: ", ssm.toString());
79         trace("sm: ", sm.toString());
80         trace("set: ", set.toString());        
81         assertTrue(ssm.remove(four));
82         assertEquals(1, ssm.size());
83         assertEquals(3, sm.size());
84         assertEquals(4, set.size());
85 
86         trace("ssm: ", ssm.toString());
87         trace("sm: ", sm.toString());
88         trace("set: ", set.toString());
89     }
90 
91     void testInt() {
92         TreeSet!(int) ts = new TreeSet!(int)();
93         ts.add(3);
94         ts.add(10);
95         ts.add(2);
96         writeln("Elements: " ~ ts.toString());
97         writeln("First element: " ~ to!string(ts.first()));
98     }
99 
100     void testTreeSetBasic() {
101         TreeSet!(string) ts = new TreeSet!(string)();
102         ts.add("one");
103         ts.add("two");
104         ts.add("three");
105         writeln("Elements: " ~ ts.toString());
106         writeln("First element: " ~ ts.first());
107 
108         //check is set empty?
109         writeln("Is set empty: " ~ ts.isEmpty().to!string());
110 
111         string[] values = ts.toArray();
112         writeln(values);
113 
114         writeln("Size of the set: " ~ ts.size().to!string());
115         //remove one string
116         ts.remove("two");
117         writeln("Elements: " ~ ts.toString());
118 
119         //delete all elements from set
120         ts.clear();
121         writeln("Is set empty: " ~ ts.isEmpty().to!string());
122         writeln("Elements: " ~ ts.toString());
123         values = ts.toArray();
124         assert(values == []);
125         assert(ts.size() == 0);
126     }
127 
128     void testSubset() {
129         // http://java2novice.com/java-collections-and-util/treeset/subset/
130         TreeSet!string ts = new TreeSet!string();
131         ts.add("RED");
132         ts.add("ORANGE");
133         ts.add("BLUE");
134         ts.add("GREEN");
135         ts.add("WHITE");
136         ts.add("BROWN");
137         ts.add("YELLOW");
138         ts.add("BLACK");
139         writeln(ts);
140         Set!string subSet = ts.subSet("GREEN", "WHITE");
141         writeln("sub set: " ~ subSet.toString());
142         assert(subSet.toString() == "[GREEN, ORANGE, RED]", subSet.toString());
143 
144         subSet = ts.subSet("GREEN", true, "WHITE", true);
145         writeln("sub set: " ~ subSet.toString());
146         assert(subSet.toString() == "[GREEN, ORANGE, RED, WHITE]", subSet.toString());
147 
148         subSet = ts.subSet("GREEN", false, "WHITE", true);
149         writeln("sub set: " ~ subSet.toString());
150         assert(subSet.toString() == "[ORANGE, RED, WHITE]", subSet.toString());
151     }
152 
153 }
154 
155 // class MyStrComp : Comparator<string>{
156 
157 //     @Override
158 //     public int compare(string str1, string str2) {
159 //         return str1.compareTo(str2);
160 //     }
161 
162 // }