|
|
@@ -6,11 +6,18 @@
|
|
|
*/
|
|
|
package net.ranides.assira.collection.suite.lookups;
|
|
|
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.ListIterator;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Map.Entry;
|
|
|
import java.util.NoSuchElementException;
|
|
|
+import java.util.Set;
|
|
|
import java.util.SortedSet;
|
|
|
import javax.annotation.Resource;
|
|
|
import net.ranides.assira.collection.lookups.Lookup.LookupEntry;
|
|
|
import net.ranides.assira.collection.lookups.SortedLookup;
|
|
|
+import net.ranides.assira.collection.suite.IteratorTester;
|
|
|
+import net.ranides.assira.collection.suite.sets.SetTester;
|
|
|
import net.ranides.assira.test.TMap;
|
|
|
import net.ranides.assira.junit.InterfaceTest;
|
|
|
import static net.ranides.assira.junit.NewAssert.*;
|
|
|
@@ -26,7 +33,7 @@ public final class SortedLookupTester<K> {
|
|
|
private TMap<K,Integer> $map;
|
|
|
|
|
|
@InterfaceTest
|
|
|
- public void basicBounds_EntrySet(SortedLookup<K> target) {
|
|
|
+ public void basicBounds_EntrySetF(SortedLookup<K> target) {
|
|
|
SortedSet<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
assertThrows(NoSuchElementException.class, ()->
|
|
|
set.first()
|
|
|
@@ -38,5 +45,394 @@ public final class SortedLookupTester<K> {
|
|
|
assertEquals( set.first(), $map.item(1).entry() );
|
|
|
assertEquals( set.last(), $map.item(5).entry() );
|
|
|
}
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicBounds_EntrySet(SortedLookup<K> target) {
|
|
|
+ SortedSet<Entry<K, Integer>> set = target.entrySet();
|
|
|
+ assertThrows(NoSuchElementException.class, ()->
|
|
|
+ set.first()
|
|
|
+ );
|
|
|
+ assertThrows(NoSuchElementException.class, ()->
|
|
|
+ set.last()
|
|
|
+ );
|
|
|
+ $map.list(2,5,3,1,4).into(target);
|
|
|
+ assertEquals( set.first(), $map.item(1).entry() );
|
|
|
+ assertEquals( set.last(), $map.item(5).entry() );
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicKeys_Head(SortedLookup<K> target) {
|
|
|
+ SetTester.assertHead($map.keys(), target.keySet(), $map.list().keys());
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+ SetTester.assertHead($map.keys(), target.keySet(), $map.list(3, 4, 5, 6, 7).keys());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicKeys_Tail(SortedLookup<K> target) {
|
|
|
+ SetTester.assertTail($map.keys(), target.keySet(), $map.list().keys());
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+ SetTester.assertTail($map.keys(), target.keySet(), $map.list(3, 4, 5, 6, 7).keys());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicKeys_Sub(SortedLookup<K> target) {
|
|
|
+ SetTester.assertTail($map.keys(), target.keySet(), $map.list().keys());
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+ SetTester.assertTail($map.keys(), target.keySet(), $map.list(3, 4, 5, 6, 7).keys());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicEntries_Head(SortedLookup<K> target) {
|
|
|
+ SetTester.assertHead($map.entries(), target.entrySet(), $map.list().entries());
|
|
|
+ SetTester.assertHead($map.lookups(), target.fastEntrySet(), $map.list().lookups());
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+
|
|
|
+ SetTester.assertHead($map.entries(), target.entrySet(), $map.list(3, 4, 5, 6, 7).entries());
|
|
|
+ SetTester.assertHead($map.lookups(), target.fastEntrySet(), $map.list(3, 4, 5, 6, 7).lookups());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicEntries_Tail(SortedLookup<K> target) {
|
|
|
+ SetTester.assertTail($map.entries(), target.entrySet(), $map.list().entries());
|
|
|
+ SetTester.assertTail($map.lookups(), target.fastEntrySet(), $map.list().lookups());
|
|
|
+
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+
|
|
|
+ SetTester.assertTail($map.entries(), target.entrySet(), $map.list(3, 4, 5, 6, 7).entries());
|
|
|
+ SetTester.assertTail($map.lookups(), target.fastEntrySet(), $map.list(3, 4, 5, 6, 7).lookups());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicEntries_Sub(SortedLookup<K> target) {
|
|
|
+ SetTester.assertSub($map.entries(), target.entrySet(), $map.list().entries());
|
|
|
+ SetTester.assertSub($map.lookups(), target.fastEntrySet(), $map.list().lookups());
|
|
|
+
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+
|
|
|
+ SetTester.assertSub($map.entries(), target.entrySet(), $map.list(3, 4, 5, 6, 7).entries());
|
|
|
+ SetTester.assertSub($map.lookups(), target.fastEntrySet(), $map.list(3, 4, 5, 6, 7).lookups());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIterator(SortedLookup<K> target) {
|
|
|
+ TMap.TItems<K,Integer> list1 = $map.list();
|
|
|
+ TMap.TItems<K,Integer> list2 = $map.list(3, 4, 5, 6, 7);
|
|
|
+
|
|
|
+ IteratorTester.basicIterator(target.keySet().iterator(), 0, list1.keys());
|
|
|
+ IteratorTester.basicIterator(target.entrySet().iterator(), 0, list1.entries());
|
|
|
+ IteratorTester.basicIterator(target.fastEntrySet().iterator(), 0, list1.lookups());
|
|
|
+ IteratorTester.basicIterator((ListIterator)target.values().iterator(), 0, list1.values());
|
|
|
+
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+
|
|
|
+ IteratorTester.basicIterator(target.keySet().iterator(), 0, list2.keys());
|
|
|
+ IteratorTester.basicIterator(target.entrySet().iterator(), 0, list2.entries());
|
|
|
+ IteratorTester.basicIterator(target.fastEntrySet().iterator(), 0, list2.lookups());
|
|
|
+ IteratorTester.basicIterator((ListIterator)target.values().iterator(), 0, list2.values());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIteratorFrom(SortedLookup<K> target) {
|
|
|
+ TMap.TItems<K,Integer> list1 = $map.list();
|
|
|
+ TMap.TItems<K,Integer> list2 = $map.list(3, 4, 5, 6, 7);
|
|
|
+ TMap.TItem<K,Integer> item = $map.item(4);
|
|
|
+
|
|
|
+ IteratorTester.basicIterator(target.keySet().iterator(item.key()), 0, list1.keys());
|
|
|
+ IteratorTester.basicIterator(target.entrySet().iterator(item.entry()), 0, list1.entries());
|
|
|
+ IteratorTester.basicIterator(target.fastEntrySet().iterator(item.lookup()), 0, list1.lookups());
|
|
|
+
|
|
|
+ $map.list(4, 7, 5, 3, 6).into(target);
|
|
|
+
|
|
|
+ IteratorTester.basicIterator(target.keySet().iterator(item.key()), 2, list2.keys());
|
|
|
+ IteratorTester.basicIterator(target.entrySet().iterator(item.entry()), 2, list2.entries());
|
|
|
+ IteratorTester.basicIterator(target.fastEntrySet().iterator(item.lookup()), 2, list2.lookups());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSubmapIteratorFrom(SortedLookup<K> target) {
|
|
|
+ TMap.TItems<K,Integer> list = $map.list(3, 4, 5, 6, 7);
|
|
|
+ TMap.TItem<K,Integer> item = $map.item(4);
|
|
|
+
|
|
|
+ $map.list(4, 7, 5, 3, 6, 1, 8).into(target);
|
|
|
+ SortedLookup<K> map = target.subMap($map.item(1).key(), $map.item(8).key());
|
|
|
+
|
|
|
+ IteratorTester.subrangeIterator(map.keySet().iterator(item.key()), 2, list.keys());
|
|
|
+ IteratorTester.subrangeIterator(map.entrySet().iterator(item.entry()), 2, list.entries());
|
|
|
+ IteratorTester.subrangeIterator(map.fastEntrySet().iterator(item.lookup()), 2, list.lookups());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_ContainsHC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+
|
|
|
+ $map.list().item(1).item(1,1).item(2).item(3).into(target);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+ assertEquals(true, set.contains($map.item(1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(1,1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(2).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(3).lookup()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($map.item(4).lookup()));
|
|
|
+ assertEquals(false, set.contains(new Object()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Contains(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+
|
|
|
+ $map.list(1,2,3,5).into(target);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+ assertEquals(true, set.contains($map.item(1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(2).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(3).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(5).lookup()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($map.item(4).lookup()));
|
|
|
+ assertEquals(false, set.contains(new Object()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Remove(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ $map.list(1,2,3,7).into(target);
|
|
|
+
|
|
|
+ assertEquals(false, set.remove($map.item(1).lookup(5)));
|
|
|
+ assertEquals(true, set.remove($map.item(1).lookup()));
|
|
|
+ assertEquals(false, set.remove($map.item(4).lookup()));
|
|
|
+ assertEquals(false, set.remove(new Object()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($map.item(1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(2).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(3).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(7).lookup()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_RemoveHC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ $map.list().item(1).item(1,1).item(2).item(3).into(target);
|
|
|
+
|
|
|
+ assertEquals(false, set.remove($map.item(1).lookup(5)));
|
|
|
+ assertEquals(true, set.remove($map.item(1).lookup()));
|
|
|
+ assertEquals(false, set.remove($map.item(4).lookup()));
|
|
|
+ assertEquals(false, set.remove(new Object()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($map.item(1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(1,1).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(2).lookup()));
|
|
|
+ assertEquals(true, set.contains($map.item(3).lookup()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_IteratorHC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list().item(1).item(1,1).item(2).item(3).into(target);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ assertEquals(target.getInt(entry.getKey()), entry.getIntValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list(1,2,3,5).into(target);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ assertEquals(target.getInt(entry.getKey()), entry.getIntValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_SetValueHC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list().item(1).item(1,1).item(2).item(3).into(target);
|
|
|
+ K k1 = $map.item(1).key();
|
|
|
+ K k2 = $map.item(2).key();
|
|
|
+ int v1 = $map.item(101).valueInt();
|
|
|
+ int v2 = $map.item(102).valueInt();
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ if(k1.equals(entry.getKey())) {
|
|
|
+ entry.setValue(v1);
|
|
|
+ }
|
|
|
+ if(k2.equals(entry.getKey())) {
|
|
|
+ entry.setValue(v2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assertContains(target, $map.item(1).key(), v1);
|
|
|
+ assertContains(target, $map.item(2).key(), v2);
|
|
|
+ assertContains(target, $map.item(1,1));
|
|
|
+ assertContains(target, $map.item(3));
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_SetValue(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list(1,2,3,5).into(target);
|
|
|
+ K k1 = $map.item(1).key();
|
|
|
+ K k2 = $map.item(2).key();
|
|
|
+ int v1 = $map.item(101).value();
|
|
|
+ int v2 = $map.item(102).value();
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ if(k1.equals(entry.getKey())) {
|
|
|
+ entry.setValue(v1);
|
|
|
+ }
|
|
|
+ if(k2.equals(entry.getKey())) {
|
|
|
+ entry.setValue(v2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assertContains(target, $map.item(1).key(), v1);
|
|
|
+ assertContains(target, $map.item(2).key(), v2);
|
|
|
+ assertContains(target, $map.item(5));
|
|
|
+ assertContains(target, $map.item(3));
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_RemoveHC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list().item(1).item(1,1).item(2).item(3).into(target);
|
|
|
+ K k1 = $map.item(1).key();
|
|
|
+ K k2 = $map.item(2).key();
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ K key = entry.getKey();
|
|
|
+
|
|
|
+ if(k1.equals(key)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if(k2.equals(key)) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContains(target, $map.item(1));
|
|
|
+ assertNotContains(target, $map.item(2));
|
|
|
+ assertContains(target, $map.item(1,1));
|
|
|
+ assertContains(target, $map.item(3));
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_Remove(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.list(1,2,3,5).into(target);
|
|
|
+ K k1 = $map.item(1).key();
|
|
|
+ K k2 = $map.item(2).key();
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ LookupEntry<K> entry = iterator.next();
|
|
|
+ K key = entry.getKey();
|
|
|
+
|
|
|
+ if(k1.equals(key)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if(k2.equals(key)) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContains(target, $map.item(1));
|
|
|
+ assertNotContains(target, $map.item(2));
|
|
|
+ assertContains(target, $map.item(3));
|
|
|
+ assertContains(target, $map.item(5));
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_RemoveAll_HC(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.urange(1024).into(target);
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ iterator.next();
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void fastEntrySet_Iterator_RemoveAll(SortedLookup<K> target) {
|
|
|
+ Set<LookupEntry<K>> set = target.fastEntrySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ $map.range(1024).into(target);
|
|
|
+
|
|
|
+ Iterator<LookupEntry<K>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ iterator.next();
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertContains(SortedLookup<K> target, K key, int value) {
|
|
|
+ assertEquals(true, target.containsKey(key));
|
|
|
+ assertEquals(value, target.getInt(key));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertContains(SortedLookup<K> target, TMap.TItem<K,?> item) {
|
|
|
+ assertContains(target, item.key(), item.valueInt());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertNotContains(SortedLookup<K> target, TMap.TItem<K,?> item) {
|
|
|
+ assertEquals(false, target.containsKey(item.key()));
|
|
|
+ assertEquals(null, target.get(item.key()));
|
|
|
+ }
|
|
|
|
|
|
}
|