ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArrayListTest.java
Revision: 1.33
Committed: Fri Feb 27 19:28:23 2015 UTC (9 years, 2 months ago) by jsr166
Branch: MAIN
Changes since 1.32: +16 -22 lines
Log Message:
replace Vector with Arrays.asList; add more assertions

File Contents

# Content
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/publicdomain/zero/1.0/
5 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 * Pat Fisher, Mike Judd.
7 */
8
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.Collection;
12 import java.util.Collections;
13 import java.util.Iterator;
14 import java.util.LinkedList;
15 import java.util.List;
16 import java.util.ListIterator;
17 import java.util.NoSuchElementException;
18 import java.util.concurrent.CopyOnWriteArrayList;
19
20 import junit.framework.Test;
21 import junit.framework.TestSuite;
22
23 public class CopyOnWriteArrayListTest extends JSR166TestCase {
24
25 public static void main(String[] args) {
26 junit.textui.TestRunner.run(suite());
27 }
28
29 public static Test suite() {
30 return new TestSuite(CopyOnWriteArrayListTest.class);
31 }
32
33 static CopyOnWriteArrayList<Integer> populatedArray(int n) {
34 CopyOnWriteArrayList<Integer> a = new CopyOnWriteArrayList<Integer>();
35 assertTrue(a.isEmpty());
36 for (int i = 0; i < n; i++)
37 a.add(i);
38 assertFalse(a.isEmpty());
39 assertEquals(n, a.size());
40 return a;
41 }
42
43 static CopyOnWriteArrayList<Integer> populatedArray(Integer[] elements) {
44 CopyOnWriteArrayList<Integer> a = new CopyOnWriteArrayList<Integer>();
45 assertTrue(a.isEmpty());
46 for (int i = 0; i < elements.length; i++)
47 a.add(elements[i]);
48 assertFalse(a.isEmpty());
49 assertEquals(elements.length, a.size());
50 return a;
51 }
52
53 /**
54 * a new list is empty
55 */
56 public void testConstructor() {
57 CopyOnWriteArrayList a = new CopyOnWriteArrayList();
58 assertTrue(a.isEmpty());
59 }
60
61 /**
62 * new list contains all elements of initializing array
63 */
64 public void testConstructor2() {
65 Integer[] ints = new Integer[SIZE];
66 for (int i = 0; i < SIZE-1; ++i)
67 ints[i] = new Integer(i);
68 CopyOnWriteArrayList a = new CopyOnWriteArrayList(ints);
69 for (int i = 0; i < SIZE; ++i)
70 assertEquals(ints[i], a.get(i));
71 }
72
73 /**
74 * new list contains all elements of initializing collection
75 */
76 public void testConstructor3() {
77 Integer[] ints = new Integer[SIZE];
78 for (int i = 0; i < SIZE-1; ++i)
79 ints[i] = new Integer(i);
80 CopyOnWriteArrayList a = new CopyOnWriteArrayList(Arrays.asList(ints));
81 for (int i = 0; i < SIZE; ++i)
82 assertEquals(ints[i], a.get(i));
83 }
84
85 /**
86 * addAll adds each element from the given collection, including duplicates
87 */
88 public void testAddAll() {
89 CopyOnWriteArrayList full = populatedArray(3);
90 assertTrue(full.addAll(Arrays.asList(three, four, five)));
91 assertEquals(6, full.size());
92 assertTrue(full.addAll(Arrays.asList(three, four, five)));
93 assertEquals(9, full.size());
94 }
95
96 /**
97 * addAllAbsent adds each element from the given collection that did not
98 * already exist in the List
99 */
100 public void testAddAllAbsent() {
101 CopyOnWriteArrayList full = populatedArray(3);
102 // "one" is duplicate and will not be added
103 assertEquals(2, full.addAllAbsent(Arrays.asList(three, four, one)));
104 assertEquals(5, full.size());
105 assertEquals(0, full.addAllAbsent(Arrays.asList(three, four, one)));
106 assertEquals(5, full.size());
107 }
108
109 /**
110 * addIfAbsent will not add the element if it already exists in the list
111 */
112 public void testAddIfAbsent() {
113 CopyOnWriteArrayList full = populatedArray(SIZE);
114 full.addIfAbsent(one);
115 assertEquals(SIZE, full.size());
116 }
117
118 /**
119 * addIfAbsent adds the element when it does not exist in the list
120 */
121 public void testAddIfAbsent2() {
122 CopyOnWriteArrayList full = populatedArray(SIZE);
123 full.addIfAbsent(three);
124 assertTrue(full.contains(three));
125 }
126
127 /**
128 * clear removes all elements from the list
129 */
130 public void testClear() {
131 CopyOnWriteArrayList full = populatedArray(SIZE);
132 full.clear();
133 assertEquals(0, full.size());
134 }
135
136 /**
137 * Cloned list is equal
138 */
139 public void testClone() {
140 CopyOnWriteArrayList l1 = populatedArray(SIZE);
141 CopyOnWriteArrayList l2 = (CopyOnWriteArrayList)(l1.clone());
142 assertEquals(l1, l2);
143 l1.clear();
144 assertFalse(l1.equals(l2));
145 }
146
147 /**
148 * contains is true for added elements
149 */
150 public void testContains() {
151 CopyOnWriteArrayList full = populatedArray(3);
152 assertTrue(full.contains(one));
153 assertFalse(full.contains(five));
154 }
155
156 /**
157 * adding at an index places it in the indicated index
158 */
159 public void testAddIndex() {
160 CopyOnWriteArrayList full = populatedArray(3);
161 full.add(0, m1);
162 assertEquals(4, full.size());
163 assertEquals(m1, full.get(0));
164 assertEquals(zero, full.get(1));
165
166 full.add(2, m2);
167 assertEquals(5, full.size());
168 assertEquals(m2, full.get(2));
169 assertEquals(two, full.get(4));
170 }
171
172 /**
173 * lists with same elements are equal and have same hashCode
174 */
175 public void testEquals() {
176 CopyOnWriteArrayList a = populatedArray(3);
177 CopyOnWriteArrayList b = populatedArray(3);
178 assertTrue(a.equals(b));
179 assertTrue(b.equals(a));
180 assertEquals(a.hashCode(), b.hashCode());
181 a.add(m1);
182 assertFalse(a.equals(b));
183 assertFalse(b.equals(a));
184 b.add(m1);
185 assertTrue(a.equals(b));
186 assertTrue(b.equals(a));
187 assertEquals(a.hashCode(), b.hashCode());
188 }
189
190 /**
191 * containsAll returns true for collection with subset of elements
192 */
193 public void testContainsAll() {
194 CopyOnWriteArrayList full = populatedArray(3);
195 assertTrue(full.containsAll(Arrays.asList()));
196 assertTrue(full.containsAll(Arrays.asList(one)));
197 assertTrue(full.containsAll(Arrays.asList(one, two)));
198 assertFalse(full.containsAll(Arrays.asList(one, two, six)));
199 assertFalse(full.containsAll(Arrays.asList(six)));
200 }
201
202 /**
203 * get returns the value at the given index
204 */
205 public void testGet() {
206 CopyOnWriteArrayList full = populatedArray(3);
207 assertEquals(0, full.get(0));
208 }
209
210 /**
211 * indexOf gives the index for the given object
212 */
213 public void testIndexOf() {
214 CopyOnWriteArrayList full = populatedArray(3);
215 assertEquals(1, full.indexOf(one));
216 assertEquals(-1, full.indexOf("puppies"));
217 }
218
219 /**
220 * indexOf gives the index based on the given index
221 * at which to start searching
222 */
223 public void testIndexOf2() {
224 CopyOnWriteArrayList full = populatedArray(3);
225 assertEquals(1, full.indexOf(one, 0));
226 assertEquals(-1, full.indexOf(one, 2));
227 }
228
229 /**
230 * isEmpty returns true when empty, else false
231 */
232 public void testIsEmpty() {
233 CopyOnWriteArrayList empty = new CopyOnWriteArrayList();
234 CopyOnWriteArrayList full = populatedArray(SIZE);
235 assertTrue(empty.isEmpty());
236 assertFalse(full.isEmpty());
237 }
238
239 /**
240 * iterator() returns an iterator containing the elements of the
241 * list in insertion order
242 */
243 public void testIterator() {
244 Collection empty = new CopyOnWriteArrayList();
245 assertFalse(empty.iterator().hasNext());
246 try {
247 empty.iterator().next();
248 shouldThrow();
249 } catch (NoSuchElementException success) {}
250
251 Integer[] elements = new Integer[SIZE];
252 for (int i = 0; i < SIZE; i++)
253 elements[i] = i;
254 Collections.shuffle(Arrays.asList(elements));
255 Collection<Integer> full = populatedArray(elements);
256
257 Iterator it = full.iterator();
258 for (int j = 0; j < SIZE; j++) {
259 assertTrue(it.hasNext());
260 assertEquals(elements[j], it.next());
261 }
262 assertIteratorExhausted(it);
263 }
264
265 /**
266 * iterator of empty collection has no elements
267 */
268 public void testEmptyIterator() {
269 Collection c = new CopyOnWriteArrayList();
270 assertIteratorExhausted(c.iterator());
271 }
272
273 /**
274 * iterator.remove throws UnsupportedOperationException
275 */
276 public void testIteratorRemove() {
277 CopyOnWriteArrayList full = populatedArray(SIZE);
278 Iterator it = full.iterator();
279 it.next();
280 try {
281 it.remove();
282 shouldThrow();
283 } catch (UnsupportedOperationException success) {}
284 }
285
286 /**
287 * toString contains toString of elements
288 */
289 public void testToString() {
290 assertEquals("[]", new CopyOnWriteArrayList().toString());
291 CopyOnWriteArrayList full = populatedArray(3);
292 String s = full.toString();
293 for (int i = 0; i < 3; ++i)
294 assertTrue(s.contains(String.valueOf(i)));
295 assertEquals(new ArrayList(full).toString(),
296 full.toString());
297 }
298
299 /**
300 * lastIndexOf returns the index for the given object
301 */
302 public void testLastIndexOf1() {
303 CopyOnWriteArrayList full = populatedArray(3);
304 full.add(one);
305 full.add(three);
306 assertEquals(3, full.lastIndexOf(one));
307 assertEquals(-1, full.lastIndexOf(six));
308 }
309
310 /**
311 * lastIndexOf returns the index from the given starting point
312 */
313 public void testLastIndexOf2() {
314 CopyOnWriteArrayList full = populatedArray(3);
315 full.add(one);
316 full.add(three);
317 assertEquals(3, full.lastIndexOf(one, 4));
318 assertEquals(-1, full.lastIndexOf(three, 3));
319 }
320
321 /**
322 * listIterator traverses all elements
323 */
324 public void testListIterator1() {
325 CopyOnWriteArrayList full = populatedArray(SIZE);
326 ListIterator i = full.listIterator();
327 int j;
328 for (j = 0; i.hasNext(); j++)
329 assertEquals(j, i.next());
330 assertEquals(SIZE, j);
331 }
332
333 /**
334 * listIterator only returns those elements after the given index
335 */
336 public void testListIterator2() {
337 CopyOnWriteArrayList full = populatedArray(3);
338 ListIterator i = full.listIterator(1);
339 int j;
340 for (j = 0; i.hasNext(); j++)
341 assertEquals(j+1, i.next());
342 assertEquals(2, j);
343 }
344
345 /**
346 * remove(int) removes and returns the object at the given index
347 */
348 public void testRemove_int() {
349 int SIZE = 3;
350 for (int i = 0; i < SIZE; i++) {
351 CopyOnWriteArrayList full = populatedArray(SIZE);
352 assertEquals(i, full.remove(i));
353 assertEquals(SIZE - 1, full.size());
354 assertFalse(full.contains(new Integer(i)));
355 }
356 }
357
358 /**
359 * remove(Object) removes the object if found and returns true
360 */
361 public void testRemove_Object() {
362 int SIZE = 3;
363 for (int i = 0; i < SIZE; i++) {
364 CopyOnWriteArrayList full = populatedArray(SIZE);
365 assertFalse(full.remove(new Integer(-42)));
366 assertTrue(full.remove(new Integer(i)));
367 assertEquals(SIZE - 1, full.size());
368 assertFalse(full.contains(new Integer(i)));
369 }
370 CopyOnWriteArrayList x = new CopyOnWriteArrayList(Arrays.asList(4, 5, 6));
371 assertTrue(x.remove(new Integer(6)));
372 assertEquals(x, Arrays.asList(4, 5));
373 assertTrue(x.remove(new Integer(4)));
374 assertEquals(x, Arrays.asList(5));
375 assertTrue(x.remove(new Integer(5)));
376 assertEquals(x, Arrays.asList());
377 assertFalse(x.remove(new Integer(5)));
378 }
379
380 /**
381 * removeAll removes all elements from the given collection
382 */
383 public void testRemoveAll() {
384 CopyOnWriteArrayList full = populatedArray(3);
385 assertTrue(full.removeAll(Arrays.asList(one, two)));
386 assertEquals(1, full.size());
387 assertFalse(full.removeAll(Arrays.asList(one, two)));
388 assertEquals(1, full.size());
389 }
390
391 /**
392 * set changes the element at the given index
393 */
394 public void testSet() {
395 CopyOnWriteArrayList full = populatedArray(3);
396 assertEquals(2, full.set(2, four));
397 assertEquals(4, full.get(2));
398 }
399
400 /**
401 * size returns the number of elements
402 */
403 public void testSize() {
404 CopyOnWriteArrayList empty = new CopyOnWriteArrayList();
405 CopyOnWriteArrayList full = populatedArray(SIZE);
406 assertEquals(SIZE, full.size());
407 assertEquals(0, empty.size());
408 }
409
410 /**
411 * toArray() returns an Object array containing all elements from
412 * the list in insertion order
413 */
414 public void testToArray() {
415 Object[] a = new CopyOnWriteArrayList().toArray();
416 assertTrue(Arrays.equals(new Object[0], a));
417 assertSame(Object[].class, a.getClass());
418
419 Integer[] elements = new Integer[SIZE];
420 for (int i = 0; i < SIZE; i++)
421 elements[i] = i;
422 Collections.shuffle(Arrays.asList(elements));
423 Collection<Integer> full = populatedArray(elements);
424
425 assertTrue(Arrays.equals(elements, full.toArray()));
426 assertSame(Object[].class, full.toArray().getClass());
427 }
428
429 /**
430 * toArray(Integer array) returns an Integer array containing all
431 * elements from the list in insertion order
432 */
433 public void testToArray2() {
434 Collection empty = new CopyOnWriteArrayList();
435 Integer[] a;
436
437 a = new Integer[0];
438 assertSame(a, empty.toArray(a));
439
440 a = new Integer[SIZE/2];
441 Arrays.fill(a, 42);
442 assertSame(a, empty.toArray(a));
443 assertNull(a[0]);
444 for (int i = 1; i < a.length; i++)
445 assertEquals(42, (int) a[i]);
446
447 Integer[] elements = new Integer[SIZE];
448 for (int i = 0; i < SIZE; i++)
449 elements[i] = i;
450 Collections.shuffle(Arrays.asList(elements));
451 Collection<Integer> full = populatedArray(elements);
452
453 Arrays.fill(a, 42);
454 assertTrue(Arrays.equals(elements, full.toArray(a)));
455 for (int i = 0; i < a.length; i++)
456 assertEquals(42, (int) a[i]);
457 assertSame(Integer[].class, full.toArray(a).getClass());
458
459 a = new Integer[SIZE];
460 Arrays.fill(a, 42);
461 assertSame(a, full.toArray(a));
462 assertTrue(Arrays.equals(elements, a));
463
464 a = new Integer[2*SIZE];
465 Arrays.fill(a, 42);
466 assertSame(a, full.toArray(a));
467 assertTrue(Arrays.equals(elements, Arrays.copyOf(a, SIZE)));
468 assertNull(a[SIZE]);
469 for (int i = SIZE + 1; i < a.length; i++)
470 assertEquals(42, (int) a[i]);
471 }
472
473 /**
474 * sublists contains elements at indexes offset from their base
475 */
476 public void testSubList() {
477 CopyOnWriteArrayList a = populatedArray(10);
478 assertTrue(a.subList(1,1).isEmpty());
479 for (int j = 0; j < 9; ++j) {
480 for (int i = j ; i < 10; ++i) {
481 List b = a.subList(j,i);
482 for (int k = j; k < i; ++k) {
483 assertEquals(new Integer(k), b.get(k-j));
484 }
485 }
486 }
487
488 List s = a.subList(2, 5);
489 assertEquals(3, s.size());
490 s.set(2, m1);
491 assertEquals(a.get(4), m1);
492 s.clear();
493 assertEquals(7, a.size());
494 }
495
496 // Exception tests
497
498 /**
499 * toArray throws an ArrayStoreException when the given array
500 * can not store the objects inside the list
501 */
502 public void testToArray_ArrayStoreException() {
503 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
504 c.add("zfasdfsdf");
505 c.add("asdadasd");
506 try {
507 c.toArray(new Long[5]);
508 shouldThrow();
509 } catch (ArrayStoreException success) {}
510 }
511
512 /**
513 * get throws an IndexOutOfBoundsException on a negative index
514 */
515 public void testGet1_IndexOutOfBoundsException() {
516 CopyOnWriteArrayList c = populatedArray(5);
517 List[] lists = { c, c.subList(1, c.size() - 1) };
518 for (List list : lists) {
519 try {
520 list.get(-1);
521 shouldThrow();
522 } catch (IndexOutOfBoundsException success) {}
523 }
524 }
525
526 /**
527 * get throws an IndexOutOfBoundsException on a too high index
528 */
529 public void testGet2_IndexOutOfBoundsException() {
530 CopyOnWriteArrayList c = populatedArray(5);
531 List[] lists = { c, c.subList(1, c.size() - 1) };
532 for (List list : lists) {
533 try {
534 list.get(list.size());
535 shouldThrow();
536 } catch (IndexOutOfBoundsException success) {}
537 }
538 }
539
540 /**
541 * set throws an IndexOutOfBoundsException on a negative index
542 */
543 public void testSet1_IndexOutOfBoundsException() {
544 CopyOnWriteArrayList c = populatedArray(5);
545 List[] lists = { c, c.subList(1, c.size() - 1) };
546 for (List list : lists) {
547 try {
548 list.set(-1, "qwerty");
549 shouldThrow();
550 } catch (IndexOutOfBoundsException success) {}
551 }
552 }
553
554 /**
555 * set throws an IndexOutOfBoundsException on a too high index
556 */
557 public void testSet2() {
558 CopyOnWriteArrayList c = populatedArray(5);
559 List[] lists = { c, c.subList(1, c.size() - 1) };
560 for (List list : lists) {
561 try {
562 list.set(list.size(), "qwerty");
563 shouldThrow();
564 } catch (IndexOutOfBoundsException success) {}
565 }
566 }
567
568 /**
569 * add throws an IndexOutOfBoundsException on a negative index
570 */
571 public void testAdd1_IndexOutOfBoundsException() {
572 CopyOnWriteArrayList c = populatedArray(5);
573 List[] lists = { c, c.subList(1, c.size() - 1) };
574 for (List list : lists) {
575 try {
576 list.add(-1, "qwerty");
577 shouldThrow();
578 } catch (IndexOutOfBoundsException success) {}
579 }
580 }
581
582 /**
583 * add throws an IndexOutOfBoundsException on a too high index
584 */
585 public void testAdd2_IndexOutOfBoundsException() {
586 CopyOnWriteArrayList c = populatedArray(5);
587 List[] lists = { c, c.subList(1, c.size() - 1) };
588 for (List list : lists) {
589 try {
590 list.add(list.size() + 1, "qwerty");
591 shouldThrow();
592 } catch (IndexOutOfBoundsException success) {}
593 }
594 }
595
596 /**
597 * remove throws an IndexOutOfBoundsException on a negative index
598 */
599 public void testRemove1_IndexOutOfBounds() {
600 CopyOnWriteArrayList c = populatedArray(5);
601 List[] lists = { c, c.subList(1, c.size() - 1) };
602 for (List list : lists) {
603 try {
604 list.remove(-1);
605 shouldThrow();
606 } catch (IndexOutOfBoundsException success) {}
607 }
608 }
609
610 /**
611 * remove throws an IndexOutOfBoundsException on a too high index
612 */
613 public void testRemove2_IndexOutOfBounds() {
614 CopyOnWriteArrayList c = populatedArray(5);
615 List[] lists = { c, c.subList(1, c.size() - 1) };
616 for (List list : lists) {
617 try {
618 list.remove(list.size());
619 shouldThrow();
620 } catch (IndexOutOfBoundsException success) {}
621 }
622 }
623
624 /**
625 * addAll throws an IndexOutOfBoundsException on a negative index
626 */
627 public void testAddAll1_IndexOutOfBoundsException() {
628 CopyOnWriteArrayList c = populatedArray(5);
629 List[] lists = { c, c.subList(1, c.size() - 1) };
630 for (List list : lists) {
631 try {
632 list.addAll(-1, new LinkedList());
633 shouldThrow();
634 } catch (IndexOutOfBoundsException success) {}
635 }
636 }
637
638 /**
639 * addAll throws an IndexOutOfBoundsException on a too high index
640 */
641 public void testAddAll2_IndexOutOfBoundsException() {
642 CopyOnWriteArrayList c = populatedArray(5);
643 List[] lists = { c, c.subList(1, c.size() - 1) };
644 for (List list : lists) {
645 try {
646 list.addAll(list.size() + 1, new LinkedList());
647 shouldThrow();
648 } catch (IndexOutOfBoundsException success) {}
649 }
650 }
651
652 /**
653 * listIterator throws an IndexOutOfBoundsException on a negative index
654 */
655 public void testListIterator1_IndexOutOfBoundsException() {
656 CopyOnWriteArrayList c = populatedArray(5);
657 List[] lists = { c, c.subList(1, c.size() - 1) };
658 for (List list : lists) {
659 try {
660 list.listIterator(-1);
661 shouldThrow();
662 } catch (IndexOutOfBoundsException success) {}
663 }
664 }
665
666 /**
667 * listIterator throws an IndexOutOfBoundsException on a too high index
668 */
669 public void testListIterator2_IndexOutOfBoundsException() {
670 CopyOnWriteArrayList c = populatedArray(5);
671 List[] lists = { c, c.subList(1, c.size() - 1) };
672 for (List list : lists) {
673 try {
674 list.listIterator(list.size() + 1);
675 shouldThrow();
676 } catch (IndexOutOfBoundsException success) {}
677 }
678 }
679
680 /**
681 * subList throws an IndexOutOfBoundsException on a negative index
682 */
683 public void testSubList1_IndexOutOfBoundsException() {
684 CopyOnWriteArrayList c = populatedArray(5);
685 List[] lists = { c, c.subList(1, c.size() - 1) };
686 for (List list : lists) {
687 try {
688 list.subList(-1, list.size());
689 shouldThrow();
690 } catch (IndexOutOfBoundsException success) {}
691 }
692 }
693
694 /**
695 * subList throws an IndexOutOfBoundsException on a too high index
696 */
697 public void testSubList2_IndexOutOfBoundsException() {
698 CopyOnWriteArrayList c = populatedArray(5);
699 List[] lists = { c, c.subList(1, c.size() - 1) };
700 for (List list : lists) {
701 try {
702 list.subList(0, list.size() + 1);
703 shouldThrow();
704 } catch (IndexOutOfBoundsException success) {}
705 }
706 }
707
708 /**
709 * subList throws IndexOutOfBoundsException when the second index
710 * is lower then the first
711 */
712 public void testSubList3_IndexOutOfBoundsException() {
713 CopyOnWriteArrayList c = populatedArray(5);
714 List[] lists = { c, c.subList(1, c.size() - 1) };
715 for (List list : lists) {
716 try {
717 list.subList(list.size() - 1, 1);
718 shouldThrow();
719 } catch (IndexOutOfBoundsException success) {}
720 }
721 }
722
723 /**
724 * a deserialized serialized list is equal
725 */
726 public void testSerialization() throws Exception {
727 List x = populatedArray(SIZE);
728 List y = serialClone(x);
729
730 assertNotSame(x, y);
731 assertEquals(x.size(), y.size());
732 assertEquals(x.toString(), y.toString());
733 assertTrue(Arrays.equals(x.toArray(), y.toArray()));
734 assertEquals(x, y);
735 assertEquals(y, x);
736 while (!x.isEmpty()) {
737 assertFalse(y.isEmpty());
738 assertEquals(x.remove(0), y.remove(0));
739 }
740 assertTrue(y.isEmpty());
741 }
742
743 }