241 |
|
|
242 |
|
public void testRemoveIf() { |
243 |
|
Collection c = impl.emptyCollection(); |
244 |
+ |
boolean ordered = |
245 |
+ |
c.spliterator().hasCharacteristics(Spliterator.ORDERED); |
246 |
|
ThreadLocalRandom rnd = ThreadLocalRandom.current(); |
247 |
|
int n = rnd.nextInt(6); |
248 |
|
for (int i = 0; i < n; i++) c.add(impl.makeElement(i)); |
274 |
|
assertEquals(modified, accepts.size() > 0); |
275 |
|
assertEquals(modified, rejects.size() != n); |
276 |
|
assertEquals(accepts.size() + rejects.size(), n); |
277 |
< |
assertEquals(rejects, Arrays.asList(c.toArray())); |
277 |
> |
if (ordered) { |
278 |
> |
assertEquals(rejects, |
279 |
> |
Arrays.asList(c.toArray())); |
280 |
> |
} else { |
281 |
> |
assertEquals(new HashSet(rejects), |
282 |
> |
new HashSet(Arrays.asList(c.toArray()))); |
283 |
> |
} |
284 |
|
} catch (ArithmeticException ok) { |
285 |
|
assertNotNull(threwAt.get()); |
286 |
|
assertTrue(c.contains(threwAt.get())); |
301 |
|
assertTrue(c.containsAll(rejects)); |
302 |
|
assertTrue(c.containsAll(survivors)); |
303 |
|
assertTrue(survivors.containsAll(rejects)); |
304 |
< |
assertEquals(n - accepts.size(), c.size()); |
305 |
< |
for (Object x : accepts) assertFalse(c.contains(x)); |
304 |
> |
if (threwAt.get() == null) { |
305 |
> |
assertEquals(n - accepts.size(), c.size()); |
306 |
> |
for (Object x : accepts) assertFalse(c.contains(x)); |
307 |
> |
} else { |
308 |
> |
// Two acceptable behaviors: entire removeIf call is one |
309 |
> |
// transaction, or each element processed is one transaction. |
310 |
> |
assertTrue(n == c.size() || n == c.size() + accepts.size()); |
311 |
> |
int k = 0; |
312 |
> |
for (Object x : accepts) if (c.contains(x)) k++; |
313 |
> |
assertTrue(k == accepts.size() || k == 0); |
314 |
> |
} |
315 |
|
} catch (Throwable ex) { |
316 |
|
System.err.println(impl.klazz()); |
317 |
|
System.err.printf("c=%s%n", c); |