Expanded Unit tests to IntLists/Sets
Maps are sadly not possible. It will require writing templates for permutations effectively copying guavas Test library. So this will take a lot longer
This commit is contained in:
@@ -232,6 +232,7 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
||||
* @param index the index where to append the elements to
|
||||
* @param c the elements to append to the list
|
||||
* @throws IndexOutOfBoundsException if index is outside of the lists range
|
||||
* @throws NullPointerException if collection contains a null element
|
||||
*/
|
||||
@Override
|
||||
@Primitive
|
||||
@@ -239,6 +240,9 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
||||
if(c instanceof COLLECTION) return addAll(index, (COLLECTION KEY_GENERIC_TYPE)c);
|
||||
int add = c.size();
|
||||
if(add <= 0) return false;
|
||||
#if !TYPE_OBJECT
|
||||
if(c.contains(null)) throw new NullPointerException();
|
||||
#endif
|
||||
grow(size + add);
|
||||
if(index != size) System.arraycopy(data, index, data, index+add, size - index);
|
||||
size+=add;
|
||||
|
||||
+70
-20
@@ -210,6 +210,16 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
@Override
|
||||
public KEY_TYPE getDefaultMinValue() { return defaultMinNotFound; }
|
||||
|
||||
#else
|
||||
/** only used for primitives
|
||||
* @return null
|
||||
*/
|
||||
public CLASS_TYPE getDefaultMaxValue() { return null; }
|
||||
/** only used for primitives
|
||||
* @return null
|
||||
*/
|
||||
public CLASS_TYPE getDefaultMinValue() { return null; }
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public boolean add(KEY_TYPE o) {
|
||||
@@ -263,43 +273,53 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
@Override
|
||||
public KEY_TYPE lower(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findLowerNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMinNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMinValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE floor(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findFloorNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMinNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMinValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE higher(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findHigherNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMaxNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMaxValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE ceiling(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findCeilingNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMaxNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMaxValue();
|
||||
}
|
||||
|
||||
#if !TYPE_OBJECT
|
||||
@Override
|
||||
public CLASS_TYPE lower(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findLowerNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE floor(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findFloorNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE higher(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findHigherNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE ceiling(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findCeilingNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public void forEach(CONSUMER KEY_SUPER_GENERIC_TYPE action) {
|
||||
Objects.requireNonNull(action);
|
||||
@@ -1078,6 +1098,36 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
return highKeyOrNull(subHigher(e));
|
||||
}
|
||||
|
||||
#if !TYPE_OBJECT
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE lower(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subLower(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE floor(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subFloor(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE ceiling(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subCeiling(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE higher(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subHigher(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public KEY_TYPE POLL_FIRST_KEY() {
|
||||
Entry KEY_GENERIC_TYPE entry = subLowest();
|
||||
|
||||
+5
@@ -257,7 +257,12 @@ public class IMMUTABLE_HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERI
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
#if TYPE_OBJECT
|
||||
if(o == null) return containsNull;
|
||||
#else
|
||||
if(o == null) return false;
|
||||
if(o instanceof CLASS_TYPE && KEY_EQUALS(CLASS_TO_KEY(o), EMPTY_KEY_VALUE)) return containsNull;
|
||||
#endif
|
||||
int pos = HashUtil.mix(o.hashCode()) & mask;
|
||||
KEY_TYPE current = keys[pos];
|
||||
if(KEY_EQUALS_NULL(current)) return false;
|
||||
|
||||
+2
-2
@@ -171,10 +171,10 @@ public interface NAVIGABLE_SET KEY_GENERIC_TYPE extends NavigableSet<CLASS_TYPE>
|
||||
default CLASS_TYPE last() { return SORTED_SET.super.last(); }
|
||||
@Override
|
||||
@Deprecated
|
||||
public default CLASS_TYPE pollFirst() { return KEY_TO_OBJ(POLL_FIRST_KEY()); }
|
||||
public default CLASS_TYPE pollFirst() { return isEmpty() ? null : KEY_TO_OBJ(POLL_FIRST_KEY()); }
|
||||
@Override
|
||||
@Deprecated
|
||||
public default CLASS_TYPE pollLast() { return KEY_TO_OBJ(POLL_LAST_KEY()); }
|
||||
public default CLASS_TYPE pollLast() { return isEmpty() ? null : KEY_TO_OBJ(POLL_LAST_KEY()); }
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
|
||||
@@ -252,7 +252,12 @@ public class HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE imp
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
#if TYPE_OBJECT
|
||||
if(o == null) return containsNull;
|
||||
#else
|
||||
if(o == null) return false;
|
||||
if(o instanceof CLASS_TYPE && KEY_EQUALS(CLASS_TO_KEY(o), EMPTY_KEY_VALUE)) return containsNull;
|
||||
#endif
|
||||
int pos = HashUtil.mix(o.hashCode()) & mask;
|
||||
KEY_TYPE current = keys[pos];
|
||||
if(KEY_EQUALS_NULL(current)) return false;
|
||||
@@ -265,7 +270,12 @@ public class HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE imp
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
#if TYPE_OBJECT
|
||||
if(o == null) return (containsNull ? removeNullIndex() : false);
|
||||
#else
|
||||
if(o == null) return false;
|
||||
if(o instanceof CLASS_TYPE && KEY_EQUALS(CLASS_TO_KEY(o), EMPTY_KEY_VALUE)) return (containsNull ? removeNullIndex() : false);
|
||||
#endif
|
||||
int pos = HashUtil.mix(o.hashCode()) & mask;
|
||||
KEY_TYPE current = keys[pos];
|
||||
if(KEY_EQUALS_NULL(current)) return false;
|
||||
|
||||
+70
-20
@@ -210,6 +210,16 @@ public class RB_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
@Override
|
||||
public KEY_TYPE getDefaultMinValue() { return defaultMinNotFound; }
|
||||
|
||||
#else
|
||||
/** only used for primitives
|
||||
* @return null
|
||||
*/
|
||||
public CLASS_TYPE getDefaultMaxValue() { return null; }
|
||||
/** only used for primitives
|
||||
* @return null
|
||||
*/
|
||||
public CLASS_TYPE getDefaultMinValue() { return null; }
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public boolean add(KEY_TYPE o) {
|
||||
@@ -263,43 +273,53 @@ public class RB_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
@Override
|
||||
public KEY_TYPE lower(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findLowerNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMinNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMinValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE floor(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findFloorNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMinNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMinValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE higher(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findHigherNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMaxNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMaxValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KEY_TYPE ceiling(KEY_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findCeilingNode(e);
|
||||
#if TYPE_OBJECT
|
||||
return node != null ? node.key : null;
|
||||
#else
|
||||
return node != null ? node.key : defaultMaxNotFound;
|
||||
#endif
|
||||
return node != null ? node.key : getDefaultMaxValue();
|
||||
}
|
||||
|
||||
#if !TYPE_OBJECT
|
||||
@Override
|
||||
public CLASS_TYPE lower(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findLowerNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE floor(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findFloorNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE higher(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findHigherNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLASS_TYPE ceiling(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE node = findCeilingNode(e);
|
||||
return node != null ? node.key : null;
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public void forEach(CONSUMER KEY_SUPER_GENERIC_TYPE action) {
|
||||
Objects.requireNonNull(action);
|
||||
@@ -1139,6 +1159,36 @@ public class RB_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||
return highKeyOrNull(subHigher(e));
|
||||
}
|
||||
|
||||
#if !TYPE_OBJECT
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE lower(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subLower(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE floor(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subFloor(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE ceiling(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subCeiling(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public CLASS_TYPE higher(CLASS_TYPE e) {
|
||||
Entry KEY_GENERIC_TYPE entry = subHigher(e);
|
||||
return entry == null ? null : KEY_TO_OBJ(entry.key);
|
||||
}
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public KEY_TYPE POLL_FIRST_KEY() {
|
||||
Entry KEY_GENERIC_TYPE entry = subLowest();
|
||||
|
||||
Reference in New Issue
Block a user