ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.17
Committed: Thu Nov 18 20:21:53 2010 UTC (13 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.16: +9 -3 lines
Log Message:
add more assertions to testRemoveElement

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/licenses/publicdomain
5 */
6
7 import junit.framework.*;
8 import java.util.*;
9 import java.util.concurrent.*;
10 import java.io.*;
11
12 public class ConcurrentSkipListSubSetTest extends JSR166TestCase {
13 public static void main(String[] args) {
14 junit.textui.TestRunner.run(suite());
15 }
16 public static Test suite() {
17 return new TestSuite(ConcurrentSkipListSubSetTest.class);
18 }
19
20 static class MyReverseComparator implements Comparator {
21 public int compare(Object x, Object y) {
22 return ((Comparable)y).compareTo(x);
23 }
24 }
25
26 /**
27 * Create a set of given size containing consecutive
28 * Integers 0 ... n.
29 */
30 private NavigableSet<Integer> populatedSet(int n) {
31 ConcurrentSkipListSet<Integer> q =
32 new ConcurrentSkipListSet<Integer>();
33 assertTrue(q.isEmpty());
34
35 for (int i = n-1; i >= 0; i-=2)
36 assertTrue(q.add(new Integer(i)));
37 for (int i = (n & 1); i < n; i+=2)
38 assertTrue(q.add(new Integer(i)));
39 assertTrue(q.add(new Integer(-n)));
40 assertTrue(q.add(new Integer(n)));
41 NavigableSet s = q.subSet(new Integer(0), true, new Integer(n), false);
42 assertFalse(s.isEmpty());
43 assertEquals(n, s.size());
44 return s;
45 }
46
47 /**
48 * Create set of first 5 ints
49 */
50 private NavigableSet set5() {
51 ConcurrentSkipListSet q = new ConcurrentSkipListSet();
52 assertTrue(q.isEmpty());
53 q.add(one);
54 q.add(two);
55 q.add(three);
56 q.add(four);
57 q.add(five);
58 q.add(zero);
59 q.add(seven);
60 NavigableSet s = q.subSet(one, true, seven, false);
61 assertEquals(5, s.size());
62 return s;
63 }
64
65 /**
66 * Create set of first 5 negative ints
67 */
68 private NavigableSet dset5() {
69 ConcurrentSkipListSet q = new ConcurrentSkipListSet();
70 assertTrue(q.isEmpty());
71 q.add(m1);
72 q.add(m2);
73 q.add(m3);
74 q.add(m4);
75 q.add(m5);
76 NavigableSet s = q.descendingSet();
77 assertEquals(5, s.size());
78 return s;
79 }
80
81 private static NavigableSet set0() {
82 ConcurrentSkipListSet set = new ConcurrentSkipListSet();
83 assertTrue(set.isEmpty());
84 return set.tailSet(m1, true);
85 }
86
87 private static NavigableSet dset0() {
88 ConcurrentSkipListSet set = new ConcurrentSkipListSet();
89 assertTrue(set.isEmpty());
90 return set;
91 }
92
93 /**
94 * A new set has unbounded capacity
95 */
96 public void testConstructor1() {
97 assertEquals(0, set0().size());
98 }
99
100
101 /**
102 * isEmpty is true before add, false after
103 */
104 public void testEmpty() {
105 NavigableSet q = set0();
106 assertTrue(q.isEmpty());
107 q.add(new Integer(1));
108 assertFalse(q.isEmpty());
109 q.add(new Integer(2));
110 q.pollFirst();
111 q.pollFirst();
112 assertTrue(q.isEmpty());
113 }
114
115 /**
116 * size changes when elements added and removed
117 */
118 public void testSize() {
119 NavigableSet q = populatedSet(SIZE);
120 for (int i = 0; i < SIZE; ++i) {
121 assertEquals(SIZE-i, q.size());
122 q.pollFirst();
123 }
124 for (int i = 0; i < SIZE; ++i) {
125 assertEquals(i, q.size());
126 q.add(new Integer(i));
127 }
128 }
129
130 /**
131 * add(null) throws NPE
132 */
133 public void testAddNull() {
134 try {
135 NavigableSet q = set0();
136 q.add(null);
137 shouldThrow();
138 } catch (NullPointerException success) {}
139 }
140
141 /**
142 * Add of comparable element succeeds
143 */
144 public void testAdd() {
145 NavigableSet q = set0();
146 assertTrue(q.add(six));
147 }
148
149 /**
150 * Add of duplicate element fails
151 */
152 public void testAddDup() {
153 NavigableSet q = set0();
154 assertTrue(q.add(six));
155 assertFalse(q.add(six));
156 }
157
158 /**
159 * Add of non-Comparable throws CCE
160 */
161 public void testAddNonComparable() {
162 try {
163 NavigableSet q = set0();
164 q.add(new Object());
165 q.add(new Object());
166 q.add(new Object());
167 shouldThrow();
168 } catch (ClassCastException success) {}
169 }
170
171
172 /**
173 * addAll(null) throws NPE
174 */
175 public void testAddAll1() {
176 try {
177 NavigableSet q = set0();
178 q.addAll(null);
179 shouldThrow();
180 } catch (NullPointerException success) {}
181 }
182
183 /**
184 * addAll of a collection with null elements throws NPE
185 */
186 public void testAddAll2() {
187 try {
188 NavigableSet q = set0();
189 Integer[] ints = new Integer[SIZE];
190 q.addAll(Arrays.asList(ints));
191 shouldThrow();
192 } catch (NullPointerException success) {}
193 }
194
195 /**
196 * addAll of a collection with any null elements throws NPE after
197 * possibly adding some elements
198 */
199 public void testAddAll3() {
200 try {
201 NavigableSet q = set0();
202 Integer[] ints = new Integer[SIZE];
203 for (int i = 0; i < SIZE-1; ++i)
204 ints[i] = new Integer(i+SIZE);
205 q.addAll(Arrays.asList(ints));
206 shouldThrow();
207 } catch (NullPointerException success) {}
208 }
209
210 /**
211 * Set contains all elements of successful addAll
212 */
213 public void testAddAll5() {
214 Integer[] empty = new Integer[0];
215 Integer[] ints = new Integer[SIZE];
216 for (int i = 0; i < SIZE; ++i)
217 ints[i] = new Integer(SIZE-1- i);
218 NavigableSet q = set0();
219 assertFalse(q.addAll(Arrays.asList(empty)));
220 assertTrue(q.addAll(Arrays.asList(ints)));
221 for (int i = 0; i < SIZE; ++i)
222 assertEquals(new Integer(i), q.pollFirst());
223 }
224
225 /**
226 * poll succeeds unless empty
227 */
228 public void testPoll() {
229 NavigableSet q = populatedSet(SIZE);
230 for (int i = 0; i < SIZE; ++i) {
231 assertEquals(i, q.pollFirst());
232 }
233 assertNull(q.pollFirst());
234 }
235
236 /**
237 * remove(x) removes x and returns true if present
238 */
239 public void testRemoveElement() {
240 NavigableSet q = populatedSet(SIZE);
241 for (int i = 1; i < SIZE; i+=2) {
242 assertTrue(q.contains(i));
243 assertTrue(q.remove(i));
244 assertFalse(q.contains(i));
245 assertTrue(q.contains(i-1));
246 }
247 for (int i = 0; i < SIZE; i+=2) {
248 assertTrue(q.contains(i));
249 assertTrue(q.remove(i));
250 assertFalse(q.contains(i));
251 assertFalse(q.remove(i+1));
252 assertFalse(q.contains(i+1));
253 }
254 assertTrue(q.isEmpty());
255 }
256
257 /**
258 * contains(x) reports true when elements added but not yet removed
259 */
260 public void testContains() {
261 NavigableSet q = populatedSet(SIZE);
262 for (int i = 0; i < SIZE; ++i) {
263 assertTrue(q.contains(new Integer(i)));
264 q.pollFirst();
265 assertFalse(q.contains(new Integer(i)));
266 }
267 }
268
269 /**
270 * clear removes all elements
271 */
272 public void testClear() {
273 NavigableSet q = populatedSet(SIZE);
274 q.clear();
275 assertTrue(q.isEmpty());
276 assertEquals(0, q.size());
277 q.add(new Integer(1));
278 assertFalse(q.isEmpty());
279 q.clear();
280 assertTrue(q.isEmpty());
281 }
282
283 /**
284 * containsAll(c) is true when c contains a subset of elements
285 */
286 public void testContainsAll() {
287 NavigableSet q = populatedSet(SIZE);
288 NavigableSet p = set0();
289 for (int i = 0; i < SIZE; ++i) {
290 assertTrue(q.containsAll(p));
291 assertFalse(p.containsAll(q));
292 p.add(new Integer(i));
293 }
294 assertTrue(p.containsAll(q));
295 }
296
297 /**
298 * retainAll(c) retains only those elements of c and reports true if changed
299 */
300 public void testRetainAll() {
301 NavigableSet q = populatedSet(SIZE);
302 NavigableSet p = populatedSet(SIZE);
303 for (int i = 0; i < SIZE; ++i) {
304 boolean changed = q.retainAll(p);
305 if (i == 0)
306 assertFalse(changed);
307 else
308 assertTrue(changed);
309
310 assertTrue(q.containsAll(p));
311 assertEquals(SIZE-i, q.size());
312 p.pollFirst();
313 }
314 }
315
316 /**
317 * removeAll(c) removes only those elements of c and reports true if changed
318 */
319 public void testRemoveAll() {
320 for (int i = 1; i < SIZE; ++i) {
321 NavigableSet q = populatedSet(SIZE);
322 NavigableSet p = populatedSet(i);
323 assertTrue(q.removeAll(p));
324 assertEquals(SIZE-i, q.size());
325 for (int j = 0; j < i; ++j) {
326 Integer I = (Integer)(p.pollFirst());
327 assertFalse(q.contains(I));
328 }
329 }
330 }
331
332
333
334 /**
335 * lower returns preceding element
336 */
337 public void testLower() {
338 NavigableSet q = set5();
339 Object e1 = q.lower(three);
340 assertEquals(two, e1);
341
342 Object e2 = q.lower(six);
343 assertEquals(five, e2);
344
345 Object e3 = q.lower(one);
346 assertNull(e3);
347
348 Object e4 = q.lower(zero);
349 assertNull(e4);
350 }
351
352 /**
353 * higher returns next element
354 */
355 public void testHigher() {
356 NavigableSet q = set5();
357 Object e1 = q.higher(three);
358 assertEquals(four, e1);
359
360 Object e2 = q.higher(zero);
361 assertEquals(one, e2);
362
363 Object e3 = q.higher(five);
364 assertNull(e3);
365
366 Object e4 = q.higher(six);
367 assertNull(e4);
368 }
369
370 /**
371 * floor returns preceding element
372 */
373 public void testFloor() {
374 NavigableSet q = set5();
375 Object e1 = q.floor(three);
376 assertEquals(three, e1);
377
378 Object e2 = q.floor(six);
379 assertEquals(five, e2);
380
381 Object e3 = q.floor(one);
382 assertEquals(one, e3);
383
384 Object e4 = q.floor(zero);
385 assertNull(e4);
386 }
387
388 /**
389 * ceiling returns next element
390 */
391 public void testCeiling() {
392 NavigableSet q = set5();
393 Object e1 = q.ceiling(three);
394 assertEquals(three, e1);
395
396 Object e2 = q.ceiling(zero);
397 assertEquals(one, e2);
398
399 Object e3 = q.ceiling(five);
400 assertEquals(five, e3);
401
402 Object e4 = q.ceiling(six);
403 assertNull(e4);
404 }
405
406 /**
407 * toArray contains all elements in sorted order
408 */
409 public void testToArray() {
410 NavigableSet q = populatedSet(SIZE);
411 Object[] o = q.toArray();
412 for (int i = 0; i < o.length; i++)
413 assertSame(o[i], q.pollFirst());
414 }
415
416 /**
417 * toArray(a) contains all elements in sorted order
418 */
419 public void testToArray2() {
420 NavigableSet<Integer> q = populatedSet(SIZE);
421 Integer[] ints = new Integer[SIZE];
422 Integer[] array = q.toArray(ints);
423 assertSame(ints, array);
424 for (int i = 0; i < ints.length; i++)
425 assertSame(ints[i], q.pollFirst());
426 }
427
428 /**
429 * iterator iterates through all elements
430 */
431 public void testIterator() {
432 NavigableSet q = populatedSet(SIZE);
433 int i = 0;
434 Iterator it = q.iterator();
435 while (it.hasNext()) {
436 assertTrue(q.contains(it.next()));
437 ++i;
438 }
439 assertEquals(i, SIZE);
440 }
441
442 /**
443 * iterator of empty set has no elements
444 */
445 public void testEmptyIterator() {
446 NavigableSet q = set0();
447 int i = 0;
448 Iterator it = q.iterator();
449 while (it.hasNext()) {
450 assertTrue(q.contains(it.next()));
451 ++i;
452 }
453 assertEquals(i, 0);
454 }
455
456 /**
457 * iterator.remove removes current element
458 */
459 public void testIteratorRemove() {
460 final NavigableSet q = set0();
461 q.add(new Integer(2));
462 q.add(new Integer(1));
463 q.add(new Integer(3));
464
465 Iterator it = q.iterator();
466 it.next();
467 it.remove();
468
469 it = q.iterator();
470 assertEquals(it.next(), new Integer(2));
471 assertEquals(it.next(), new Integer(3));
472 assertFalse(it.hasNext());
473 }
474
475
476 /**
477 * toString contains toStrings of elements
478 */
479 public void testToString() {
480 NavigableSet q = populatedSet(SIZE);
481 String s = q.toString();
482 for (int i = 0; i < SIZE; ++i) {
483 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
484 }
485 }
486
487 /**
488 * A deserialized serialized set has same elements
489 */
490 public void testSerialization() throws Exception {
491 NavigableSet q = populatedSet(SIZE);
492 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
493 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
494 out.writeObject(q);
495 out.close();
496
497 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
498 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
499 NavigableSet r = (NavigableSet)in.readObject();
500 assertEquals(q.size(), r.size());
501 while (!q.isEmpty())
502 assertEquals(q.pollFirst(), r.pollFirst());
503 }
504
505 /**
506 * subSet returns set with keys in requested range
507 */
508 public void testSubSetContents() {
509 NavigableSet set = set5();
510 SortedSet sm = set.subSet(two, four);
511 assertEquals(two, sm.first());
512 assertEquals(three, sm.last());
513 assertEquals(2, sm.size());
514 assertFalse(sm.contains(one));
515 assertTrue(sm.contains(two));
516 assertTrue(sm.contains(three));
517 assertFalse(sm.contains(four));
518 assertFalse(sm.contains(five));
519 Iterator i = sm.iterator();
520 Object k;
521 k = (Integer)(i.next());
522 assertEquals(two, k);
523 k = (Integer)(i.next());
524 assertEquals(three, k);
525 assertFalse(i.hasNext());
526 Iterator j = sm.iterator();
527 j.next();
528 j.remove();
529 assertFalse(set.contains(two));
530 assertEquals(4, set.size());
531 assertEquals(1, sm.size());
532 assertEquals(three, sm.first());
533 assertEquals(three, sm.last());
534 assertTrue(sm.remove(three));
535 assertTrue(sm.isEmpty());
536 assertEquals(3, set.size());
537 }
538
539 public void testSubSetContents2() {
540 NavigableSet set = set5();
541 SortedSet sm = set.subSet(two, three);
542 assertEquals(1, sm.size());
543 assertEquals(two, sm.first());
544 assertEquals(two, sm.last());
545 assertFalse(sm.contains(one));
546 assertTrue(sm.contains(two));
547 assertFalse(sm.contains(three));
548 assertFalse(sm.contains(four));
549 assertFalse(sm.contains(five));
550 Iterator i = sm.iterator();
551 Object k;
552 k = (Integer)(i.next());
553 assertEquals(two, k);
554 assertFalse(i.hasNext());
555 Iterator j = sm.iterator();
556 j.next();
557 j.remove();
558 assertFalse(set.contains(two));
559 assertEquals(4, set.size());
560 assertEquals(0, sm.size());
561 assertTrue(sm.isEmpty());
562 assertFalse(sm.remove(three));
563 assertEquals(4, set.size());
564 }
565
566 /**
567 * headSet returns set with keys in requested range
568 */
569 public void testHeadSetContents() {
570 NavigableSet set = set5();
571 SortedSet sm = set.headSet(four);
572 assertTrue(sm.contains(one));
573 assertTrue(sm.contains(two));
574 assertTrue(sm.contains(three));
575 assertFalse(sm.contains(four));
576 assertFalse(sm.contains(five));
577 Iterator i = sm.iterator();
578 Object k;
579 k = (Integer)(i.next());
580 assertEquals(one, k);
581 k = (Integer)(i.next());
582 assertEquals(two, k);
583 k = (Integer)(i.next());
584 assertEquals(three, k);
585 assertFalse(i.hasNext());
586 sm.clear();
587 assertTrue(sm.isEmpty());
588 assertEquals(2, set.size());
589 assertEquals(four, set.first());
590 }
591
592 /**
593 * tailSet returns set with keys in requested range
594 */
595 public void testTailSetContents() {
596 NavigableSet set = set5();
597 SortedSet sm = set.tailSet(two);
598 assertFalse(sm.contains(one));
599 assertTrue(sm.contains(two));
600 assertTrue(sm.contains(three));
601 assertTrue(sm.contains(four));
602 assertTrue(sm.contains(five));
603 Iterator i = sm.iterator();
604 Object k;
605 k = (Integer)(i.next());
606 assertEquals(two, k);
607 k = (Integer)(i.next());
608 assertEquals(three, k);
609 k = (Integer)(i.next());
610 assertEquals(four, k);
611 k = (Integer)(i.next());
612 assertEquals(five, k);
613 assertFalse(i.hasNext());
614
615 SortedSet ssm = sm.tailSet(four);
616 assertEquals(four, ssm.first());
617 assertEquals(five, ssm.last());
618 assertTrue(ssm.remove(four));
619 assertEquals(1, ssm.size());
620 assertEquals(3, sm.size());
621 assertEquals(4, set.size());
622 }
623
624 /**
625 * size changes when elements added and removed
626 */
627 public void testDescendingSize() {
628 NavigableSet q = populatedSet(SIZE);
629 for (int i = 0; i < SIZE; ++i) {
630 assertEquals(SIZE-i, q.size());
631 q.pollFirst();
632 }
633 for (int i = 0; i < SIZE; ++i) {
634 assertEquals(i, q.size());
635 q.add(new Integer(i));
636 }
637 }
638
639 /**
640 * add(null) throws NPE
641 */
642 public void testDescendingAddNull() {
643 try {
644 NavigableSet q = dset0();
645 q.add(null);
646 shouldThrow();
647 } catch (NullPointerException success) {}
648 }
649
650 /**
651 * Add of comparable element succeeds
652 */
653 public void testDescendingAdd() {
654 NavigableSet q = dset0();
655 assertTrue(q.add(m6));
656 }
657
658 /**
659 * Add of duplicate element fails
660 */
661 public void testDescendingAddDup() {
662 NavigableSet q = dset0();
663 assertTrue(q.add(m6));
664 assertFalse(q.add(m6));
665 }
666
667 /**
668 * Add of non-Comparable throws CCE
669 */
670 public void testDescendingAddNonComparable() {
671 try {
672 NavigableSet q = dset0();
673 q.add(new Object());
674 q.add(new Object());
675 q.add(new Object());
676 shouldThrow();
677 } catch (ClassCastException success) {}
678 }
679
680
681 /**
682 * addAll(null) throws NPE
683 */
684 public void testDescendingAddAll1() {
685 try {
686 NavigableSet q = dset0();
687 q.addAll(null);
688 shouldThrow();
689 } catch (NullPointerException success) {}
690 }
691
692 /**
693 * addAll of a collection with null elements throws NPE
694 */
695 public void testDescendingAddAll2() {
696 try {
697 NavigableSet q = dset0();
698 Integer[] ints = new Integer[SIZE];
699 q.addAll(Arrays.asList(ints));
700 shouldThrow();
701 } catch (NullPointerException success) {}
702 }
703
704 /**
705 * addAll of a collection with any null elements throws NPE after
706 * possibly adding some elements
707 */
708 public void testDescendingAddAll3() {
709 try {
710 NavigableSet q = dset0();
711 Integer[] ints = new Integer[SIZE];
712 for (int i = 0; i < SIZE-1; ++i)
713 ints[i] = new Integer(i+SIZE);
714 q.addAll(Arrays.asList(ints));
715 shouldThrow();
716 } catch (NullPointerException success) {}
717 }
718
719 /**
720 * Set contains all elements of successful addAll
721 */
722 public void testDescendingAddAll5() {
723 Integer[] empty = new Integer[0];
724 Integer[] ints = new Integer[SIZE];
725 for (int i = 0; i < SIZE; ++i)
726 ints[i] = new Integer(SIZE-1- i);
727 NavigableSet q = dset0();
728 assertFalse(q.addAll(Arrays.asList(empty)));
729 assertTrue(q.addAll(Arrays.asList(ints)));
730 for (int i = 0; i < SIZE; ++i)
731 assertEquals(new Integer(i), q.pollFirst());
732 }
733
734 /**
735 * poll succeeds unless empty
736 */
737 public void testDescendingPoll() {
738 NavigableSet q = populatedSet(SIZE);
739 for (int i = 0; i < SIZE; ++i) {
740 assertEquals(i, q.pollFirst());
741 }
742 assertNull(q.pollFirst());
743 }
744
745 /**
746 * remove(x) removes x and returns true if present
747 */
748 public void testDescendingRemoveElement() {
749 NavigableSet q = populatedSet(SIZE);
750 for (int i = 1; i < SIZE; i+=2) {
751 assertTrue(q.remove(new Integer(i)));
752 }
753 for (int i = 0; i < SIZE; i+=2) {
754 assertTrue(q.remove(new Integer(i)));
755 assertFalse(q.remove(new Integer(i+1)));
756 }
757 assertTrue(q.isEmpty());
758 }
759
760 /**
761 * contains(x) reports true when elements added but not yet removed
762 */
763 public void testDescendingContains() {
764 NavigableSet q = populatedSet(SIZE);
765 for (int i = 0; i < SIZE; ++i) {
766 assertTrue(q.contains(new Integer(i)));
767 q.pollFirst();
768 assertFalse(q.contains(new Integer(i)));
769 }
770 }
771
772 /**
773 * clear removes all elements
774 */
775 public void testDescendingClear() {
776 NavigableSet q = populatedSet(SIZE);
777 q.clear();
778 assertTrue(q.isEmpty());
779 assertEquals(0, q.size());
780 q.add(new Integer(1));
781 assertFalse(q.isEmpty());
782 q.clear();
783 assertTrue(q.isEmpty());
784 }
785
786 /**
787 * containsAll(c) is true when c contains a subset of elements
788 */
789 public void testDescendingContainsAll() {
790 NavigableSet q = populatedSet(SIZE);
791 NavigableSet p = dset0();
792 for (int i = 0; i < SIZE; ++i) {
793 assertTrue(q.containsAll(p));
794 assertFalse(p.containsAll(q));
795 p.add(new Integer(i));
796 }
797 assertTrue(p.containsAll(q));
798 }
799
800 /**
801 * retainAll(c) retains only those elements of c and reports true if changed
802 */
803 public void testDescendingRetainAll() {
804 NavigableSet q = populatedSet(SIZE);
805 NavigableSet p = populatedSet(SIZE);
806 for (int i = 0; i < SIZE; ++i) {
807 boolean changed = q.retainAll(p);
808 if (i == 0)
809 assertFalse(changed);
810 else
811 assertTrue(changed);
812
813 assertTrue(q.containsAll(p));
814 assertEquals(SIZE-i, q.size());
815 p.pollFirst();
816 }
817 }
818
819 /**
820 * removeAll(c) removes only those elements of c and reports true if changed
821 */
822 public void testDescendingRemoveAll() {
823 for (int i = 1; i < SIZE; ++i) {
824 NavigableSet q = populatedSet(SIZE);
825 NavigableSet p = populatedSet(i);
826 assertTrue(q.removeAll(p));
827 assertEquals(SIZE-i, q.size());
828 for (int j = 0; j < i; ++j) {
829 Integer I = (Integer)(p.pollFirst());
830 assertFalse(q.contains(I));
831 }
832 }
833 }
834
835
836
837 /**
838 * lower returns preceding element
839 */
840 public void testDescendingLower() {
841 NavigableSet q = dset5();
842 Object e1 = q.lower(m3);
843 assertEquals(m2, e1);
844
845 Object e2 = q.lower(m6);
846 assertEquals(m5, e2);
847
848 Object e3 = q.lower(m1);
849 assertNull(e3);
850
851 Object e4 = q.lower(zero);
852 assertNull(e4);
853 }
854
855 /**
856 * higher returns next element
857 */
858 public void testDescendingHigher() {
859 NavigableSet q = dset5();
860 Object e1 = q.higher(m3);
861 assertEquals(m4, e1);
862
863 Object e2 = q.higher(zero);
864 assertEquals(m1, e2);
865
866 Object e3 = q.higher(m5);
867 assertNull(e3);
868
869 Object e4 = q.higher(m6);
870 assertNull(e4);
871 }
872
873 /**
874 * floor returns preceding element
875 */
876 public void testDescendingFloor() {
877 NavigableSet q = dset5();
878 Object e1 = q.floor(m3);
879 assertEquals(m3, e1);
880
881 Object e2 = q.floor(m6);
882 assertEquals(m5, e2);
883
884 Object e3 = q.floor(m1);
885 assertEquals(m1, e3);
886
887 Object e4 = q.floor(zero);
888 assertNull(e4);
889 }
890
891 /**
892 * ceiling returns next element
893 */
894 public void testDescendingCeiling() {
895 NavigableSet q = dset5();
896 Object e1 = q.ceiling(m3);
897 assertEquals(m3, e1);
898
899 Object e2 = q.ceiling(zero);
900 assertEquals(m1, e2);
901
902 Object e3 = q.ceiling(m5);
903 assertEquals(m5, e3);
904
905 Object e4 = q.ceiling(m6);
906 assertNull(e4);
907 }
908
909 /**
910 * toArray contains all elements
911 */
912 public void testDescendingToArray() {
913 NavigableSet q = populatedSet(SIZE);
914 Object[] o = q.toArray();
915 Arrays.sort(o);
916 for (int i = 0; i < o.length; i++)
917 assertEquals(o[i], q.pollFirst());
918 }
919
920 /**
921 * toArray(a) contains all elements
922 */
923 public void testDescendingToArray2() {
924 NavigableSet q = populatedSet(SIZE);
925 Integer[] ints = new Integer[SIZE];
926 assertSame(ints, q.toArray(ints));
927 Arrays.sort(ints);
928 for (int i = 0; i < ints.length; i++)
929 assertEquals(ints[i], q.pollFirst());
930 }
931
932 /**
933 * iterator iterates through all elements
934 */
935 public void testDescendingIterator() {
936 NavigableSet q = populatedSet(SIZE);
937 int i = 0;
938 Iterator it = q.iterator();
939 while (it.hasNext()) {
940 assertTrue(q.contains(it.next()));
941 ++i;
942 }
943 assertEquals(i, SIZE);
944 }
945
946 /**
947 * iterator of empty set has no elements
948 */
949 public void testDescendingEmptyIterator() {
950 NavigableSet q = dset0();
951 int i = 0;
952 Iterator it = q.iterator();
953 while (it.hasNext()) {
954 assertTrue(q.contains(it.next()));
955 ++i;
956 }
957 assertEquals(i, 0);
958 }
959
960 /**
961 * iterator.remove removes current element
962 */
963 public void testDescendingIteratorRemove() {
964 final NavigableSet q = dset0();
965 q.add(new Integer(2));
966 q.add(new Integer(1));
967 q.add(new Integer(3));
968
969 Iterator it = q.iterator();
970 it.next();
971 it.remove();
972
973 it = q.iterator();
974 assertEquals(it.next(), new Integer(2));
975 assertEquals(it.next(), new Integer(3));
976 assertFalse(it.hasNext());
977 }
978
979
980 /**
981 * toString contains toStrings of elements
982 */
983 public void testDescendingToString() {
984 NavigableSet q = populatedSet(SIZE);
985 String s = q.toString();
986 for (int i = 0; i < SIZE; ++i) {
987 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
988 }
989 }
990
991 /**
992 * A deserialized serialized set has same elements
993 */
994 public void testDescendingSerialization() throws Exception {
995 NavigableSet q = populatedSet(SIZE);
996 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
997 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
998 out.writeObject(q);
999 out.close();
1000
1001 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
1002 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
1003 NavigableSet r = (NavigableSet)in.readObject();
1004 assertEquals(q.size(), r.size());
1005 while (!q.isEmpty())
1006 assertEquals(q.pollFirst(), r.pollFirst());
1007 }
1008
1009 /**
1010 * subSet returns set with keys in requested range
1011 */
1012 public void testDescendingSubSetContents() {
1013 NavigableSet set = dset5();
1014 SortedSet sm = set.subSet(m2, m4);
1015 assertEquals(m2, sm.first());
1016 assertEquals(m3, sm.last());
1017 assertEquals(2, sm.size());
1018 assertFalse(sm.contains(m1));
1019 assertTrue(sm.contains(m2));
1020 assertTrue(sm.contains(m3));
1021 assertFalse(sm.contains(m4));
1022 assertFalse(sm.contains(m5));
1023 Iterator i = sm.iterator();
1024 Object k;
1025 k = (Integer)(i.next());
1026 assertEquals(m2, k);
1027 k = (Integer)(i.next());
1028 assertEquals(m3, k);
1029 assertFalse(i.hasNext());
1030 Iterator j = sm.iterator();
1031 j.next();
1032 j.remove();
1033 assertFalse(set.contains(m2));
1034 assertEquals(4, set.size());
1035 assertEquals(1, sm.size());
1036 assertEquals(m3, sm.first());
1037 assertEquals(m3, sm.last());
1038 assertTrue(sm.remove(m3));
1039 assertTrue(sm.isEmpty());
1040 assertEquals(3, set.size());
1041 }
1042
1043 public void testDescendingSubSetContents2() {
1044 NavigableSet set = dset5();
1045 SortedSet sm = set.subSet(m2, m3);
1046 assertEquals(1, sm.size());
1047 assertEquals(m2, sm.first());
1048 assertEquals(m2, sm.last());
1049 assertFalse(sm.contains(m1));
1050 assertTrue(sm.contains(m2));
1051 assertFalse(sm.contains(m3));
1052 assertFalse(sm.contains(m4));
1053 assertFalse(sm.contains(m5));
1054 Iterator i = sm.iterator();
1055 Object k;
1056 k = (Integer)(i.next());
1057 assertEquals(m2, k);
1058 assertFalse(i.hasNext());
1059 Iterator j = sm.iterator();
1060 j.next();
1061 j.remove();
1062 assertFalse(set.contains(m2));
1063 assertEquals(4, set.size());
1064 assertEquals(0, sm.size());
1065 assertTrue(sm.isEmpty());
1066 assertFalse(sm.remove(m3));
1067 assertEquals(4, set.size());
1068 }
1069
1070 /**
1071 * headSet returns set with keys in requested range
1072 */
1073 public void testDescendingHeadSetContents() {
1074 NavigableSet set = dset5();
1075 SortedSet sm = set.headSet(m4);
1076 assertTrue(sm.contains(m1));
1077 assertTrue(sm.contains(m2));
1078 assertTrue(sm.contains(m3));
1079 assertFalse(sm.contains(m4));
1080 assertFalse(sm.contains(m5));
1081 Iterator i = sm.iterator();
1082 Object k;
1083 k = (Integer)(i.next());
1084 assertEquals(m1, k);
1085 k = (Integer)(i.next());
1086 assertEquals(m2, k);
1087 k = (Integer)(i.next());
1088 assertEquals(m3, k);
1089 assertFalse(i.hasNext());
1090 sm.clear();
1091 assertTrue(sm.isEmpty());
1092 assertEquals(2, set.size());
1093 assertEquals(m4, set.first());
1094 }
1095
1096 /**
1097 * tailSet returns set with keys in requested range
1098 */
1099 public void testDescendingTailSetContents() {
1100 NavigableSet set = dset5();
1101 SortedSet sm = set.tailSet(m2);
1102 assertFalse(sm.contains(m1));
1103 assertTrue(sm.contains(m2));
1104 assertTrue(sm.contains(m3));
1105 assertTrue(sm.contains(m4));
1106 assertTrue(sm.contains(m5));
1107 Iterator i = sm.iterator();
1108 Object k;
1109 k = (Integer)(i.next());
1110 assertEquals(m2, k);
1111 k = (Integer)(i.next());
1112 assertEquals(m3, k);
1113 k = (Integer)(i.next());
1114 assertEquals(m4, k);
1115 k = (Integer)(i.next());
1116 assertEquals(m5, k);
1117 assertFalse(i.hasNext());
1118
1119 SortedSet ssm = sm.tailSet(m4);
1120 assertEquals(m4, ssm.first());
1121 assertEquals(m5, ssm.last());
1122 assertTrue(ssm.remove(m4));
1123 assertEquals(1, ssm.size());
1124 assertEquals(3, sm.size());
1125 assertEquals(4, set.size());
1126 }
1127
1128 }