28 class SparseSetTests :
public UnitTest
31 SparseSetTests() : UnitTest (
"SparseSet class",
"Containers") {}
33 void runTest()
override
35 beginTest (
"basic operations");
39 expect (set.isEmpty());
40 expectEquals (set.size(), 0);
41 expectEquals (set.getNumRanges(), 0);
42 expect (set.getTotalRange().isEmpty());
44 set.addRange ({0, 10});
45 expect (! set.isEmpty());
46 expectEquals (set.size(), 10);
47 expectEquals (set.getNumRanges(), 1);
48 expect (! set.getTotalRange().isEmpty());
49 expect (set.getRange (0) == Range<int> (0, 10));
51 expectEquals (set[0], 0);
52 expectEquals (set[5], 5);
53 expectEquals (set[9], 9);
55 expectEquals (set[10], 0);
56 expect (set.contains (0));
57 expect (set.contains (9));
58 expect (! set.contains (10));
61 beginTest (
"adding ranges");
66 set.addRange ({0, 10});
67 set.addRange ({0, 10});
68 expectEquals (set.getNumRanges(), 1);
69 expect (set.getRange (0) == Range<int> (0, 10));
72 set.addRange ({0, 2});
73 expectEquals (set.getNumRanges(), 1);
74 set.addRange ({8, 10});
75 expectEquals (set.getNumRanges(), 1);
76 set.addRange ({2, 5});
77 expectEquals (set.getNumRanges(), 1);
80 set.addRange ({-10, -5});
81 expectEquals (set.getNumRanges(), 2);
82 expect (set.getRange (0) == Range<int> (-10, -5));
83 expect (set.getRange (1) == Range<int> (0, 10));
84 expect (set.getTotalRange() == Range<int> (-10, 10));
86 set.addRange ({15, 20});
87 expectEquals (set.getNumRanges(), 3);
88 expect (set.getRange (0) == Range<int> (-10, -5));
89 expect (set.getRange (1) == Range<int> (0, 10));
90 expect (set.getRange (2) == Range<int> (15, 20));
91 expect (set.getTotalRange() == Range<int> (-10, 20));
94 set.addRange ({-5, -3});
95 expectEquals (set.getNumRanges(), 3);
96 expect (set.getRange (0) == Range<int> (-10, -3));
97 expect (set.getRange (1) == Range<int> (0, 10));
98 expect (set.getRange (2) == Range<int> (15, 20));
99 expect (set.getTotalRange() == Range<int> (-10, 20));
101 set.addRange ({20, 25});
102 expectEquals (set.getNumRanges(), 3);
103 expect (set.getRange (0) == Range<int> (-10, -3));
104 expect (set.getRange (1) == Range<int> (0, 10));
105 expect (set.getRange (2) == Range<int> (15, 25));
106 expect (set.getTotalRange() == Range<int> (-10, 25));
109 set.addRange ({-50, 50});
110 expectEquals (set.getNumRanges(), 1);
111 expect (set.getRange (0) == Range<int> (-50, 50));
112 expect (set.getTotalRange() == Range<int> (-50, 50));
115 beginTest (
"removing ranges");
119 set.addRange ({-20, -10});
120 set.addRange ({0, 10});
121 set.addRange ({20, 30});
122 expectEquals (set.getNumRanges(), 3);
125 set.removeRange ({-5, 5});
126 expectEquals (set.getNumRanges(), 3);
129 set.removeRange ({-15, 5});
130 expectEquals (set.getNumRanges(), 3);
131 expect (set.getRange (0) == Range<int> (-20, -15));
132 expect (set.getRange (1) == Range<int> (5, 10));
133 expect (set.getRange (2) == Range<int> (20, 30));
136 set.removeRange ({20, 22});
137 expectEquals (set.getNumRanges(), 3);
138 expect (set.getRange (2) == Range<int> (22, 30));
140 set.removeRange ({28, 30});
141 expectEquals (set.getNumRanges(), 3);
142 expect (set.getRange (2) == Range<int> (22, 28));
144 set.removeRange ({24, 26});
145 expectEquals (set.getNumRanges(), 4);
146 expect (set.getRange (0) == Range<int> (-20, -15));
147 expect (set.getRange (1) == Range<int> (5, 10));
148 expect (set.getRange (2) == Range<int> (22, 24));
149 expect (set.getRange (3) == Range<int> (26, 28));
152 beginTest (
"XORing ranges");
155 set.addRange ({0, 10});
157 set.invertRange ({0, 10});
158 expectEquals (set.getNumRanges(), 0);
159 set.invertRange ({0, 10});
160 expectEquals (set.getNumRanges(), 1);
162 set.invertRange ({4, 6});
163 expectEquals (set.getNumRanges(), 2);
164 expect (set.getRange (0) == Range<int> (0, 4));
165 expect (set.getRange (1) == Range<int> (6, 10));
167 set.invertRange ({-2, 2});
168 expectEquals (set.getNumRanges(), 3);
169 expect (set.getRange (0) == Range<int> (-2, 0));
170 expect (set.getRange (1) == Range<int> (2, 4));
171 expect (set.getRange (2) == Range<int> (6, 10));
174 beginTest (
"range contains & overlaps checks");
177 set.addRange ({0, 10});
179 expect (set.containsRange (Range<int> (0, 2)));
180 expect (set.containsRange (Range<int> (8, 10)));
181 expect (set.containsRange (Range<int> (0, 10)));
183 expect (! set.containsRange (Range<int> (-2, 0)));
184 expect (! set.containsRange (Range<int> (-2, 10)));
185 expect (! set.containsRange (Range<int> (10, 12)));
186 expect (! set.containsRange (Range<int> (0, 12)));
188 expect (set.overlapsRange (Range<int> (0, 2)));
189 expect (set.overlapsRange (Range<int> (8, 10)));
190 expect (set.overlapsRange (Range<int> (0, 10)));
192 expect (! set.overlapsRange (Range<int> (-2, 0)));
193 expect ( set.overlapsRange (Range<int> (-2, 10)));
194 expect (! set.overlapsRange (Range<int> (10, 12)));
195 expect ( set.overlapsRange (Range<int> (0, 12)));
200 static SparseSetTests sparseSetTests;