49 |
|
impl); |
50 |
|
} |
51 |
|
|
52 |
+ |
Object bomb() { |
53 |
+ |
return new Object() { |
54 |
+ |
public boolean equals(Object x) { throw new AssertionError(); } |
55 |
+ |
public int hashCode() { throw new AssertionError(); } |
56 |
+ |
}; |
57 |
+ |
} |
58 |
+ |
|
59 |
|
/** Checks properties of empty collections. */ |
60 |
|
public void testEmptyMeansEmpty() { |
61 |
|
Collection c = impl.emptyCollection(); |
62 |
+ |
emptyMeansEmpty(c); |
63 |
+ |
|
64 |
+ |
if (c instanceof java.io.Serializable) |
65 |
+ |
emptyMeansEmpty(serialClone(c)); |
66 |
+ |
|
67 |
+ |
Collection clone = cloneableClone(c); |
68 |
+ |
if (clone != null) |
69 |
+ |
emptyMeansEmpty(clone); |
70 |
+ |
} |
71 |
+ |
|
72 |
+ |
void emptyMeansEmpty(Collection c) { |
73 |
|
assertTrue(c.isEmpty()); |
74 |
|
assertEquals(0, c.size()); |
75 |
|
assertEquals("[]", c.toString()); |
99 |
|
c.iterator().forEachRemaining(alwaysThrows); |
100 |
|
c.spliterator().forEachRemaining(alwaysThrows); |
101 |
|
assertFalse(c.spliterator().tryAdvance(alwaysThrows)); |
102 |
< |
if (Queue.class.isAssignableFrom(impl.klazz())) { |
102 |
> |
if (c.spliterator().hasCharacteristics(Spliterator.SIZED)) |
103 |
> |
assertEquals(0, c.spliterator().estimateSize()); |
104 |
> |
assertFalse(c.contains(bomb())); |
105 |
> |
assertFalse(c.remove(bomb())); |
106 |
> |
if (c instanceof Queue) { |
107 |
|
Queue q = (Queue) c; |
108 |
|
assertNull(q.peek()); |
109 |
|
assertNull(q.poll()); |
110 |
|
} |
111 |
< |
if (Deque.class.isAssignableFrom(impl.klazz())) { |
111 |
> |
if (c instanceof Deque) { |
112 |
|
Deque d = (Deque) c; |
113 |
|
assertNull(d.peekFirst()); |
114 |
|
assertNull(d.peekLast()); |
115 |
|
assertNull(d.pollFirst()); |
116 |
|
assertNull(d.pollLast()); |
117 |
|
assertIteratorExhausted(d.descendingIterator()); |
118 |
+ |
d.descendingIterator().forEachRemaining(alwaysThrows); |
119 |
+ |
assertFalse(d.removeFirstOccurrence(bomb())); |
120 |
+ |
assertFalse(d.removeLastOccurrence(bomb())); |
121 |
|
} |
122 |
|
} |
123 |
|
|
207 |
|
} |
208 |
|
}; |
209 |
|
try { |
210 |
+ |
assertFalse(survivors.contains(null)); |
211 |
|
try { |
212 |
|
boolean modified = c.removeIf(randomPredicate); |
213 |
|
if (!modified) { |
229 |
|
System.err.printf("n=%d%n", n); |
230 |
|
System.err.printf("accepts=%s%n", accepts); |
231 |
|
System.err.printf("rejects=%s%n", rejects); |
232 |
< |
System.err.println(survivors); |
232 |
> |
System.err.printf("survivors=%s%n", survivors); |
233 |
|
System.err.printf("threw=%s%n", threwAt.get()); |
234 |
|
throw ex; |
235 |
|
} |
245 |
|
for (int i = 0; i < n; i++) c.add(impl.makeElement(i)); |
246 |
|
ArrayList iterated = new ArrayList(); |
247 |
|
ArrayList iteratedForEachRemaining = new ArrayList(); |
248 |
+ |
ArrayList tryAdvanced = new ArrayList(); |
249 |
|
ArrayList spliterated = new ArrayList(); |
250 |
< |
ArrayList foreached = new ArrayList(); |
250 |
> |
ArrayList forEached = new ArrayList(); |
251 |
> |
ArrayList removeIfed = new ArrayList(); |
252 |
|
for (Object x : c) iterated.add(x); |
253 |
|
c.iterator().forEachRemaining(e -> iteratedForEachRemaining.add(e)); |
254 |
+ |
for (Spliterator s = c.spliterator(); |
255 |
+ |
s.tryAdvance(e -> tryAdvanced.add(e)); ) {} |
256 |
|
c.spliterator().forEachRemaining(e -> spliterated.add(e)); |
257 |
< |
c.forEach(e -> foreached.add(e)); |
257 |
> |
c.forEach(e -> forEached.add(e)); |
258 |
> |
c.removeIf(e -> { removeIfed.add(e); return false; }); |
259 |
|
boolean ordered = |
260 |
|
c.spliterator().hasCharacteristics(Spliterator.ORDERED); |
261 |
|
if (c instanceof List || c instanceof Deque) |
262 |
|
assertTrue(ordered); |
263 |
|
if (ordered) { |
264 |
|
assertEquals(iterated, iteratedForEachRemaining); |
265 |
+ |
assertEquals(iterated, tryAdvanced); |
266 |
|
assertEquals(iterated, spliterated); |
267 |
< |
assertEquals(iterated, foreached); |
267 |
> |
assertEquals(iterated, forEached); |
268 |
> |
assertEquals(iterated, removeIfed); |
269 |
|
} else { |
270 |
|
HashSet cset = new HashSet(c); |
271 |
|
assertEquals(cset, new HashSet(iterated)); |
272 |
|
assertEquals(cset, new HashSet(iteratedForEachRemaining)); |
273 |
+ |
assertEquals(cset, new HashSet(tryAdvanced)); |
274 |
|
assertEquals(cset, new HashSet(spliterated)); |
275 |
< |
assertEquals(cset, new HashSet(foreached)); |
275 |
> |
assertEquals(cset, new HashSet(forEached)); |
276 |
> |
assertEquals(cset, new HashSet(removeIfed)); |
277 |
|
} |
278 |
|
if (c instanceof Deque) { |
279 |
|
Deque d = (Deque) c; |