28class SparseSetTests final :
public UnitTest
32 : UnitTest (
"SparseSet class", UnitTestCategories::containers)
35 void runTest()
override
37 beginTest (
"basic operations");
41 expect (set.isEmpty());
42 expectEquals (set.size(), 0);
43 expectEquals (set.getNumRanges(), 0);
44 expect (set.getTotalRange().isEmpty());
46 set.addRange ({0, 10});
47 expect (! set.isEmpty());
48 expectEquals (set.size(), 10);
49 expectEquals (set.getNumRanges(), 1);
50 expect (! set.getTotalRange().isEmpty());
51 expect (set.getRange (0) == Range<int> (0, 10));
53 expectEquals (set[0], 0);
54 expectEquals (set[5], 5);
55 expectEquals (set[9], 9);
57 expectEquals (set[10], 0);
58 expect (set.contains (0));
59 expect (set.contains (9));
60 expect (! set.contains (10));
63 beginTest (
"adding ranges");
68 set.addRange ({0, 10});
69 set.addRange ({0, 10});
70 expectEquals (set.getNumRanges(), 1);
71 expect (set.getRange (0) == Range<int> (0, 10));
74 set.addRange ({0, 2});
75 expectEquals (set.getNumRanges(), 1);
76 set.addRange ({8, 10});
77 expectEquals (set.getNumRanges(), 1);
78 set.addRange ({2, 5});
79 expectEquals (set.getNumRanges(), 1);
82 set.addRange ({-10, -5});
83 expectEquals (set.getNumRanges(), 2);
84 expect (set.getRange (0) == Range<int> (-10, -5));
85 expect (set.getRange (1) == Range<int> (0, 10));
86 expect (set.getTotalRange() == Range<int> (-10, 10));
88 set.addRange ({15, 20});
89 expectEquals (set.getNumRanges(), 3);
90 expect (set.getRange (0) == Range<int> (-10, -5));
91 expect (set.getRange (1) == Range<int> (0, 10));
92 expect (set.getRange (2) == Range<int> (15, 20));
93 expect (set.getTotalRange() == Range<int> (-10, 20));
96 set.addRange ({-5, -3});
97 expectEquals (set.getNumRanges(), 3);
98 expect (set.getRange (0) == Range<int> (-10, -3));
99 expect (set.getRange (1) == Range<int> (0, 10));
100 expect (set.getRange (2) == Range<int> (15, 20));
101 expect (set.getTotalRange() == Range<int> (-10, 20));
103 set.addRange ({20, 25});
104 expectEquals (set.getNumRanges(), 3);
105 expect (set.getRange (0) == Range<int> (-10, -3));
106 expect (set.getRange (1) == Range<int> (0, 10));
107 expect (set.getRange (2) == Range<int> (15, 25));
108 expect (set.getTotalRange() == Range<int> (-10, 25));
111 set.addRange ({-50, 50});
112 expectEquals (set.getNumRanges(), 1);
113 expect (set.getRange (0) == Range<int> (-50, 50));
114 expect (set.getTotalRange() == Range<int> (-50, 50));
117 beginTest (
"removing ranges");
121 set.addRange ({-20, -10});
122 set.addRange ({0, 10});
123 set.addRange ({20, 30});
124 expectEquals (set.getNumRanges(), 3);
127 set.removeRange ({-5, 5});
128 expectEquals (set.getNumRanges(), 3);
131 set.removeRange ({-15, 5});
132 expectEquals (set.getNumRanges(), 3);
133 expect (set.getRange (0) == Range<int> (-20, -15));
134 expect (set.getRange (1) == Range<int> (5, 10));
135 expect (set.getRange (2) == Range<int> (20, 30));
138 set.removeRange ({20, 22});
139 expectEquals (set.getNumRanges(), 3);
140 expect (set.getRange (2) == Range<int> (22, 30));
142 set.removeRange ({28, 30});
143 expectEquals (set.getNumRanges(), 3);
144 expect (set.getRange (2) == Range<int> (22, 28));
146 set.removeRange ({24, 26});
147 expectEquals (set.getNumRanges(), 4);
148 expect (set.getRange (0) == Range<int> (-20, -15));
149 expect (set.getRange (1) == Range<int> (5, 10));
150 expect (set.getRange (2) == Range<int> (22, 24));
151 expect (set.getRange (3) == Range<int> (26, 28));
154 beginTest (
"XORing ranges");
157 set.addRange ({0, 10});
159 set.invertRange ({0, 10});
160 expectEquals (set.getNumRanges(), 0);
161 set.invertRange ({0, 10});
162 expectEquals (set.getNumRanges(), 1);
164 set.invertRange ({4, 6});
165 expectEquals (set.getNumRanges(), 2);
166 expect (set.getRange (0) == Range<int> (0, 4));
167 expect (set.getRange (1) == Range<int> (6, 10));
169 set.invertRange ({-2, 2});
170 expectEquals (set.getNumRanges(), 3);
171 expect (set.getRange (0) == Range<int> (-2, 0));
172 expect (set.getRange (1) == Range<int> (2, 4));
173 expect (set.getRange (2) == Range<int> (6, 10));
176 beginTest (
"range contains & overlaps checks");
179 set.addRange ({0, 10});
181 expect (set.containsRange (Range<int> (0, 2)));
182 expect (set.containsRange (Range<int> (8, 10)));
183 expect (set.containsRange (Range<int> (0, 10)));
185 expect (! set.containsRange (Range<int> (-2, 0)));
186 expect (! set.containsRange (Range<int> (-2, 10)));
187 expect (! set.containsRange (Range<int> (10, 12)));
188 expect (! set.containsRange (Range<int> (0, 12)));
190 expect (set.overlapsRange (Range<int> (0, 2)));
191 expect (set.overlapsRange (Range<int> (8, 10)));
192 expect (set.overlapsRange (Range<int> (0, 10)));
194 expect (! set.overlapsRange (Range<int> (-2, 0)));
195 expect ( set.overlapsRange (Range<int> (-2, 10)));
196 expect (! set.overlapsRange (Range<int> (10, 12)));
197 expect ( set.overlapsRange (Range<int> (0, 12)));
202static SparseSetTests sparseSetTests;