ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CollectionTest.java
(Generate patch)

Comparing jsr166/src/test/tck/CollectionTest.java (file contents):
Revision 1.5 by jsr166, Mon Oct 17 02:47:09 2016 UTC vs.
Revision 1.8 by jsr166, Sun Oct 23 22:11:25 2016 UTC

# Line 5 | Line 5
5   * http://creativecommons.org/publicdomain/zero/1.0/
6   */
7  
8 + import java.util.ArrayList;
9   import java.util.Collection;
10   import java.util.Deque;
11   import java.util.NoSuchElementException;
12   import java.util.Queue;
13 + import java.util.concurrent.ThreadLocalRandom;
14 + import java.util.concurrent.atomic.AtomicReference;
15   import java.util.function.Consumer;
16 + import java.util.function.Predicate;
17  
18   import junit.framework.Test;
19  
# Line 41 | Line 45 | public class CollectionTest extends JSR1
45          assertTrue(c.isEmpty());
46          assertEquals(0, c.size());
47          assertEquals("[]", c.toString());
48 <        assertEquals(0, c.toArray().length);
48 >        {
49 >            Object[] a = c.toArray();
50 >            assertEquals(0, a.length);
51 >            assertSame(Object[].class, a.getClass());
52 >        }
53          {
54              Object[] a = new Object[0];
55              assertSame(a, c.toArray(a));
56          }
57 +        {
58 +            Integer[] a = new Integer[0];
59 +            assertSame(a, c.toArray(a));
60 +        }
61 +        {
62 +            Integer[] a = { 1, 2, 3};
63 +            assertSame(a, c.toArray(a));
64 +            assertNull(a[0]);
65 +            assertSame(2, a[1]);
66 +            assertSame(3, a[2]);
67 +        }
68          assertIteratorExhausted(c.iterator());
69          Consumer alwaysThrows = (e) -> { throw new AssertionError(); };
70          c.forEach(alwaysThrows);
# Line 75 | Line 94 | public class CollectionTest extends JSR1
94              () -> c.containsAll(null),
95              () -> c.retainAll(null),
96              () -> c.removeAll(null),
97 <            () -> c.removeIf(null));
97 >            () -> c.removeIf(null),
98 >            () -> c.toArray(null));
99  
100          if (!impl.permitsNulls()) {
101              assertThrows(
# Line 128 | Line 148 | public class CollectionTest extends JSR1
148          }
149      }
150  
151 +    public void testRemoveIf() {
152 +        Collection c = impl.emptyCollection();
153 +        ThreadLocalRandom rnd = ThreadLocalRandom.current();
154 +        int n = rnd.nextInt(6);
155 +        for (int i = 0; i < n; i++) c.add(impl.makeElement(i));
156 +        AtomicReference threwAt = new AtomicReference(null);
157 +        ArrayList survivors = new ArrayList(c);
158 +        ArrayList accepts = new ArrayList();
159 +        ArrayList rejects = new ArrayList();
160 +        Predicate randomPredicate = (e) -> {
161 +            assertNull(threwAt.get());
162 +            switch (rnd.nextInt(3)) {
163 +            case 0: accepts.add(e); return true;
164 +            case 1: rejects.add(e); return false;
165 +            case 2: threwAt.set(e); throw new ArithmeticException();
166 +            default: throw new AssertionError();
167 +            }
168 +        };
169 +        try {
170 +            boolean modified = c.removeIf(randomPredicate);
171 +            if (!modified) {
172 +                assertNull(threwAt.get());
173 +                assertEquals(n, rejects.size());
174 +                assertEquals(0, accepts.size());
175 +            }
176 +        } catch (ArithmeticException ok) {}
177 +        survivors.removeAll(accepts);
178 +        if (n - accepts.size() != c.size()) {
179 +            System.err.println(impl.klazz());
180 +            System.err.println(c);
181 +            System.err.println(accepts);
182 +            System.err.println(rejects);
183 +            System.err.println(survivors);
184 +            System.err.println(threwAt.get());
185 +        }
186 +        assertEquals(n - accepts.size(), c.size());
187 +        assertTrue(c.containsAll(survivors));
188 +        assertTrue(survivors.containsAll(rejects));
189 +        for (Object x : accepts) assertFalse(c.contains(x));
190 +        if (threwAt.get() == null)
191 +            assertEquals(accepts.size() + rejects.size(), n);
192 +    }
193 +
194   //     public void testCollectionDebugFail() {
195   //         fail(impl.klazz().getSimpleName());
196   //     }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines