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

Comparing jsr166/src/test/tck/ArrayDequeTest.java (file contents):
Revision 1.2 by dl, Wed Sep 14 23:50:31 2005 UTC vs.
Revision 1.24 by jsr166, Tue May 31 16:16:23 2011 UTC

# Line 1 | Line 1
1   /*
2   * Written by Doug Lea with assistance from members of JCP JSR-166
3   * Expert Group and released to the public domain, as explained at
4 < * http://creativecommons.org/licenses/publicdomain
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7   import junit.framework.*;
8 < import java.util.*;
9 < import java.util.concurrent.*;
8 > import java.util.Arrays;
9 > import java.util.ArrayDeque;
10 > import java.util.Collection;
11 > import java.util.Deque;
12 > import java.util.Iterator;
13 > import java.util.NoSuchElementException;
14 > import java.util.Queue;
15 > import java.util.Random;
16  
17   public class ArrayDequeTest extends JSR166TestCase {
18      public static void main(String[] args) {
19 <        junit.textui.TestRunner.run (suite());  
19 >        junit.textui.TestRunner.run(suite());
20      }
21  
22      public static Test suite() {
23 <        return new TestSuite(ArrayDequeTest.class);
23 >        return new TestSuite(ArrayDequeTest.class);
24      }
25  
26      /**
27 <     * Create a queue of given size containing consecutive
27 >     * Create a deque of given size containing consecutive
28       * Integers 0 ... n.
29       */
30 <    private ArrayDeque populatedDeque(int n) {
31 <        ArrayDeque q = new ArrayDeque();
30 >    private ArrayDeque<Integer> populatedDeque(int n) {
31 >        ArrayDeque<Integer> q = new ArrayDeque<Integer>();
32          assertTrue(q.isEmpty());
33 <        for(int i = 0; i < n; ++i)
34 <            assertTrue(q.offerLast(new Integer(i)));
33 >        for (int i = 0; i < n; ++i)
34 >            assertTrue(q.offerLast(new Integer(i)));
35          assertFalse(q.isEmpty());
36 <        assertEquals(n, q.size());
36 >        assertEquals(n, q.size());
37          return q;
38      }
39 <
39 >
40      /**
41 <     * new queue is empty
41 >     * new deque is empty
42       */
43      public void testConstructor1() {
44          assertEquals(0, new ArrayDeque().size());
# Line 45 | Line 51 | public class ArrayDequeTest extends JSR1
51          try {
52              ArrayDeque q = new ArrayDeque((Collection)null);
53              shouldThrow();
54 <        }
49 <        catch (NullPointerException success) {}
54 >        } catch (NullPointerException success) {}
55      }
56  
57      /**
58 <     * Queue contains all elements of collection used to initialize
58 >     * Initializing from Collection of null elements throws NPE
59 >     */
60 >    public void testConstructor4() {
61 >        try {
62 >            Integer[] ints = new Integer[SIZE];
63 >            ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
64 >            shouldThrow();
65 >        } catch (NullPointerException success) {}
66 >    }
67  
68 +    /**
69 +     * Initializing from Collection with some null elements throws NPE
70       */
71 <    public void testConstructor6() {
71 >    public void testConstructor5() {
72          try {
73              Integer[] ints = new Integer[SIZE];
74 <            for (int i = 0; i < SIZE; ++i)
74 >            for (int i = 0; i < SIZE-1; ++i)
75                  ints[i] = new Integer(i);
76              ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
77 <            for (int i = 0; i < SIZE; ++i)
78 <                assertEquals(ints[i], q.pollFirst());
79 <        }
80 <        finally {}
77 >            shouldThrow();
78 >        } catch (NullPointerException success) {}
79 >    }
80 >
81 >    /**
82 >     * Deque contains all elements of collection used to initialize
83 >     */
84 >    public void testConstructor6() {
85 >        Integer[] ints = new Integer[SIZE];
86 >        for (int i = 0; i < SIZE; ++i)
87 >            ints[i] = new Integer(i);
88 >        ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
89 >        for (int i = 0; i < SIZE; ++i)
90 >            assertEquals(ints[i], q.pollFirst());
91      }
92  
93      /**
# Line 98 | Line 123 | public class ArrayDequeTest extends JSR1
123       * push(null) throws NPE
124       */
125      public void testPushNull() {
126 <        try {
126 >        try {
127              ArrayDeque q = new ArrayDeque(1);
128              q.push(null);
129              shouldThrow();
130 <        } catch (NullPointerException success) { }  
130 >        } catch (NullPointerException success) {}
131      }
132  
133      /**
134 <     * peekFirst returns element inserted with push
134 >     * peekFirst() returns element inserted with push
135       */
136      public void testPush() {
137          ArrayDeque q = populatedDeque(3);
138          q.pollLast();
139 <        q.push(four);
140 <        assertEquals(four,q.peekFirst());
141 <    }  
139 >        q.push(four);
140 >        assertSame(four, q.peekFirst());
141 >    }
142  
143      /**
144 <     *  pop removes next element, or throws NSEE if empty
144 >     * pop() removes next element, or throws NSEE if empty
145       */
146      public void testPop() {
147          ArrayDeque q = populatedDeque(SIZE);
148          for (int i = 0; i < SIZE; ++i) {
149 <            assertEquals(i, ((Integer)q.pop()).intValue());
149 >            assertEquals(i, q.pop());
150          }
151          try {
152              q.pop();
153              shouldThrow();
154 <        } catch (NoSuchElementException success){
130 <        }  
154 >        } catch (NoSuchElementException success) {}
155      }
156  
157      /**
158       * offer(null) throws NPE
159       */
160 +    public void testOfferNull() {
161 +        try {
162 +            ArrayDeque q = new ArrayDeque();
163 +            q.offer(null);
164 +            shouldThrow();
165 +        } catch (NullPointerException success) {}
166 +    }
167 +
168 +    /**
169 +     * offerFirst(null) throws NPE
170 +     */
171      public void testOfferFirstNull() {
172 <        try {
172 >        try {
173              ArrayDeque q = new ArrayDeque();
174              q.offerFirst(null);
175              shouldThrow();
176 <        } catch (NullPointerException success) {
177 <        }  
176 >        } catch (NullPointerException success) {}
177 >    }
178 >
179 >    /**
180 >     * offerLast(null) throws NPE
181 >     */
182 >    public void testOfferLastNull() {
183 >        try {
184 >            ArrayDeque q = new ArrayDeque();
185 >            q.offerLast(null);
186 >            shouldThrow();
187 >        } catch (NullPointerException success) {}
188      }
189  
190      /**
191 <     * OfferFirst succeeds
191 >     * offer(x) succeeds
192 >     */
193 >    public void testOffer() {
194 >        ArrayDeque q = new ArrayDeque();
195 >        assertTrue(q.offer(zero));
196 >        assertTrue(q.offer(one));
197 >        assertSame(zero, q.peekFirst());
198 >        assertSame(one, q.peekLast());
199 >    }
200 >
201 >    /**
202 >     * offerFirst(x) succeeds
203       */
204      public void testOfferFirst() {
205          ArrayDeque q = new ArrayDeque();
206 <        assertTrue(q.offerFirst(new Integer(0)));
207 <        assertTrue(q.offerFirst(new Integer(1)));
206 >        assertTrue(q.offerFirst(zero));
207 >        assertTrue(q.offerFirst(one));
208 >        assertSame(one, q.peekFirst());
209 >        assertSame(zero, q.peekLast());
210      }
211  
212      /**
213 <     * OfferLast succeeds
213 >     * offerLast(x) succeeds
214       */
215      public void testOfferLast() {
216          ArrayDeque q = new ArrayDeque();
217 <        assertTrue(q.offerLast(new Integer(0)));
218 <        assertTrue(q.offerLast(new Integer(1)));
217 >        assertTrue(q.offerLast(zero));
218 >        assertTrue(q.offerLast(one));
219 >        assertSame(zero, q.peekFirst());
220 >        assertSame(one, q.peekLast());
221 >    }
222 >
223 >    /**
224 >     * add(null) throws NPE
225 >     */
226 >    public void testAddNull() {
227 >        try {
228 >            ArrayDeque q = new ArrayDeque();
229 >            q.add(null);
230 >            shouldThrow();
231 >        } catch (NullPointerException success) {}
232 >    }
233 >
234 >    /**
235 >     * addFirst(null) throws NPE
236 >     */
237 >    public void testAddFirstNull() {
238 >        try {
239 >            ArrayDeque q = new ArrayDeque();
240 >            q.addFirst(null);
241 >            shouldThrow();
242 >        } catch (NullPointerException success) {}
243      }
244  
245      /**
246 <     * add succeeds
246 >     * addLast(null) throws NPE
247 >     */
248 >    public void testAddLastNull() {
249 >        try {
250 >            ArrayDeque q = new ArrayDeque();
251 >            q.addLast(null);
252 >            shouldThrow();
253 >        } catch (NullPointerException success) {}
254 >    }
255 >
256 >    /**
257 >     * add(x) succeeds
258       */
259      public void testAdd() {
260          ArrayDeque q = new ArrayDeque();
261 <        for (int i = 0; i < SIZE; ++i) {
262 <            assertEquals(i, q.size());
263 <            assertTrue(q.add(new Integer(i)));
264 <        }
261 >        assertTrue(q.add(zero));
262 >        assertTrue(q.add(one));
263 >        assertSame(zero, q.peekFirst());
264 >        assertSame(one, q.peekLast());
265 >    }
266 >
267 >    /**
268 >     * addFirst(x) succeeds
269 >     */
270 >    public void testAddFirst() {
271 >        ArrayDeque q = new ArrayDeque();
272 >        q.addFirst(zero);
273 >        q.addFirst(one);
274 >        assertSame(one, q.peekFirst());
275 >        assertSame(zero, q.peekLast());
276 >    }
277 >
278 >    /**
279 >     * addLast(x) succeeds
280 >     */
281 >    public void testAddLast() {
282 >        ArrayDeque q = new ArrayDeque();
283 >        q.addLast(zero);
284 >        q.addLast(one);
285 >        assertSame(zero, q.peekFirst());
286 >        assertSame(one, q.peekLast());
287      }
288  
289      /**
# Line 179 | Line 294 | public class ArrayDequeTest extends JSR1
294              ArrayDeque q = new ArrayDeque();
295              q.addAll(null);
296              shouldThrow();
297 <        }
183 <        catch (NullPointerException success) {}
297 >        } catch (NullPointerException success) {}
298      }
299  
300      /**
301 <     * Queue contains all elements, in traversal order, of successful addAll
301 >     * addAll of a collection with null elements throws NPE
302       */
303 <    public void testAddAll5() {
303 >    public void testAddAll2() {
304          try {
305 <            Integer[] empty = new Integer[0];
305 >            ArrayDeque q = new ArrayDeque();
306              Integer[] ints = new Integer[SIZE];
307 <            for (int i = 0; i < SIZE; ++i)
308 <                ints[i] = new Integer(i);
307 >            q.addAll(Arrays.asList(ints));
308 >            shouldThrow();
309 >        } catch (NullPointerException success) {}
310 >    }
311 >
312 >    /**
313 >     * addAll of a collection with any null elements throws NPE after
314 >     * possibly adding some elements
315 >     */
316 >    public void testAddAll3() {
317 >        try {
318              ArrayDeque q = new ArrayDeque();
319 <            assertFalse(q.addAll(Arrays.asList(empty)));
320 <            assertTrue(q.addAll(Arrays.asList(ints)));
321 <            for (int i = 0; i < SIZE; ++i)
322 <                assertEquals(ints[i], q.pollFirst());
323 <        }
324 <        finally {}
319 >            Integer[] ints = new Integer[SIZE];
320 >            for (int i = 0; i < SIZE-1; ++i)
321 >                ints[i] = new Integer(i);
322 >            q.addAll(Arrays.asList(ints));
323 >            shouldThrow();
324 >        } catch (NullPointerException success) {}
325      }
326  
327      /**
328 <     *  pollFirst succeeds unless empty
328 >     * Deque contains all elements, in traversal order, of successful addAll
329 >     */
330 >    public void testAddAll5() {
331 >        Integer[] empty = new Integer[0];
332 >        Integer[] ints = new Integer[SIZE];
333 >        for (int i = 0; i < SIZE; ++i)
334 >            ints[i] = new Integer(i);
335 >        ArrayDeque q = new ArrayDeque();
336 >        assertFalse(q.addAll(Arrays.asList(empty)));
337 >        assertTrue(q.addAll(Arrays.asList(ints)));
338 >        for (int i = 0; i < SIZE; ++i)
339 >            assertEquals(ints[i], q.pollFirst());
340 >    }
341 >
342 >    /**
343 >     * pollFirst() succeeds unless empty
344       */
345      public void testPollFirst() {
346          ArrayDeque q = populatedDeque(SIZE);
347          for (int i = 0; i < SIZE; ++i) {
348 <            assertEquals(i, ((Integer)q.pollFirst()).intValue());
348 >            assertEquals(i, q.pollFirst());
349          }
350 <        assertNull(q.pollFirst());
350 >        assertNull(q.pollFirst());
351      }
352  
353      /**
354 <     *  pollLast succeeds unless empty
354 >     * pollLast() succeeds unless empty
355       */
356      public void testPollLast() {
357          ArrayDeque q = populatedDeque(SIZE);
358          for (int i = SIZE-1; i >= 0; --i) {
359 <            assertEquals(i, ((Integer)q.pollLast()).intValue());
359 >            assertEquals(i, q.pollLast());
360          }
361 <        assertNull(q.pollLast());
361 >        assertNull(q.pollLast());
362      }
363  
364      /**
365 <     *  poll succeeds unless empty
365 >     * poll() succeeds unless empty
366       */
367      public void testPoll() {
368          ArrayDeque q = populatedDeque(SIZE);
369          for (int i = 0; i < SIZE; ++i) {
370 <            assertEquals(i, ((Integer)q.poll()).intValue());
370 >            assertEquals(i, q.poll());
371          }
372 <        assertNull(q.poll());
372 >        assertNull(q.poll());
373      }
374  
375      /**
376 <     *  remove removes next element, or throws NSEE if empty
376 >     * remove() removes next element, or throws NSEE if empty
377       */
378      public void testRemove() {
379          ArrayDeque q = populatedDeque(SIZE);
380          for (int i = 0; i < SIZE; ++i) {
381 <            assertEquals(i, ((Integer)q.remove()).intValue());
381 >            assertEquals(i, q.remove());
382          }
383          try {
384              q.remove();
385              shouldThrow();
386 <        } catch (NoSuchElementException success){
387 <        }  
386 >        } catch (NoSuchElementException success) {}
387 >    }
388 >
389 >    /**
390 >     * remove(x) removes x and returns true if present
391 >     */
392 >    public void testRemoveElement() {
393 >        ArrayDeque q = populatedDeque(SIZE);
394 >        for (int i = 1; i < SIZE; i+=2) {
395 >            assertTrue(q.contains(i));
396 >            assertTrue(q.remove(i));
397 >            assertFalse(q.contains(i));
398 >            assertTrue(q.contains(i-1));
399 >        }
400 >        for (int i = 0; i < SIZE; i+=2) {
401 >            assertTrue(q.contains(i));
402 >            assertTrue(q.remove(i));
403 >            assertFalse(q.contains(i));
404 >            assertFalse(q.remove(i+1));
405 >            assertFalse(q.contains(i+1));
406 >        }
407 >        assertTrue(q.isEmpty());
408      }
409  
410      /**
411 <     *  peekFirst returns next element, or null if empty
411 >     * peekFirst() returns next element, or null if empty
412       */
413      public void testPeekFirst() {
414          ArrayDeque q = populatedDeque(SIZE);
415          for (int i = 0; i < SIZE; ++i) {
416 <            assertEquals(i, ((Integer)q.peekFirst()).intValue());
417 <            q.pollFirst();
416 >            assertEquals(i, q.peekFirst());
417 >            assertEquals(i, q.pollFirst());
418              assertTrue(q.peekFirst() == null ||
419 <                       i != ((Integer)q.peekFirst()).intValue());
419 >                       !q.peekFirst().equals(i));
420          }
421 <        assertNull(q.peekFirst());
421 >        assertNull(q.peekFirst());
422      }
423  
424      /**
425 <     *  peek returns next element, or null if empty
425 >     * peek() returns next element, or null if empty
426       */
427      public void testPeek() {
428          ArrayDeque q = populatedDeque(SIZE);
429          for (int i = 0; i < SIZE; ++i) {
430 <            assertEquals(i, ((Integer)q.peek()).intValue());
431 <            q.poll();
430 >            assertEquals(i, q.peek());
431 >            assertEquals(i, q.poll());
432              assertTrue(q.peek() == null ||
433 <                       i != ((Integer)q.peek()).intValue());
433 >                       !q.peek().equals(i));
434          }
435 <        assertNull(q.peek());
435 >        assertNull(q.peek());
436      }
437  
438      /**
439 <     *  peekLast returns next element, or null if empty
439 >     * peekLast() returns next element, or null if empty
440       */
441      public void testPeekLast() {
442          ArrayDeque q = populatedDeque(SIZE);
443          for (int i = SIZE-1; i >= 0; --i) {
444 <            assertEquals(i, ((Integer)q.peekLast()).intValue());
445 <            q.pollLast();
444 >            assertEquals(i, q.peekLast());
445 >            assertEquals(i, q.pollLast());
446              assertTrue(q.peekLast() == null ||
447 <                       i != ((Integer)q.peekLast()).intValue());
447 >                       !q.peekLast().equals(i));
448 >        }
449 >        assertNull(q.peekLast());
450 >    }
451 >
452 >    /**
453 >     * element() returns first element, or throws NSEE if empty
454 >     */
455 >    public void testElement() {
456 >        ArrayDeque q = populatedDeque(SIZE);
457 >        for (int i = 0; i < SIZE; ++i) {
458 >            assertEquals(i, q.element());
459 >            assertEquals(i, q.poll());
460          }
461 <        assertNull(q.peekLast());
461 >        try {
462 >            q.element();
463 >            shouldThrow();
464 >        } catch (NoSuchElementException success) {}
465      }
466  
467      /**
468 <     * getFirst returns next getFirst, or throws NSEE if empty
468 >     * getFirst() returns first element, or throws NSEE if empty
469       */
470      public void testFirstElement() {
471          ArrayDeque q = populatedDeque(SIZE);
472          for (int i = 0; i < SIZE; ++i) {
473 <            assertEquals(i, ((Integer)q.getFirst()).intValue());
474 <            q.pollFirst();
473 >            assertEquals(i, q.getFirst());
474 >            assertEquals(i, q.pollFirst());
475          }
476          try {
477              q.getFirst();
478              shouldThrow();
479 <        }
307 <        catch (NoSuchElementException success) {}
479 >        } catch (NoSuchElementException success) {}
480      }
481  
482      /**
483 <     *  getLast returns next element, or throws NSEE if empty
483 >     * getLast() returns last element, or throws NSEE if empty
484       */
485      public void testLastElement() {
486          ArrayDeque q = populatedDeque(SIZE);
487          for (int i = SIZE-1; i >= 0; --i) {
488 <            assertEquals(i, ((Integer)q.getLast()).intValue());
489 <            q.pollLast();
488 >            assertEquals(i, q.getLast());
489 >            assertEquals(i, q.pollLast());
490          }
491          try {
492              q.getLast();
493              shouldThrow();
494 <        }
495 <        catch (NoSuchElementException success) {}
324 <        assertNull(q.peekLast());
494 >        } catch (NoSuchElementException success) {}
495 >        assertNull(q.peekLast());
496      }
497  
327
498      /**
499 <     *  removeFirst removes next element, or throws NSEE if empty
499 >     * removeFirst() removes first element, or throws NSEE if empty
500       */
501      public void testRemoveFirst() {
502          ArrayDeque q = populatedDeque(SIZE);
503          for (int i = 0; i < SIZE; ++i) {
504 <            assertEquals(i, ((Integer)q.removeFirst()).intValue());
504 >            assertEquals(i, q.removeFirst());
505          }
506          try {
507              q.removeFirst();
508              shouldThrow();
509 <        } catch (NoSuchElementException success){
510 <        }  
509 >        } catch (NoSuchElementException success) {}
510 >        assertNull(q.peekFirst());
511 >    }
512 >
513 >    /**
514 >     * removeLast() removes last element, or throws NSEE if empty
515 >     */
516 >    public void testRemoveLast() {
517 >        ArrayDeque q = populatedDeque(SIZE);
518 >        for (int i = SIZE - 1; i >= 0; --i) {
519 >            assertEquals(i, q.removeLast());
520 >        }
521 >        try {
522 >            q.removeLast();
523 >            shouldThrow();
524 >        } catch (NoSuchElementException success) {}
525 >        assertNull(q.peekLast());
526      }
527  
528      /**
# Line 377 | Line 562 | public class ArrayDequeTest extends JSR1
562          ArrayDeque q = populatedDeque(SIZE);
563          for (int i = 0; i < SIZE; ++i) {
564              assertTrue(q.contains(new Integer(i)));
565 <            q.pollFirst();
565 >            assertEquals(i, q.pollFirst());
566              assertFalse(q.contains(new Integer(i)));
567          }
568      }
# Line 390 | Line 575 | public class ArrayDequeTest extends JSR1
575          q.clear();
576          assertTrue(q.isEmpty());
577          assertEquals(0, q.size());
578 <        q.add(new Integer(1));
578 >        assertTrue(q.add(new Integer(1)));
579          assertFalse(q.isEmpty());
580          q.clear();
581          assertTrue(q.isEmpty());
# Line 405 | Line 590 | public class ArrayDequeTest extends JSR1
590          for (int i = 0; i < SIZE; ++i) {
591              assertTrue(q.containsAll(p));
592              assertFalse(p.containsAll(q));
593 <            p.add(new Integer(i));
593 >            assertTrue(p.add(new Integer(i)));
594          }
595          assertTrue(p.containsAll(q));
596      }
# Line 418 | Line 603 | public class ArrayDequeTest extends JSR1
603          ArrayDeque p = populatedDeque(SIZE);
604          for (int i = 0; i < SIZE; ++i) {
605              boolean changed = q.retainAll(p);
606 <            if (i == 0)
422 <                assertFalse(changed);
423 <            else
424 <                assertTrue(changed);
425 <
606 >            assertEquals(changed, (i > 0));
607              assertTrue(q.containsAll(p));
608              assertEquals(SIZE-i, q.size());
609              p.removeFirst();
# Line 439 | Line 620 | public class ArrayDequeTest extends JSR1
620              assertTrue(q.removeAll(p));
621              assertEquals(SIZE-i, q.size());
622              for (int j = 0; j < i; ++j) {
623 <                Integer I = (Integer)(p.removeFirst());
443 <                assertFalse(q.contains(I));
623 >                assertFalse(q.contains(p.removeFirst()));
624              }
625          }
626      }
627  
628      /**
629 <     *  toArray contains all elements
629 >     * toArray() contains all elements in FIFO order
630       */
631      public void testToArray() {
632          ArrayDeque q = populatedDeque(SIZE);
633 <        Object[] o = q.toArray();
634 <        Arrays.sort(o);
635 <        for(int i = 0; i < o.length; i++)
456 <            assertEquals(o[i], q.pollFirst());
633 >        Object[] o = q.toArray();
634 >        for (int i = 0; i < o.length; i++)
635 >            assertSame(o[i], q.pollFirst());
636      }
637  
638      /**
639 <     *  toArray(a) contains all elements
639 >     * toArray(a) contains all elements in FIFO order
640       */
641      public void testToArray2() {
642 <        ArrayDeque q = populatedDeque(SIZE);
643 <        Integer[] ints = new Integer[SIZE];
644 <        ints = (Integer[])q.toArray(ints);
645 <        Arrays.sort(ints);
646 <        for(int i = 0; i < ints.length; i++)
647 <            assertEquals(ints[i], q.pollFirst());
642 >        ArrayDeque<Integer> q = populatedDeque(SIZE);
643 >        Integer[] ints = new Integer[SIZE];
644 >        Integer[] array = q.toArray(ints);
645 >        assertSame(ints, array);
646 >        for (int i = 0; i < ints.length; i++)
647 >            assertSame(ints[i], q.remove());
648      }
649  
650      /**
651 <     * toArray(null) throws NPE
651 >     * toArray(null) throws NullPointerException
652       */
653 <    public void testToArray_BadArg() {
654 <        try {
655 <            ArrayDeque l = new ArrayDeque();
656 <            l.add(new Object());
657 <            Object o[] = l.toArray(null);
658 <            shouldThrow();
659 <        } catch(NullPointerException success){}
653 >    public void testToArray_NullArg() {
654 >        ArrayDeque l = new ArrayDeque();
655 >        l.add(new Object());
656 >        try {
657 >            l.toArray(null);
658 >            shouldThrow();
659 >        } catch (NullPointerException success) {}
660      }
661  
662      /**
663 <     * toArray with incompatable aray type throws CCE
663 >     * toArray(incompatible array type) throws ArrayStoreException
664       */
665      public void testToArray1_BadArg() {
666 <        try {
667 <            ArrayDeque l = new ArrayDeque();
668 <            l.add(new Integer(5));
669 <            Object o[] = l.toArray(new String[10] );
670 <            shouldThrow();
671 <        } catch(ArrayStoreException  success){}
666 >        ArrayDeque l = new ArrayDeque();
667 >        l.add(new Integer(5));
668 >        try {
669 >            l.toArray(new String[10]);
670 >            shouldThrow();
671 >        } catch (ArrayStoreException success) {}
672      }
673 <    
673 >
674      /**
675 <     *  iterator iterates through all elements
675 >     * Iterator iterates through all elements
676       */
677      public void testIterator() {
678          ArrayDeque q = populatedDeque(SIZE);
679          int i = 0;
680 <        Iterator it = q.iterator();
681 <        while(it.hasNext()) {
680 >        Iterator it = q.iterator();
681 >        while (it.hasNext()) {
682              assertTrue(q.contains(it.next()));
683              ++i;
684          }
# Line 507 | Line 686 | public class ArrayDequeTest extends JSR1
686      }
687  
688      /**
689 <     *  iterator ordering is FIFO
689 >     * Iterator ordering is FIFO
690       */
691      public void testIteratorOrdering() {
692          final ArrayDeque q = new ArrayDeque();
693 <        q.add(new Integer(1));
694 <        q.add(new Integer(2));
695 <        q.add(new Integer(3));
693 >        q.add(one);
694 >        q.add(two);
695 >        q.add(three);
696          int k = 0;
697          for (Iterator it = q.iterator(); it.hasNext();) {
698 <            int i = ((Integer)(it.next())).intValue();
520 <            assertEquals(++k, i);
698 >            assertEquals(++k, it.next());
699          }
700  
701          assertEquals(3, k);
702      }
703  
704      /**
705 <     * iterator.remove removes current element
705 >     * iterator.remove() removes current element
706       */
707 <    public void testIteratorRemove () {
707 >    public void testIteratorRemove() {
708          final ArrayDeque q = new ArrayDeque();
709 <        q.add(new Integer(1));
710 <        q.add(new Integer(2));
711 <        q.add(new Integer(3));
712 <        Iterator it = q.iterator();
713 <        it.next();
714 <        it.remove();
715 <        it = q.iterator();
716 <        assertEquals(it.next(), new Integer(2));
717 <        assertEquals(it.next(), new Integer(3));
718 <        assertFalse(it.hasNext());
709 >        final Random rng = new Random();
710 >        for (int iters = 0; iters < 100; ++iters) {
711 >            int max = rng.nextInt(5) + 2;
712 >            int split = rng.nextInt(max-1) + 1;
713 >            for (int j = 1; j <= max; ++j)
714 >                q.add(new Integer(j));
715 >            Iterator it = q.iterator();
716 >            for (int j = 1; j <= split; ++j)
717 >                assertEquals(it.next(), new Integer(j));
718 >            it.remove();
719 >            assertEquals(it.next(), new Integer(split+1));
720 >            for (int j = 1; j <= split; ++j)
721 >                q.remove(new Integer(j));
722 >            it = q.iterator();
723 >            for (int j = split+1; j <= max; ++j) {
724 >                assertEquals(it.next(), new Integer(j));
725 >                it.remove();
726 >            }
727 >            assertFalse(it.hasNext());
728 >            assertTrue(q.isEmpty());
729 >        }
730      }
731  
732      /**
733 <     *  Descending iterator iterates through all elements
733 >     * Descending iterator iterates through all elements
734       */
735      public void testDescendingIterator() {
736          ArrayDeque q = populatedDeque(SIZE);
737          int i = 0;
738 <        Iterator it = q.descendingIterator();
739 <        while(it.hasNext()) {
738 >        Iterator it = q.descendingIterator();
739 >        while (it.hasNext()) {
740              assertTrue(q.contains(it.next()));
741              ++i;
742          }
# Line 555 | Line 744 | public class ArrayDequeTest extends JSR1
744          assertFalse(it.hasNext());
745          try {
746              it.next();
747 <        } catch(NoSuchElementException success) {
748 <        }
747 >            shouldThrow();
748 >        } catch (NoSuchElementException success) {}
749      }
750  
751      /**
752 <     *  Descending iterator ordering is reverse FIFO
752 >     * Descending iterator ordering is reverse FIFO
753       */
754      public void testDescendingIteratorOrdering() {
755          final ArrayDeque q = new ArrayDeque();
756 <        q.add(new Integer(3));
757 <        q.add(new Integer(2));
758 <        q.add(new Integer(1));
759 <        int k = 0;
760 <        for (Iterator it = q.descendingIterator(); it.hasNext();) {
761 <            int i = ((Integer)(it.next())).intValue();
762 <            assertEquals(++k, i);
763 <        }
756 >        for (int iters = 0; iters < 100; ++iters) {
757 >            q.add(new Integer(3));
758 >            q.add(new Integer(2));
759 >            q.add(new Integer(1));
760 >            int k = 0;
761 >            for (Iterator it = q.descendingIterator(); it.hasNext();) {
762 >                assertEquals(++k, it.next());
763 >            }
764  
765 <        assertEquals(3, k);
765 >            assertEquals(3, k);
766 >            q.remove();
767 >            q.remove();
768 >            q.remove();
769 >        }
770      }
771  
772      /**
773 <     * descendingIterator.remove removes current element
773 >     * descendingIterator.remove() removes current element
774       */
775 <    public void testDescendingIteratorRemove () {
775 >    public void testDescendingIteratorRemove() {
776          final ArrayDeque q = new ArrayDeque();
777 <        q.add(new Integer(3));
778 <        q.add(new Integer(2));
779 <        q.add(new Integer(1));
780 <        Iterator it = q.descendingIterator();
781 <        it.next();
782 <        it.remove();
783 <        it = q.descendingIterator();
784 <        assertEquals(it.next(), new Integer(2));
785 <        assertEquals(it.next(), new Integer(3));
786 <        assertFalse(it.hasNext());
777 >        final Random rng = new Random();
778 >        for (int iters = 0; iters < 100; ++iters) {
779 >            int max = rng.nextInt(5) + 2;
780 >            int split = rng.nextInt(max-1) + 1;
781 >            for (int j = max; j >= 1; --j)
782 >                q.add(new Integer(j));
783 >            Iterator it = q.descendingIterator();
784 >            for (int j = 1; j <= split; ++j)
785 >                assertEquals(it.next(), new Integer(j));
786 >            it.remove();
787 >            assertEquals(it.next(), new Integer(split+1));
788 >            for (int j = 1; j <= split; ++j)
789 >                q.remove(new Integer(j));
790 >            it = q.descendingIterator();
791 >            for (int j = split+1; j <= max; ++j) {
792 >                assertEquals(it.next(), new Integer(j));
793 >                it.remove();
794 >            }
795 >            assertFalse(it.hasNext());
796 >            assertTrue(q.isEmpty());
797 >        }
798      }
799  
596
800      /**
801 <     * toString contains toStrings of elements
801 >     * toString() contains toStrings of elements
802       */
803      public void testToString() {
804          ArrayDeque q = populatedDeque(SIZE);
805          String s = q.toString();
806          for (int i = 0; i < SIZE; ++i) {
807 <            assertTrue(s.indexOf(String.valueOf(i)) >= 0);
807 >            assertTrue(s.contains(String.valueOf(i)));
808          }
809 <    }        
809 >    }
810  
811      /**
812 <     * peekFirst returns element inserted with addFirst
812 >     * A deserialized serialized deque has same elements in same order
813       */
814 <    public void testAddFirst() {
815 <        ArrayDeque q = populatedDeque(3);
816 <        q.addFirst(four);
614 <        assertEquals(four,q.peekFirst());
615 <    }  
814 >    public void testSerialization() throws Exception {
815 >        Queue x = populatedDeque(SIZE);
816 >        Queue y = serialClone(x);
817  
818 <    /**
819 <     * peekLast returns element inserted with addLast
820 <     */
821 <    public void testAddLast() {
822 <        ArrayDeque q = populatedDeque(3);
823 <        q.addLast(four);
824 <        assertEquals(four,q.peekLast());
825 <    }  
818 >        assertTrue(x != y);
819 >        assertEquals(x.size(), y.size());
820 >        assertEquals(x.toString(), y.toString());
821 >        assertTrue(Arrays.equals(x.toArray(), y.toArray()));
822 >        while (!x.isEmpty()) {
823 >            assertFalse(y.isEmpty());
824 >            assertEquals(x.remove(), y.remove());
825 >        }
826 >        assertTrue(y.isEmpty());
827 >    }
828  
829   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines