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 // }