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.2 by jsr166, Mon Oct 17 00:57:45 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 40 | 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 <        c.forEach((e) -> { throw new AssertionError(); });
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);
71 >        c.iterator().forEachRemaining(alwaysThrows);
72 >        c.spliterator().forEachRemaining(alwaysThrows);
73 >        assertFalse(c.spliterator().tryAdvance(alwaysThrows));
74          if (Queue.class.isAssignableFrom(impl.klazz())) {
75              Queue q = (Queue) c;
76              assertNull(q.peek());
# Line 57 | Line 82 | public class CollectionTest extends JSR1
82              assertNull(d.peekLast());
83              assertNull(d.pollFirst());
84              assertNull(d.pollLast());
85 +            assertIteratorExhausted(d.descendingIterator());
86          }
87      }
88  
# Line 68 | 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 97 | Line 124 | public class CollectionTest extends JSR1
124  
125      public void testNoSuchElementExceptions() {
126          Collection c = impl.emptyCollection();
127 +        assertThrows(
128 +            NoSuchElementException.class,
129 +            () -> c.iterator().next());
130  
131          if (Queue.class.isAssignableFrom(impl.klazz())) {
132              Queue q = (Queue) c;
# Line 113 | Line 143 | public class CollectionTest extends JSR1
143                  () -> d.getLast(),
144                  () -> d.removeFirst(),
145                  () -> d.removeLast(),
146 <                () -> d.pop());
146 >                () -> d.pop(),
147 >                () -> d.descendingIterator().next());
148          }
149      }
150  
151 <    // public void testCollectionDebugFail() { fail(); }
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 > //     }
197   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines