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.8 by jsr166, Sun Oct 23 22:11:25 2016 UTC vs.
Revision 1.9 by jsr166, Mon Oct 24 22:45:50 2016 UTC

# Line 7 | Line 7
7  
8   import java.util.ArrayList;
9   import java.util.Collection;
10 + import java.util.Collections;
11   import java.util.Deque;
12 + import java.util.HashSet;
13 + import java.util.Iterator;
14 + import java.util.List;
15   import java.util.NoSuchElementException;
16   import java.util.Queue;
17 + import java.util.Spliterator;
18   import java.util.concurrent.ThreadLocalRandom;
19   import java.util.concurrent.atomic.AtomicReference;
20   import java.util.function.Consumer;
# Line 191 | Line 196 | public class CollectionTest extends JSR1
196              assertEquals(accepts.size() + rejects.size(), n);
197      }
198  
199 +    /**
200 +     * Various ways of traversing a collection yield same elements
201 +     */
202 +    public void testIteratorEquivalence() {
203 +        Collection c = impl.emptyCollection();
204 +        ThreadLocalRandom rnd = ThreadLocalRandom.current();
205 +        int n = rnd.nextInt(6);
206 +        for (int i = 0; i < n; i++) c.add(impl.makeElement(i));
207 +        ArrayList iterated = new ArrayList();
208 +        ArrayList iteratedForEachRemaining = new ArrayList();
209 +        ArrayList spliterated = new ArrayList();
210 +        ArrayList foreached = new ArrayList();
211 +        for (Object x : c) iterated.add(x);
212 +        c.iterator().forEachRemaining(e -> iteratedForEachRemaining.add(e));
213 +        c.spliterator().forEachRemaining(e -> spliterated.add(e));
214 +        c.forEach(e -> foreached.add(e));
215 +        boolean ordered =
216 +            c.spliterator().hasCharacteristics(Spliterator.ORDERED);
217 +        if (c instanceof List || c instanceof Deque)
218 +            assertTrue(ordered);
219 +        if (ordered) {
220 +            assertEquals(iterated, iteratedForEachRemaining);
221 +            assertEquals(iterated, spliterated);
222 +            assertEquals(iterated, foreached);
223 +        } else {
224 +            HashSet cset = new HashSet(c);
225 +            assertEquals(cset, new HashSet(iterated));
226 +            assertEquals(cset, new HashSet(iteratedForEachRemaining));
227 +            assertEquals(cset, new HashSet(spliterated));
228 +            assertEquals(cset, new HashSet(foreached));
229 +        }
230 +        if (c instanceof Deque) {
231 +            Deque d = (Deque) c;
232 +            ArrayList descending = new ArrayList();
233 +            ArrayList descendingForEachRemaining = new ArrayList();
234 +            for (Iterator it = d.descendingIterator(); it.hasNext(); )
235 +                descending.add(it.next());
236 +            d.descendingIterator().forEachRemaining(
237 +                e -> descendingForEachRemaining.add(e));
238 +            Collections.reverse(descending);
239 +            Collections.reverse(descendingForEachRemaining);
240 +            assertEquals(iterated, descending);
241 +            assertEquals(iterated, descendingForEachRemaining);
242 +        }
243 +    }
244 +
245 +    /**
246 +     * Calling Iterator#remove() after Iterator#forEachRemaining
247 +     * should remove last element
248 +     */
249 +    public void testRemoveAfterForEachRemaining() {
250 +        Collection c = impl.emptyCollection();
251 +        ThreadLocalRandom rnd = ThreadLocalRandom.current();
252 +        {
253 +            int n = 3 + rnd.nextInt(2);
254 +            for (int i = 0; i < n; i++) c.add(impl.makeElement(i));
255 +            Iterator it = c.iterator();
256 +            assertTrue(it.hasNext());
257 +            assertEquals(impl.makeElement(0), it.next());
258 +            assertTrue(it.hasNext());
259 +            assertEquals(impl.makeElement(1), it.next());
260 +            it.forEachRemaining((e) -> {});
261 +            it.remove();
262 +            assertEquals(n - 1, c.size());
263 +            for (int i = 0; i < n - 1; i++)
264 +                assertTrue(c.contains(impl.makeElement(i)));
265 +            assertFalse(c.contains(impl.makeElement(n - 1)));
266 +        }
267 +        if (c instanceof Deque) {
268 +            Deque d = (Deque) impl.emptyCollection();
269 +            int n = 3 + rnd.nextInt(2);
270 +            for (int i = 0; i < n; i++) d.add(impl.makeElement(i));
271 +            Iterator it = d.descendingIterator();
272 +            assertTrue(it.hasNext());
273 +            assertEquals(impl.makeElement(n - 1), it.next());
274 +            assertTrue(it.hasNext());
275 +            assertEquals(impl.makeElement(n - 2), it.next());
276 +            it.forEachRemaining((e) -> {});
277 +            it.remove();
278 +            assertEquals(n - 1, d.size());
279 +            for (int i = 1; i < n; i++)
280 +                assertTrue(d.contains(impl.makeElement(i)));
281 +            assertFalse(d.contains(impl.makeElement(0)));
282 +        }
283 +    }
284 +
285   //     public void testCollectionDebugFail() {
286   //         fail(impl.klazz().getSimpleName());
287   //     }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines