ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.29
Committed: Sat Jan 17 22:55:07 2015 UTC (9 years, 3 months ago) by jsr166
Branch: MAIN
Changes since 1.28: +4 -12 lines
Log Message:
add more tests of exhausted iterators

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