|
|
@@ -6,38 +6,32 @@
|
|
|
*/
|
|
|
package net.ranides.assira.collection.mockup;
|
|
|
|
|
|
-import java.util.AbstractMap;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.Map;
|
|
|
import java.util.Map.Entry;
|
|
|
+import java.util.NoSuchElementException;
|
|
|
import java.util.Random;
|
|
|
import java.util.Set;
|
|
|
+import net.ranides.assira.collection.IntCollection;
|
|
|
+import net.ranides.assira.collection.iterators.IntIterator;
|
|
|
+import net.ranides.assira.collection.lookups.AHashLookup;
|
|
|
import net.ranides.assira.collection.lookups.Lookup;
|
|
|
import static net.ranides.assira.collection.mockup.TPointEnum.*;
|
|
|
+import static net.ranides.assira.junit.QAssert.*;
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
* @author Ranides Atterwim <ranides@gmail.com>
|
|
|
*/
|
|
|
-public class ALookupTester extends TPointTester {
|
|
|
+@SuppressWarnings("PMD.MethodNameRules")
|
|
|
+public class LookupTester extends TPointTester {
|
|
|
|
|
|
- public ALookupTester(TPointGenerator generator) {
|
|
|
- super(generator);
|
|
|
+ public LookupTester() {
|
|
|
+ super();
|
|
|
}
|
|
|
|
|
|
- public void put(Map<TPoint, Integer> target, TPointEnum... items) {
|
|
|
- for(TPointEnum item : items) {
|
|
|
- target.put($key(item), $value(item));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void put(Map<TPoint, Integer> target, TPoint... items) {
|
|
|
- for (TPoint point : items) {
|
|
|
- target.put(point, $value(B1));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public void basicPutInt(Lookup<TPoint> target, int count) {
|
|
|
int prev = target.size();
|
|
|
int value = 200;
|
|
|
@@ -290,6 +284,20 @@ public class ALookupTester extends TPointTester {
|
|
|
assertEquals(true, target.isEmpty());
|
|
|
}
|
|
|
|
|
|
+ public void basicTrim(AHashLookup<TPoint> target) {
|
|
|
+ put(target, $ukeys(1024));
|
|
|
+ target.clear();
|
|
|
+ put(target, $ukeys(128));
|
|
|
+ target.trim();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicTrim(AHashLookup<TPoint> target, int keys, int n) {
|
|
|
+ put(target, $ukeys(5*n));
|
|
|
+ target.clear();
|
|
|
+ put(target, $ukeys(keys));
|
|
|
+ target.trim(n);
|
|
|
+ }
|
|
|
+
|
|
|
public void basicEntrySet_Contains(Map<TPoint, Integer> target) {
|
|
|
Set<Entry<TPoint, Integer>> set = target.entrySet();
|
|
|
|
|
|
@@ -330,10 +338,13 @@ public class ALookupTester extends TPointTester {
|
|
|
put(target, A1, A1_NE, B1, C1);
|
|
|
assertEquals(4, set.size());
|
|
|
|
|
|
- for(Lookup.LookupEntry<TPoint> entry : set) {
|
|
|
- assertEquals(target.getInt(entry.getKey()), entry.getIntValue());
|
|
|
- }
|
|
|
+ Iterator<Lookup.LookupEntry<TPoint>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ Lookup.LookupEntry<TPoint> entry = iterator.next();
|
|
|
+ assertEquals(target.getInt(entry.getKey()), entry.getIntValue());
|
|
|
+ }
|
|
|
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
}
|
|
|
|
|
|
public void basicEntrySet_IteratorInteger(Map<TPoint, Integer> target) {
|
|
|
@@ -343,9 +354,13 @@ public class ALookupTester extends TPointTester {
|
|
|
put(target, A1, A1_NE, B1, C1);
|
|
|
assertEquals(4, set.size());
|
|
|
|
|
|
- for(Entry<TPoint, Integer> entry : set) {
|
|
|
- assertEquals(target.get(entry.getKey()), entry.getValue());
|
|
|
- }
|
|
|
+ Iterator<Entry<TPoint, Integer>> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ Entry<TPoint, Integer> entry = iterator.next();
|
|
|
+ assertEquals(target.get(entry.getKey()), entry.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
}
|
|
|
|
|
|
public void basicEntrySet_Iterator_SetValueInt(Lookup<TPoint> target) {
|
|
|
@@ -371,7 +386,7 @@ public class ALookupTester extends TPointTester {
|
|
|
assertContainsInt(target, C1, C1);
|
|
|
}
|
|
|
|
|
|
- public void basicEntrySet_Iterator_SetValueInteger(Lookup<TPoint> target) {
|
|
|
+ public void basicEntrySet_Iterator_SetValueInteger(Map<TPoint, Integer> target) {
|
|
|
Set<Entry<TPoint, Integer>> set = target.entrySet();
|
|
|
|
|
|
assertEquals(0, set.size());
|
|
|
@@ -389,14 +404,14 @@ public class ALookupTester extends TPointTester {
|
|
|
entry.setValue($object(D2));
|
|
|
}
|
|
|
}
|
|
|
- assertContainsInt(target, A1, D1);
|
|
|
- assertContainsInt(target, B1, D2);
|
|
|
- assertContainsInt(target, A1_NE, A1_NE);
|
|
|
- assertContainsInt(target, C1, C1);
|
|
|
+ assertContainsInteger(target, A1, D1);
|
|
|
+ assertContainsInteger(target, B1, D2);
|
|
|
+ assertContainsInteger(target, A1_NE, A1_NE);
|
|
|
+ assertContainsInteger(target, C1, C1);
|
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
- public void basicEntrySet_Iterator_Remove(Lookup<TPoint> target) {
|
|
|
+ public void basicEntrySet_Iterator_Remove(Map<TPoint, Integer> target) {
|
|
|
Set<Entry<TPoint, Integer>> set = target.entrySet();
|
|
|
|
|
|
assertEquals(0, set.size());
|
|
|
@@ -412,18 +427,22 @@ public class ALookupTester extends TPointTester {
|
|
|
}
|
|
|
if($equals(key, B1)) {
|
|
|
iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- assertEquals(2, set.size());
|
|
|
- assertNotContainsInt(target, A1);
|
|
|
- assertNotContainsInt(target, B1);
|
|
|
- assertContainsInt(target, A1_NE, A1_NE);
|
|
|
- assertContainsInt(target, C1, C1);
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContainsInteger(target, A1);
|
|
|
+ assertNotContainsInteger(target, B1);
|
|
|
+ assertContainsInteger(target, A1_NE, A1_NE);
|
|
|
+ assertContainsInteger(target, C1, C1);
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
- public void basicEntrySet_Iterator_RemoveAll(Lookup<TPoint> target) {
|
|
|
+ public void basicEntrySet_Iterator_RemoveAll(Map<TPoint, Integer> target) {
|
|
|
Set<Entry<TPoint, Integer>> set = target.entrySet();
|
|
|
|
|
|
assertEquals(0, set.size());
|
|
|
@@ -436,7 +455,273 @@ public class ALookupTester extends TPointTester {
|
|
|
}
|
|
|
assertEquals(0, target.size());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ public void basicEquals(TestGenerator<? extends Map<TPoint, Integer>> generator) {
|
|
|
+ Map<TPoint, Integer> map1 = generator.create();
|
|
|
+ Map<TPoint, Integer> map2 = generator.create();
|
|
|
+ Map<TPoint, Integer> map3 = generator.create();
|
|
|
+ Map<TPoint, Integer> map4 = generator.create();
|
|
|
+ Map<TPoint, Integer> map5 = generator.create();
|
|
|
+ Map<TPoint, Integer> map6 = generator.create();
|
|
|
+
|
|
|
+ put(map1, E1, B1, C1);
|
|
|
+ put(map2, E1, B1, C1);
|
|
|
+ put(map3, E1_NE, B1, C1);
|
|
|
+ put(map4, B1, C1);
|
|
|
+ put(map5, B1, C1, D1);
|
|
|
+ put(map6, E1_NE, C1, D1);
|
|
|
+
|
|
|
+ assertEquality(map1, map2, map3, map4);
|
|
|
+ assertEquality(map1, map2, map3, map6);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicEquals_Entry(Map<TPoint, Integer> target) {
|
|
|
+ put(target, E1, E1_EQ, E1_NE, B1);
|
|
|
+
|
|
|
+ assertEquality(
|
|
|
+ find(target, E1),
|
|
|
+ find(target, E1_EQ),
|
|
|
+ find(target, E1_NE),
|
|
|
+ find(target, B1)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicSerializable(Map<TPoint, Integer> target) {
|
|
|
+ put(target, A1, A1_EQ, A1_NE, B1, C1);
|
|
|
+ assertSerializable(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicKeySet_Contains(Map<TPoint, Integer> target) {
|
|
|
+ Set<TPoint> set = target.keySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+ assertEquals(true, set.contains($key(A1)));
|
|
|
+ assertEquals(true, set.contains($key(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($key(B1)));
|
|
|
+ assertEquals(true, set.contains($key(C1)));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($key(D1)));
|
|
|
+ assertEquals(false, set.contains(new Object()));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicKeySet_Remove(Map<TPoint, Integer> target) {
|
|
|
+ Set<TPoint> set = target.keySet();
|
|
|
+
|
|
|
+ basicEntrySet_Contains(target);
|
|
|
+
|
|
|
+ assertEquals(true, set.remove($key(A1_EQ)));
|
|
|
+ assertEquals(false, set.remove($key(D1)));
|
|
|
+ assertEquals(false, set.remove(new Object()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($key(A1)));
|
|
|
+ assertEquals(true, set.contains($key(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($key(B1)));
|
|
|
+ assertEquals(true, set.contains($key(C1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicKeySet_Iterator(Map<TPoint, Integer> target) {
|
|
|
+ Set<TPoint> set = target.keySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+
|
|
|
+ Iterator<TPoint> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ TPoint key = iterator.next();
|
|
|
+ assertEquals(true, target.containsKey(key));
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public void basicKeySet_Iterator_Remove(Map<TPoint, Integer> target) {
|
|
|
+ Set<TPoint> set = target.keySet();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+
|
|
|
+ Iterator<TPoint> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ TPoint key = iterator.next();
|
|
|
+
|
|
|
+ if($equals(key, A1_EQ)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if($equals(key, B1)) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContainsInteger(target, A1);
|
|
|
+ assertNotContainsInteger(target, B1);
|
|
|
+ assertContainsInteger(target, A1_NE, A1_NE);
|
|
|
+ assertContainsInteger(target, C1, C1);
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_ContainsInt(Lookup<TPoint> target) {
|
|
|
+ IntCollection set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+ assertEquals(true, set.contains($value(A1)));
|
|
|
+ assertEquals(true, set.contains($value(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($value(B1)));
|
|
|
+ assertEquals(true, set.contains($value(C1)));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($value(D1)));
|
|
|
+ assertEquals(false, set.contains(new Object()));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_ContainsInteger(Map<TPoint, Integer> target) {
|
|
|
+ Collection<Integer> set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+ assertEquals(true, set.contains($object(A1)));
|
|
|
+ assertEquals(true, set.contains($object(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($object(B1)));
|
|
|
+ assertEquals(true, set.contains($object(C1)));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($object(D1)));
|
|
|
+ assertEquals(false, set.contains(new Object()));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_RemoveInt(Lookup<TPoint> target) {
|
|
|
+ IntCollection set = target.values();
|
|
|
+
|
|
|
+ basicValues_ContainsInt(target);
|
|
|
+
|
|
|
+ assertEquals(true, set.remove($value(A1)));
|
|
|
+ assertEquals(false, set.remove($value(D1)));
|
|
|
+ assertEquals(false, set.remove(new Object()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($value(A1)));
|
|
|
+ assertEquals(true, set.contains($value(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($value(B1)));
|
|
|
+ assertEquals(true, set.contains($value(C1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_RemoveInteger(Map<TPoint, Integer> target) {
|
|
|
+ Collection<Integer> set = target.values();
|
|
|
+
|
|
|
+ basicValues_ContainsInteger(target);
|
|
|
+
|
|
|
+ assertEquals(true, set.remove($object(A1)));
|
|
|
+ assertEquals(false, set.remove($object(D1)));
|
|
|
+ assertEquals(false, set.remove(new Object()));
|
|
|
+
|
|
|
+ assertEquals(false, set.contains($object(A1)));
|
|
|
+ assertEquals(true, set.contains($object(A1_NE)));
|
|
|
+ assertEquals(true, set.contains($object(B1)));
|
|
|
+ assertEquals(true, set.contains($object(C1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_IteratorInt(Lookup<TPoint> target) {
|
|
|
+ IntCollection set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+
|
|
|
+ IntIterator iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ int var = iterator.next();
|
|
|
+ assertEquals(true, target.containsValue(var));
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basicValues_IteratorInteger(Map<TPoint, Integer> target) {
|
|
|
+ Collection<Integer> set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+ assertEquals(4, set.size());
|
|
|
+
|
|
|
+ Iterator<Integer> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ Integer var = iterator.next();
|
|
|
+ assertEquals(true, target.containsValue(var));
|
|
|
+ }
|
|
|
+
|
|
|
+ assertThrows(NoSuchElementException.class, ()-> iterator.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public void basicValues_Iterator_RemoveInt(Lookup<TPoint> target) {
|
|
|
+ IntCollection set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+
|
|
|
+ IntIterator iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ int var = iterator.next();
|
|
|
+
|
|
|
+ if(var == $value(A1)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if(var == $value(B1)) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContainsInt(target, A1);
|
|
|
+ assertNotContainsInt(target, B1);
|
|
|
+ assertContainsInt(target, A1_NE, A1_NE);
|
|
|
+ assertContainsInt(target, C1, C1);
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public void basicValues_Iterator_RemoveInteger(Map<TPoint, Integer> target) {
|
|
|
+ Collection<Integer> set = target.values();
|
|
|
+
|
|
|
+ assertEquals(0, set.size());
|
|
|
+ put(target, A1, A1_NE, B1, C1);
|
|
|
+
|
|
|
+ Iterator<Integer> iterator = set.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ Integer var = iterator.next();
|
|
|
+
|
|
|
+ if(var.equals($object(A1))) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if(var.equals($object(B1))) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertNotContainsInteger(target, A1);
|
|
|
+ assertNotContainsInteger(target, B1);
|
|
|
+ assertContainsInteger(target, A1_NE, A1_NE);
|
|
|
+ assertContainsInteger(target, C1, C1);
|
|
|
+
|
|
|
+ set.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
protected void assertRemoveInt(Lookup<TPoint> target, TPointEnum key, TPointEnum prev) {
|
|
|
int size = target.size();
|
|
|
@@ -488,6 +773,28 @@ public class ALookupTester extends TPointTester {
|
|
|
assertEquals(size, target.keySet().size());
|
|
|
assertEquals(size, target.values().size());
|
|
|
}
|
|
|
+
|
|
|
+ private void put(Map<TPoint, Integer> target, TPointEnum... items) {
|
|
|
+ for(TPointEnum item : items) {
|
|
|
+ target.put($key(item), $value(item));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void put(Map<TPoint, Integer> target, TPoint... items) {
|
|
|
+ for (TPoint point : items) {
|
|
|
+ target.put(point, $value(B1));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Entry<TPoint, Integer> find(Map<TPoint, Integer> target, TPointEnum key) {
|
|
|
+ for(Entry<TPoint, Integer> entry : target.entrySet()) {
|
|
|
+ if($equals(entry.getKey(), key)) {
|
|
|
+ return entry;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fail("Entry not found: " + key);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
private TPoint[] shuffle(TPoint[] array) {
|
|
|
int n = array.length;
|