Skip to content

Commit 7dd2de0

Browse files
committed
Fixes checkInvariants() not calling child nodes.
1 parent 2e7038b commit 7dd2de0

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

src/main/java/org/javimmutable/collections/array/FullBranchTrieNode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@ public void checkInvariants()
164164
if (entries.length != 32) {
165165
throw new IllegalStateException("unexpected entries size: expected=32 actual=" + entries.length);
166166
}
167+
for (TrieNode<T> entry : entries) {
168+
entry.checkInvariants();
169+
}
167170
}
168171

169172
private TrieNode<T> createUpdatedEntries(int shift,

src/main/java/org/javimmutable/collections/array/LeafTrieNode.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ public TrieNode<T> delete(int shift,
131131
sizeDelta.subtract(1);
132132
return of();
133133
} else {
134-
assert shift > 0;
135134
return this;
136135
}
137136
}

src/main/java/org/javimmutable/collections/array/MultiBranchTrieNode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ public void checkInvariants()
253253
if (entries.length != Integer.bitCount(bitmask)) {
254254
throw new IllegalStateException("unexpected entries size: expected=" + Integer.bitCount(bitmask) + " actual=" + entries.length);
255255
}
256+
for (TrieNode<T> entry : entries) {
257+
entry.checkInvariants();
258+
}
256259
}
257260

258261
// for use by unit tests

src/main/java/org/javimmutable/collections/array/SingleBranchTrieNode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ public void checkInvariants()
175175
if (branchIndex < 0 || branchIndex >= 32) {
176176
throw new IllegalStateException("illegal branchIndex value: " + branchIndex);
177177
}
178+
child.checkInvariants();
178179
}
179180

180181
// for tests

src/test/java/org/javimmutable/collections/array/JImmutableTrieArrayTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,21 @@ public void testRandom()
8888
for (int loop = 1; loop <= 20000; ++loop) {
8989
int index = r.nextInt(2000) - 1000;
9090
int value = r.nextInt();
91-
array = array.assign(index, value);
92-
expected.put(index, value);
91+
switch (r.nextInt(4)) {
92+
case 0:
93+
case 1:
94+
array = array.assign(index, value);
95+
expected.put(index, value);
96+
break;
97+
case 2:
98+
array = array.delete(index);
99+
expected.remove(index);
100+
break;
101+
case 3:
102+
assertEquals(array.find(index).getValueOrNull(), array.get(index));
103+
array.checkInvariants();
104+
break;
105+
}
93106
}
94107
assertEquals(expected.size(), array.size());
95108
for (Map.Entry<Integer, Integer> entry : expected.entrySet()) {

0 commit comments

Comments
 (0)