< prev index next >
test/jdk/java/util/Collection/MOAT.java
Print this page
rev 48431 : 8193128: Reduce number of implementation classes returned by List/Set/Map.of()
8191418: List.of().indexOf(null) doesn't throw NullPointerException
Reviewed-by: smarks, jrose, martin, plevart
@@ -24,11 +24,11 @@
/*
* @test
* @bug 6207984 6272521 6192552 6269713 6197726 6260652 5073546 4137464
* 4155650 4216399 4294891 6282555 6318622 6355327 6383475 6420753
* 6431845 4802633 6570566 6570575 6570631 6570924 6691185 6691215
- * 4802647 7123424 8024709
+ * 4802647 7123424 8024709 8193128
* @summary Run many tests on many Collection and Map implementations
* @author Martin Buchholz
* @modules java.base/java.util:open
* @run main MOAT
* @key randomness
@@ -210,12 +210,15 @@
testMap(singletonMap);
testImmutableMap(singletonMap);
// Immutable List
testEmptyList(List.of());
+ testEmptyList(List.of().subList(0,0));
testListMutatorsAlwaysThrow(List.of());
+ testListMutatorsAlwaysThrow(List.<Integer>of().subList(0,0));
testEmptyListMutatorsAlwaysThrow(List.of());
+ testEmptyListMutatorsAlwaysThrow(List.<Integer>of().subList(0,0));
for (List<Integer> list : Arrays.asList(
List.<Integer>of(),
List.of(1),
List.of(1, 2),
List.of(1, 2, 3),
@@ -228,10 +231,21 @@
List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
List.of(integerArray))) {
testCollection(list);
testImmutableList(list);
testListMutatorsAlwaysThrow(list);
+ if (list.size() >= 1) {
+ // test subLists
+ List<Integer> headList = list.subList(0, list.size() - 1);
+ List<Integer> tailList = list.subList(1, list.size());
+ testCollection(headList);
+ testCollection(tailList);
+ testImmutableList(headList);
+ testImmutableList(tailList);
+ testListMutatorsAlwaysThrow(headList);
+ testListMutatorsAlwaysThrow(tailList);
+ }
}
List<Integer> listCopy = List.copyOf(Arrays.asList(1, 2, 3));
testCollection(listCopy);
testImmutableList(listCopy);
@@ -241,10 +255,48 @@
equal(listCollected, List.of(1, 2, 3));
testCollection(listCollected);
testImmutableList(listCollected);
testListMutatorsAlwaysThrow(listCollected);
+ // List indexOf / lastIndexOf
+
+ // 0 element
+ System.out.println("testListIndexOf size 0");
+ testListIndexOf(-1, -1);
+
+ System.out.println("testListIndexOf size 1");
+ testListIndexOf(-1, -1, 0);
+ testListIndexOf(0, 0, 1);
+
+ System.out.println("testListIndexOf size 2");
+ testListIndexOf(-1, -1, 0, 0);
+ testListIndexOf(0, 0, 1, 0);
+ testListIndexOf(0, 1, 1, 1);
+ testListIndexOf(1, 1, 0, 1);
+
+
+ System.out.println("testListIndexOf size 3");
+ testListIndexOf(-1, -1, 0, 0, 0);
+ testListIndexOf(0, 0, 1, 0, 0);
+ testListIndexOf(0, 1, 1, 1, 0);
+ testListIndexOf(1, 2, 0, 1, 1);
+ testListIndexOf(2, 2, 0, 0, 1);
+
+ System.out.println("testListIndexOf size N");
+ testListIndexOf(-1, -1, 0, 0, 0, 0, 0, 0, 0);
+ testListIndexOf(2, 6, 0, 0, 1, 0, 1, 0, 1);
+ testListIndexOf(4, 4, 0, 0, 0, 0, 1, 0, 0);
+ testListIndexOf(0, 6, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 7, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(0, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ testListIndexOf(12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+ testListIndexOf(-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
// Immutable Set
testEmptySet(Set.of());
testCollMutatorsAlwaysThrow(Set.of());
testEmptyCollMutatorsAlwaysThrow(Set.of());
for (Set<Integer> set : Arrays.asList(
@@ -961,10 +1013,41 @@
q.remove(i);
equal(it.next(), 1);
equal(it.next(), 4);
}
+ // for any array of integer values, check that the result of lastIndexOf(1)
+ // and indexOf(1) match assumptions for all types of List<Integer> we can
+ // construct
+ private static void testListIndexOf(final int index,
+ final int lastIndex,
+ final Integer ... values) {
+ if (values.length == 0) {
+ checkListIndexOf(emptyList(), index, lastIndex);
+ } else if (values.length == 1) {
+ checkListIndexOf(singletonList(values[0]), index, lastIndex);
+ checkListIndexOf(nCopies(25, values[0]), index, lastIndex == 0 ? 24 : -1);
+ }
+ List<Integer> l = List.of(values);
+ checkListIndexOf(l, index, lastIndex);
+ checkListIndexOf(Arrays.asList(values), index, lastIndex);
+ checkListIndexOf(new ArrayList(l), index, lastIndex);
+ checkListIndexOf(new LinkedList(l), index, lastIndex);
+ checkListIndexOf(new Vector(l), index, lastIndex);
+ checkListIndexOf(new CopyOnWriteArrayList(l), index, lastIndex);
+ }
+
+ private static void checkListIndexOf(final List<Integer> list,
+ final int index,
+ final int lastIndex) {
+ String msg = list.getClass().toString();
+ equal(list.indexOf(1), index, msg);
+ equal(list.lastIndexOf(1), lastIndex, msg);
+ equal(list.subList(0, list.size()).indexOf(1), index, msg);
+ equal(list.subList(0, list.size()).lastIndexOf(1), lastIndex, msg);
+ }
+
private static void testList(final List<Integer> l) {
//----------------------------------------------------------------
// 4802633: (coll) AbstractList.addAll(-1,emptyCollection)
// doesn't throw IndexOutOfBoundsException
//----------------------------------------------------------------
@@ -1627,10 +1710,13 @@
static void unexpected(Throwable t) { failed++; t.printStackTrace(); }
static void check(boolean cond) { if (cond) pass(); else fail(); }
static void equal(Object x, Object y) {
if (x == null ? y == null : x.equals(y)) pass();
else {System.out.println(x + " not equal to " + y); fail();}}
+ static void equal(Object x, Object y, String msg) {
+ if (x == null ? y == null : x.equals(y)) pass();
+ else {System.out.println(x + " not equal to " + y + " : " + msg); fail();}}
static void equal2(Object x, Object y) {equal(x, y); equal(y, x);}
public static void main(String[] args) throws Throwable {
try { realMain(args); } catch (Throwable t) { unexpected(t); }
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
< prev index next >