< 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,34 **** /* * @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 * @summary Run many tests on many Collection and Map implementations * @author Martin Buchholz * @modules java.base/java.util:open * @run main MOAT * @key randomness --- 24,34 ---- /* * @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 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,221 **** --- 210,224 ---- 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,237 **** --- 231,251 ---- 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,250 **** --- 255,302 ---- 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,970 **** --- 1013,1053 ---- 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,1636 **** --- 1710,1722 ---- 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 >