28class SparseSetTests :
public UnitTest
33 void runTest()
override
35 beginTest (
"basic operations");
41 expectEquals (
set.getNumRanges(), 0);
44 set.addRange ({0, 10});
47 expectEquals (
set.getNumRanges(), 1);
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);
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);
126 expectEquals (
set.getNumRanges(), 3);
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));
137 expectEquals (
set.getNumRanges(), 3);
138 expect (
set.getRange (2) == Range<int> (22, 30));
141 expectEquals (
set.getNumRanges(), 3);
142 expect (
set.getRange (2) == Range<int> (22, 28));
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)));
200static SparseSetTests sparseSetTests;
bool isEmpty() const noexcept
Returns true if the array is empty, false otherwise.
int size() const noexcept
Returns the current number of elements in the array.
void removeRange(int startIndex, int numberToRemove)
Removes a range of elements from the array.
Array()=default
Creates an empty array.
void set(int indexToChange, ParameterType newValue)
Replaces an element with a new value.
bool contains(ParameterType elementToLookFor) const
Returns true if the array contains at least one occurrence of an object.