ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.24
Committed: Tue Apr 2 22:18:26 2013 UTC (11 years, 1 month ago) by jsr166
Branch: MAIN
Changes since 1.23: +12 -0 lines
Log Message:
add new test testAllAll_idempotent

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