28class SparseSetTests :
public UnitTest
32 : UnitTest (
"SparseSet class", UnitTestCategories::containers)
35 void runTest()
override
37 beginTest (
"basic operations");
43 expectEquals (
set.getNumRanges(), 0);
46 set.addRange ({0, 10});
49 expectEquals (
set.getNumRanges(), 1);
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);
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);
128 expectEquals (
set.getNumRanges(), 3);
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));
139 expectEquals (
set.getNumRanges(), 3);
140 expect (
set.getRange (2) == Range<int> (22, 30));
143 expectEquals (
set.getNumRanges(), 3);
144 expect (
set.getRange (2) == Range<int> (22, 28));
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;
bool isEmpty() const noexcept
int size() const noexcept
void removeRange(int startIndex, int numberToRemove)
void set(int indexToChange, ParameterType newValue)
bool contains(ParameterType elementToLookFor) const