ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.36
Committed: Sat Mar 11 18:20:47 2017 UTC (7 years, 2 months ago) by jsr166
Branch: MAIN
Changes since 1.35: +3 -3 lines
Log Message:
make some methods static as suggested by errorprone [MethodCanBeStatic]

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