ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.10
Committed: Sun Nov 22 18:57:17 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.9: +11 -15 lines
Log Message:
use autoboxing judiciously for readability

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