Simpler TreeTrie.isEmpty() method (#9075)

Avoid creating (Key)Set to just test for empty.
More test cases
This commit is contained in:
Joakim Erdfelt 2022-12-21 12:46:08 -06:00 committed by GitHub
parent 1abaeb6cee
commit fe74264ecc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 1 deletions

View File

@ -276,7 +276,31 @@ class TreeTrie<V> extends AbstractTrie<V>
@Override
public boolean isEmpty()
{
return keySet().isEmpty();
return isEmpty(_root);
}
private boolean isEmpty(Node<V> t)
{
if (t != null)
{
if (t._key != null)
return false;
for (int i = 0; i < INDEX; i++)
{
if (t._nextIndex[i] != null)
{
if (!isEmpty(t._nextIndex[i]))
return false;
}
}
for (int i = t._nextOther.size(); i-- > 0; )
{
if (!isEmpty(t._nextOther.get(i)))
return false;
}
}
return true;
}
@Override

View File

@ -398,6 +398,20 @@ public class TrieTest
assertThat(requiredCapacity(Set.of(x, y, z), true), is(1 + 3 * (Character.MAX_VALUE / 2)));
}
@ParameterizedTest
@MethodSource("emptyImplementations")
public void testIsEmpty(AbstractTrie<Integer> trie) throws Exception
{
assertTrue(trie.isEmpty());
}
@ParameterizedTest
@MethodSource("implementations")
public void testIsNotEmpty(AbstractTrie<Integer> trie) throws Exception
{
assertFalse(trie.isEmpty());
}
@ParameterizedTest
@MethodSource("implementations")
public void testEmptyKey(AbstractTrie<Integer> trie) throws Exception