--- jsr166/src/test/tck/Collection8Test.java 2016/10/25 01:32:55 1.5 +++ jsr166/src/test/tck/Collection8Test.java 2016/11/05 05:09:57 1.11 @@ -49,6 +49,13 @@ public class Collection8Test extends JSR impl); } + Object bomb() { + return new Object() { + public boolean equals(Object x) { throw new AssertionError(); } + public int hashCode() { throw new AssertionError(); } + }; + } + /** Checks properties of empty collections. */ public void testEmptyMeansEmpty() { Collection c = impl.emptyCollection(); @@ -81,18 +88,25 @@ public class Collection8Test extends JSR c.iterator().forEachRemaining(alwaysThrows); c.spliterator().forEachRemaining(alwaysThrows); assertFalse(c.spliterator().tryAdvance(alwaysThrows)); - if (Queue.class.isAssignableFrom(impl.klazz())) { + if (c.spliterator().hasCharacteristics(Spliterator.SIZED)) + assertEquals(0, c.spliterator().estimateSize()); + assertFalse(c.contains(bomb())); + assertFalse(c.remove(bomb())); + if (c instanceof Queue) { Queue q = (Queue) c; assertNull(q.peek()); assertNull(q.poll()); } - if (Deque.class.isAssignableFrom(impl.klazz())) { + if (c instanceof Deque) { Deque d = (Deque) c; assertNull(d.peekFirst()); assertNull(d.peekLast()); assertNull(d.pollFirst()); assertNull(d.pollLast()); assertIteratorExhausted(d.descendingIterator()); + d.descendingIterator().forEachRemaining(alwaysThrows); + assertFalse(d.removeFirstOccurrence(bomb())); + assertFalse(d.removeLastOccurrence(bomb())); } } @@ -105,6 +119,10 @@ public class Collection8Test extends JSR () -> c.retainAll(null), () -> c.removeAll(null), () -> c.removeIf(null), + () -> c.forEach(null), + () -> c.iterator().forEachRemaining(null), + () -> c.spliterator().forEachRemaining(null), + () -> c.spliterator().tryAdvance(null), () -> c.toArray(null)); if (!impl.permitsNulls()) { @@ -128,7 +146,8 @@ public class Collection8Test extends JSR () -> d.addLast(null), () -> d.offerFirst(null), () -> d.offerLast(null), - () -> d.push(null)); + () -> d.push(null), + () -> d.descendingIterator().forEachRemaining(null)); } } @@ -177,28 +196,32 @@ public class Collection8Test extends JSR } }; try { - boolean modified = c.removeIf(randomPredicate); - if (!modified) { - assertNull(threwAt.get()); - assertEquals(n, rejects.size()); - assertEquals(0, accepts.size()); - } - } catch (ArithmeticException ok) {} - survivors.removeAll(accepts); - if (n - accepts.size() != c.size()) { + assertFalse(survivors.contains(null)); + try { + boolean modified = c.removeIf(randomPredicate); + if (!modified) { + assertNull(threwAt.get()); + assertEquals(n, rejects.size()); + assertEquals(0, accepts.size()); + } + } catch (ArithmeticException ok) {} + survivors.removeAll(accepts); + assertEquals(n - accepts.size(), c.size()); + assertTrue(c.containsAll(survivors)); + assertTrue(survivors.containsAll(rejects)); + for (Object x : accepts) assertFalse(c.contains(x)); + if (threwAt.get() == null) + assertEquals(accepts.size() + rejects.size(), n); + } catch (Throwable ex) { System.err.println(impl.klazz()); - System.err.println(c); - System.err.println(accepts); - System.err.println(rejects); - System.err.println(survivors); - System.err.println(threwAt.get()); - } - assertEquals(n - accepts.size(), c.size()); - assertTrue(c.containsAll(survivors)); - assertTrue(survivors.containsAll(rejects)); - for (Object x : accepts) assertFalse(c.contains(x)); - if (threwAt.get() == null) - assertEquals(accepts.size() + rejects.size(), n); + System.err.printf("c=%s%n", c); + System.err.printf("n=%d%n", n); + System.err.printf("accepts=%s%n", accepts); + System.err.printf("rejects=%s%n", rejects); + System.err.printf("survivors=%s%n", survivors); + System.err.printf("threw=%s%n", threwAt.get()); + throw ex; + } } /**