ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.27
Committed: Wed Dec 31 20:09:09 2014 UTC (9 years, 4 months ago) by jsr166
Branch: MAIN
Changes since 1.26: +6 -6 lines
Log Message:
whitespace

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 I = (Integer)(p.pollFirst());
327 assertFalse(q.contains(I));
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 int i = 0;
432 Iterator it = q.iterator();
433 while (it.hasNext()) {
434 assertTrue(q.contains(it.next()));
435 ++i;
436 }
437 assertEquals(i, SIZE);
438 }
439
440 /**
441 * iterator of empty set has no elements
442 */
443 public void testEmptyIterator() {
444 NavigableSet q = set0();
445 int i = 0;
446 Iterator it = q.iterator();
447 while (it.hasNext()) {
448 assertTrue(q.contains(it.next()));
449 ++i;
450 }
451 assertEquals(0, i);
452 }
453
454 /**
455 * iterator.remove removes current element
456 */
457 public void testIteratorRemove() {
458 final NavigableSet q = set0();
459 q.add(new Integer(2));
460 q.add(new Integer(1));
461 q.add(new Integer(3));
462
463 Iterator it = q.iterator();
464 it.next();
465 it.remove();
466
467 it = q.iterator();
468 assertEquals(2, it.next());
469 assertEquals(3, it.next());
470 assertFalse(it.hasNext());
471 }
472
473 /**
474 * toString contains toStrings of elements
475 */
476 public void testToString() {
477 NavigableSet q = populatedSet(SIZE);
478 String s = q.toString();
479 for (int i = 0; i < SIZE; ++i) {
480 assertTrue(s.contains(String.valueOf(i)));
481 }
482 }
483
484 /**
485 * A deserialized serialized set has same elements
486 */
487 public void testSerialization() throws Exception {
488 NavigableSet x = populatedSet(SIZE);
489 NavigableSet y = serialClone(x);
490
491 assertNotSame(x, y);
492 assertEquals(x.size(), y.size());
493 assertEquals(x, y);
494 assertEquals(y, x);
495 while (!x.isEmpty()) {
496 assertFalse(y.isEmpty());
497 assertEquals(x.pollFirst(), y.pollFirst());
498 }
499 assertTrue(y.isEmpty());
500 }
501
502 /**
503 * subSet returns set with keys in requested range
504 */
505 public void testSubSetContents() {
506 NavigableSet set = set5();
507 SortedSet sm = set.subSet(two, four);
508 assertEquals(two, sm.first());
509 assertEquals(three, sm.last());
510 assertEquals(2, sm.size());
511 assertFalse(sm.contains(one));
512 assertTrue(sm.contains(two));
513 assertTrue(sm.contains(three));
514 assertFalse(sm.contains(four));
515 assertFalse(sm.contains(five));
516 Iterator i = sm.iterator();
517 Object k;
518 k = (Integer)(i.next());
519 assertEquals(two, k);
520 k = (Integer)(i.next());
521 assertEquals(three, k);
522 assertFalse(i.hasNext());
523 Iterator j = sm.iterator();
524 j.next();
525 j.remove();
526 assertFalse(set.contains(two));
527 assertEquals(4, set.size());
528 assertEquals(1, sm.size());
529 assertEquals(three, sm.first());
530 assertEquals(three, sm.last());
531 assertTrue(sm.remove(three));
532 assertTrue(sm.isEmpty());
533 assertEquals(3, set.size());
534 }
535
536 public void testSubSetContents2() {
537 NavigableSet set = set5();
538 SortedSet sm = set.subSet(two, three);
539 assertEquals(1, sm.size());
540 assertEquals(two, sm.first());
541 assertEquals(two, sm.last());
542 assertFalse(sm.contains(one));
543 assertTrue(sm.contains(two));
544 assertFalse(sm.contains(three));
545 assertFalse(sm.contains(four));
546 assertFalse(sm.contains(five));
547 Iterator i = sm.iterator();
548 Object k;
549 k = (Integer)(i.next());
550 assertEquals(two, k);
551 assertFalse(i.hasNext());
552 Iterator j = sm.iterator();
553 j.next();
554 j.remove();
555 assertFalse(set.contains(two));
556 assertEquals(4, set.size());
557 assertEquals(0, sm.size());
558 assertTrue(sm.isEmpty());
559 assertFalse(sm.remove(three));
560 assertEquals(4, set.size());
561 }
562
563 /**
564 * headSet returns set with keys in requested range
565 */
566 public void testHeadSetContents() {
567 NavigableSet set = set5();
568 SortedSet sm = set.headSet(four);
569 assertTrue(sm.contains(one));
570 assertTrue(sm.contains(two));
571 assertTrue(sm.contains(three));
572 assertFalse(sm.contains(four));
573 assertFalse(sm.contains(five));
574 Iterator i = sm.iterator();
575 Object k;
576 k = (Integer)(i.next());
577 assertEquals(one, k);
578 k = (Integer)(i.next());
579 assertEquals(two, k);
580 k = (Integer)(i.next());
581 assertEquals(three, k);
582 assertFalse(i.hasNext());
583 sm.clear();
584 assertTrue(sm.isEmpty());
585 assertEquals(2, set.size());
586 assertEquals(four, set.first());
587 }
588
589 /**
590 * tailSet returns set with keys in requested range
591 */
592 public void testTailSetContents() {
593 NavigableSet set = set5();
594 SortedSet sm = set.tailSet(two);
595 assertFalse(sm.contains(one));
596 assertTrue(sm.contains(two));
597 assertTrue(sm.contains(three));
598 assertTrue(sm.contains(four));
599 assertTrue(sm.contains(five));
600 Iterator i = sm.iterator();
601 Object k;
602 k = (Integer)(i.next());
603 assertEquals(two, k);
604 k = (Integer)(i.next());
605 assertEquals(three, k);
606 k = (Integer)(i.next());
607 assertEquals(four, k);
608 k = (Integer)(i.next());
609 assertEquals(five, k);
610 assertFalse(i.hasNext());
611
612 SortedSet ssm = sm.tailSet(four);
613 assertEquals(four, ssm.first());
614 assertEquals(five, ssm.last());
615 assertTrue(ssm.remove(four));
616 assertEquals(1, ssm.size());
617 assertEquals(3, sm.size());
618 assertEquals(4, set.size());
619 }
620
621 /**
622 * size changes when elements added and removed
623 */
624 public void testDescendingSize() {
625 NavigableSet q = populatedSet(SIZE);
626 for (int i = 0; i < SIZE; ++i) {
627 assertEquals(SIZE-i, q.size());
628 q.pollFirst();
629 }
630 for (int i = 0; i < SIZE; ++i) {
631 assertEquals(i, q.size());
632 q.add(new Integer(i));
633 }
634 }
635
636 /**
637 * Add of comparable element succeeds
638 */
639 public void testDescendingAdd() {
640 NavigableSet q = dset0();
641 assertTrue(q.add(m6));
642 }
643
644 /**
645 * Add of duplicate element fails
646 */
647 public void testDescendingAddDup() {
648 NavigableSet q = dset0();
649 assertTrue(q.add(m6));
650 assertFalse(q.add(m6));
651 }
652
653 /**
654 * Add of non-Comparable throws CCE
655 */
656 public void testDescendingAddNonComparable() {
657 try {
658 NavigableSet q = dset0();
659 q.add(new Object());
660 q.add(new Object());
661 q.add(new Object());
662 shouldThrow();
663 } catch (ClassCastException success) {}
664 }
665
666 /**
667 * addAll(null) throws NPE
668 */
669 public void testDescendingAddAll1() {
670 try {
671 NavigableSet q = dset0();
672 q.addAll(null);
673 shouldThrow();
674 } catch (NullPointerException success) {}
675 }
676
677 /**
678 * addAll of a collection with null elements throws NPE
679 */
680 public void testDescendingAddAll2() {
681 try {
682 NavigableSet q = dset0();
683 Integer[] ints = new Integer[SIZE];
684 q.addAll(Arrays.asList(ints));
685 shouldThrow();
686 } catch (NullPointerException success) {}
687 }
688
689 /**
690 * addAll of a collection with any null elements throws NPE after
691 * possibly adding some elements
692 */
693 public void testDescendingAddAll3() {
694 try {
695 NavigableSet q = dset0();
696 Integer[] ints = new Integer[SIZE];
697 for (int i = 0; i < SIZE-1; ++i)
698 ints[i] = new Integer(i+SIZE);
699 q.addAll(Arrays.asList(ints));
700 shouldThrow();
701 } catch (NullPointerException success) {}
702 }
703
704 /**
705 * Set contains all elements of successful addAll
706 */
707 public void testDescendingAddAll5() {
708 Integer[] empty = new Integer[0];
709 Integer[] ints = new Integer[SIZE];
710 for (int i = 0; i < SIZE; ++i)
711 ints[i] = new Integer(SIZE-1- i);
712 NavigableSet q = dset0();
713 assertFalse(q.addAll(Arrays.asList(empty)));
714 assertTrue(q.addAll(Arrays.asList(ints)));
715 for (int i = 0; i < SIZE; ++i)
716 assertEquals(new Integer(i), q.pollFirst());
717 }
718
719 /**
720 * poll succeeds unless empty
721 */
722 public void testDescendingPoll() {
723 NavigableSet q = populatedSet(SIZE);
724 for (int i = 0; i < SIZE; ++i) {
725 assertEquals(i, q.pollFirst());
726 }
727 assertNull(q.pollFirst());
728 }
729
730 /**
731 * remove(x) removes x and returns true if present
732 */
733 public void testDescendingRemoveElement() {
734 NavigableSet q = populatedSet(SIZE);
735 for (int i = 1; i < SIZE; i += 2) {
736 assertTrue(q.remove(new Integer(i)));
737 }
738 for (int i = 0; i < SIZE; i += 2) {
739 assertTrue(q.remove(new Integer(i)));
740 assertFalse(q.remove(new Integer(i+1)));
741 }
742 assertTrue(q.isEmpty());
743 }
744
745 /**
746 * contains(x) reports true when elements added but not yet removed
747 */
748 public void testDescendingContains() {
749 NavigableSet q = populatedSet(SIZE);
750 for (int i = 0; i < SIZE; ++i) {
751 assertTrue(q.contains(new Integer(i)));
752 q.pollFirst();
753 assertFalse(q.contains(new Integer(i)));
754 }
755 }
756
757 /**
758 * clear removes all elements
759 */
760 public void testDescendingClear() {
761 NavigableSet q = populatedSet(SIZE);
762 q.clear();
763 assertTrue(q.isEmpty());
764 assertEquals(0, q.size());
765 assertTrue(q.add(new Integer(1)));
766 assertFalse(q.isEmpty());
767 q.clear();
768 assertTrue(q.isEmpty());
769 }
770
771 /**
772 * containsAll(c) is true when c contains a subset of elements
773 */
774 public void testDescendingContainsAll() {
775 NavigableSet q = populatedSet(SIZE);
776 NavigableSet p = dset0();
777 for (int i = 0; i < SIZE; ++i) {
778 assertTrue(q.containsAll(p));
779 assertFalse(p.containsAll(q));
780 p.add(new Integer(i));
781 }
782 assertTrue(p.containsAll(q));
783 }
784
785 /**
786 * retainAll(c) retains only those elements of c and reports true if changed
787 */
788 public void testDescendingRetainAll() {
789 NavigableSet q = populatedSet(SIZE);
790 NavigableSet p = populatedSet(SIZE);
791 for (int i = 0; i < SIZE; ++i) {
792 boolean changed = q.retainAll(p);
793 if (i == 0)
794 assertFalse(changed);
795 else
796 assertTrue(changed);
797
798 assertTrue(q.containsAll(p));
799 assertEquals(SIZE-i, q.size());
800 p.pollFirst();
801 }
802 }
803
804 /**
805 * removeAll(c) removes only those elements of c and reports true if changed
806 */
807 public void testDescendingRemoveAll() {
808 for (int i = 1; i < SIZE; ++i) {
809 NavigableSet q = populatedSet(SIZE);
810 NavigableSet p = populatedSet(i);
811 assertTrue(q.removeAll(p));
812 assertEquals(SIZE-i, q.size());
813 for (int j = 0; j < i; ++j) {
814 Integer I = (Integer)(p.pollFirst());
815 assertFalse(q.contains(I));
816 }
817 }
818 }
819
820 /**
821 * lower returns preceding element
822 */
823 public void testDescendingLower() {
824 NavigableSet q = dset5();
825 Object e1 = q.lower(m3);
826 assertEquals(m2, e1);
827
828 Object e2 = q.lower(m6);
829 assertEquals(m5, e2);
830
831 Object e3 = q.lower(m1);
832 assertNull(e3);
833
834 Object e4 = q.lower(zero);
835 assertNull(e4);
836 }
837
838 /**
839 * higher returns next element
840 */
841 public void testDescendingHigher() {
842 NavigableSet q = dset5();
843 Object e1 = q.higher(m3);
844 assertEquals(m4, e1);
845
846 Object e2 = q.higher(zero);
847 assertEquals(m1, e2);
848
849 Object e3 = q.higher(m5);
850 assertNull(e3);
851
852 Object e4 = q.higher(m6);
853 assertNull(e4);
854 }
855
856 /**
857 * floor returns preceding element
858 */
859 public void testDescendingFloor() {
860 NavigableSet q = dset5();
861 Object e1 = q.floor(m3);
862 assertEquals(m3, e1);
863
864 Object e2 = q.floor(m6);
865 assertEquals(m5, e2);
866
867 Object e3 = q.floor(m1);
868 assertEquals(m1, e3);
869
870 Object e4 = q.floor(zero);
871 assertNull(e4);
872 }
873
874 /**
875 * ceiling returns next element
876 */
877 public void testDescendingCeiling() {
878 NavigableSet q = dset5();
879 Object e1 = q.ceiling(m3);
880 assertEquals(m3, e1);
881
882 Object e2 = q.ceiling(zero);
883 assertEquals(m1, e2);
884
885 Object e3 = q.ceiling(m5);
886 assertEquals(m5, e3);
887
888 Object e4 = q.ceiling(m6);
889 assertNull(e4);
890 }
891
892 /**
893 * toArray contains all elements
894 */
895 public void testDescendingToArray() {
896 NavigableSet q = populatedSet(SIZE);
897 Object[] o = q.toArray();
898 Arrays.sort(o);
899 for (int i = 0; i < o.length; i++)
900 assertEquals(o[i], q.pollFirst());
901 }
902
903 /**
904 * toArray(a) contains all elements
905 */
906 public void testDescendingToArray2() {
907 NavigableSet q = populatedSet(SIZE);
908 Integer[] ints = new Integer[SIZE];
909 assertSame(ints, q.toArray(ints));
910 Arrays.sort(ints);
911 for (int i = 0; i < ints.length; i++)
912 assertEquals(ints[i], q.pollFirst());
913 }
914
915 /**
916 * iterator iterates through all elements
917 */
918 public void testDescendingIterator() {
919 NavigableSet q = populatedSet(SIZE);
920 int i = 0;
921 Iterator it = q.iterator();
922 while (it.hasNext()) {
923 assertTrue(q.contains(it.next()));
924 ++i;
925 }
926 assertEquals(i, SIZE);
927 }
928
929 /**
930 * iterator of empty set has no elements
931 */
932 public void testDescendingEmptyIterator() {
933 NavigableSet q = dset0();
934 int i = 0;
935 Iterator it = q.iterator();
936 while (it.hasNext()) {
937 assertTrue(q.contains(it.next()));
938 ++i;
939 }
940 assertEquals(0, i);
941 }
942
943 /**
944 * iterator.remove removes current element
945 */
946 public void testDescendingIteratorRemove() {
947 final NavigableSet q = dset0();
948 q.add(new Integer(2));
949 q.add(new Integer(1));
950 q.add(new Integer(3));
951
952 Iterator it = q.iterator();
953 it.next();
954 it.remove();
955
956 it = q.iterator();
957 assertEquals(2, it.next());
958 assertEquals(3, it.next());
959 assertFalse(it.hasNext());
960 }
961
962 /**
963 * toString contains toStrings of elements
964 */
965 public void testDescendingToString() {
966 NavigableSet q = populatedSet(SIZE);
967 String s = q.toString();
968 for (int i = 0; i < SIZE; ++i) {
969 assertTrue(s.contains(String.valueOf(i)));
970 }
971 }
972
973 /**
974 * A deserialized serialized set has same elements
975 */
976 public void testDescendingSerialization() throws Exception {
977 NavigableSet x = dset5();
978 NavigableSet y = serialClone(x);
979
980 assertNotSame(x, y);
981 assertEquals(x.size(), y.size());
982 assertEquals(x.toString(), y.toString());
983 assertEquals(x, y);
984 assertEquals(y, x);
985 while (!x.isEmpty()) {
986 assertFalse(y.isEmpty());
987 assertEquals(x.pollFirst(), y.pollFirst());
988 }
989 assertTrue(y.isEmpty());
990 }
991
992 /**
993 * subSet returns set with keys in requested range
994 */
995 public void testDescendingSubSetContents() {
996 NavigableSet set = dset5();
997 SortedSet sm = set.subSet(m2, m4);
998 assertEquals(m2, sm.first());
999 assertEquals(m3, sm.last());
1000 assertEquals(2, sm.size());
1001 assertFalse(sm.contains(m1));
1002 assertTrue(sm.contains(m2));
1003 assertTrue(sm.contains(m3));
1004 assertFalse(sm.contains(m4));
1005 assertFalse(sm.contains(m5));
1006 Iterator i = sm.iterator();
1007 Object k;
1008 k = (Integer)(i.next());
1009 assertEquals(m2, k);
1010 k = (Integer)(i.next());
1011 assertEquals(m3, k);
1012 assertFalse(i.hasNext());
1013 Iterator j = sm.iterator();
1014 j.next();
1015 j.remove();
1016 assertFalse(set.contains(m2));
1017 assertEquals(4, set.size());
1018 assertEquals(1, sm.size());
1019 assertEquals(m3, sm.first());
1020 assertEquals(m3, sm.last());
1021 assertTrue(sm.remove(m3));
1022 assertTrue(sm.isEmpty());
1023 assertEquals(3, set.size());
1024 }
1025
1026 public void testDescendingSubSetContents2() {
1027 NavigableSet set = dset5();
1028 SortedSet sm = set.subSet(m2, m3);
1029 assertEquals(1, sm.size());
1030 assertEquals(m2, sm.first());
1031 assertEquals(m2, sm.last());
1032 assertFalse(sm.contains(m1));
1033 assertTrue(sm.contains(m2));
1034 assertFalse(sm.contains(m3));
1035 assertFalse(sm.contains(m4));
1036 assertFalse(sm.contains(m5));
1037 Iterator i = sm.iterator();
1038 Object k;
1039 k = (Integer)(i.next());
1040 assertEquals(m2, k);
1041 assertFalse(i.hasNext());
1042 Iterator j = sm.iterator();
1043 j.next();
1044 j.remove();
1045 assertFalse(set.contains(m2));
1046 assertEquals(4, set.size());
1047 assertEquals(0, sm.size());
1048 assertTrue(sm.isEmpty());
1049 assertFalse(sm.remove(m3));
1050 assertEquals(4, set.size());
1051 }
1052
1053 /**
1054 * headSet returns set with keys in requested range
1055 */
1056 public void testDescendingHeadSetContents() {
1057 NavigableSet set = dset5();
1058 SortedSet sm = set.headSet(m4);
1059 assertTrue(sm.contains(m1));
1060 assertTrue(sm.contains(m2));
1061 assertTrue(sm.contains(m3));
1062 assertFalse(sm.contains(m4));
1063 assertFalse(sm.contains(m5));
1064 Iterator i = sm.iterator();
1065 Object k;
1066 k = (Integer)(i.next());
1067 assertEquals(m1, k);
1068 k = (Integer)(i.next());
1069 assertEquals(m2, k);
1070 k = (Integer)(i.next());
1071 assertEquals(m3, k);
1072 assertFalse(i.hasNext());
1073 sm.clear();
1074 assertTrue(sm.isEmpty());
1075 assertEquals(2, set.size());
1076 assertEquals(m4, set.first());
1077 }
1078
1079 /**
1080 * tailSet returns set with keys in requested range
1081 */
1082 public void testDescendingTailSetContents() {
1083 NavigableSet set = dset5();
1084 SortedSet sm = set.tailSet(m2);
1085 assertFalse(sm.contains(m1));
1086 assertTrue(sm.contains(m2));
1087 assertTrue(sm.contains(m3));
1088 assertTrue(sm.contains(m4));
1089 assertTrue(sm.contains(m5));
1090 Iterator i = sm.iterator();
1091 Object k;
1092 k = (Integer)(i.next());
1093 assertEquals(m2, k);
1094 k = (Integer)(i.next());
1095 assertEquals(m3, k);
1096 k = (Integer)(i.next());
1097 assertEquals(m4, k);
1098 k = (Integer)(i.next());
1099 assertEquals(m5, k);
1100 assertFalse(i.hasNext());
1101
1102 SortedSet ssm = sm.tailSet(m4);
1103 assertEquals(m4, ssm.first());
1104 assertEquals(m5, ssm.last());
1105 assertTrue(ssm.remove(m4));
1106 assertEquals(1, ssm.size());
1107 assertEquals(3, sm.size());
1108 assertEquals(4, set.size());
1109 }
1110
1111 /**
1112 * addAll is idempotent
1113 */
1114 public void testAddAll_idempotent() throws Exception {
1115 Set x = populatedSet(SIZE);
1116 Set y = new TreeSet(x);
1117 y.addAll(x);
1118 assertEquals(x, y);
1119 assertEquals(y, x);
1120 }
1121
1122 }