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:
2021-12-13 13:45:35 +01:00
parent caf2f22e9f
commit 18f6704ed7
11 changed files with 332 additions and 46 deletions
@@ -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;
@@ -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();
@@ -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;
@@ -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;
@@ -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();