ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.38
Committed: Mon May 28 21:19:50 2018 UTC (5 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.37: +8 -5 lines
Log Message:
improve toArray tests

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