ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.15
Committed: Thu Nov 4 01:04:54 2010 UTC (13 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.14: +6 -8 lines
Log Message:
strengthen 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/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 /**
180 * addAll of a collection with null elements throws NPE
181 */
182 public void testAddAll2() {
183 try {
184 NavigableSet q = set0();
185 Integer[] ints = new Integer[SIZE];
186 q.addAll(Arrays.asList(ints));
187 shouldThrow();
188 } catch (NullPointerException success) {}
189 }
190
191 /**
192 * addAll of a collection with any null elements throws NPE after
193 * possibly adding some elements
194 */
195 public void testAddAll3() {
196 try {
197 NavigableSet q = set0();
198 Integer[] ints = new Integer[SIZE];
199 for (int i = 0; i < SIZE-1; ++i)
200 ints[i] = new Integer(i+SIZE);
201 q.addAll(Arrays.asList(ints));
202 shouldThrow();
203 } catch (NullPointerException success) {}
204 }
205
206 /**
207 * Set contains all elements of successful addAll
208 */
209 public void testAddAll5() {
210 Integer[] empty = new Integer[0];
211 Integer[] ints = new Integer[SIZE];
212 for (int i = 0; i < SIZE; ++i)
213 ints[i] = new Integer(SIZE-1- i);
214 NavigableSet q = set0();
215 assertFalse(q.addAll(Arrays.asList(empty)));
216 assertTrue(q.addAll(Arrays.asList(ints)));
217 for (int i = 0; i < SIZE; ++i)
218 assertEquals(new Integer(i), q.pollFirst());
219 }
220
221 /**
222 * poll succeeds unless empty
223 */
224 public void testPoll() {
225 NavigableSet q = populatedSet(SIZE);
226 for (int i = 0; i < SIZE; ++i) {
227 assertEquals(i, q.pollFirst());
228 }
229 assertNull(q.pollFirst());
230 }
231
232 /**
233 * remove(x) removes x and returns true if present
234 */
235 public void testRemoveElement() {
236 NavigableSet q = populatedSet(SIZE);
237 for (int i = 1; i < SIZE; i+=2) {
238 assertTrue(q.remove(new Integer(i)));
239 }
240 for (int i = 0; i < SIZE; i+=2) {
241 assertTrue(q.remove(new Integer(i)));
242 assertFalse(q.remove(new Integer(i+1)));
243 }
244 assertTrue(q.isEmpty());
245 }
246
247 /**
248 * contains(x) reports true when elements added but not yet removed
249 */
250 public void testContains() {
251 NavigableSet q = populatedSet(SIZE);
252 for (int i = 0; i < SIZE; ++i) {
253 assertTrue(q.contains(new Integer(i)));
254 q.pollFirst();
255 assertFalse(q.contains(new Integer(i)));
256 }
257 }
258
259 /**
260 * clear removes all elements
261 */
262 public void testClear() {
263 NavigableSet q = populatedSet(SIZE);
264 q.clear();
265 assertTrue(q.isEmpty());
266 assertEquals(0, q.size());
267 assertTrue(q.add(new Integer(1)));
268 assertFalse(q.isEmpty());
269 q.clear();
270 assertTrue(q.isEmpty());
271 }
272
273 /**
274 * containsAll(c) is true when c contains a subset of elements
275 */
276 public void testContainsAll() {
277 NavigableSet q = populatedSet(SIZE);
278 NavigableSet p = set0();
279 for (int i = 0; i < SIZE; ++i) {
280 assertTrue(q.containsAll(p));
281 assertFalse(p.containsAll(q));
282 p.add(new Integer(i));
283 }
284 assertTrue(p.containsAll(q));
285 }
286
287 /**
288 * retainAll(c) retains only those elements of c and reports true if changed
289 */
290 public void testRetainAll() {
291 NavigableSet q = populatedSet(SIZE);
292 NavigableSet p = populatedSet(SIZE);
293 for (int i = 0; i < SIZE; ++i) {
294 boolean changed = q.retainAll(p);
295 if (i == 0)
296 assertFalse(changed);
297 else
298 assertTrue(changed);
299
300 assertTrue(q.containsAll(p));
301 assertEquals(SIZE-i, q.size());
302 p.pollFirst();
303 }
304 }
305
306 /**
307 * removeAll(c) removes only those elements of c and reports true if changed
308 */
309 public void testRemoveAll() {
310 for (int i = 1; i < SIZE; ++i) {
311 NavigableSet q = populatedSet(SIZE);
312 NavigableSet p = populatedSet(i);
313 assertTrue(q.removeAll(p));
314 assertEquals(SIZE-i, q.size());
315 for (int j = 0; j < i; ++j) {
316 Integer I = (Integer)(p.pollFirst());
317 assertFalse(q.contains(I));
318 }
319 }
320 }
321
322
323
324 /**
325 * lower returns preceding element
326 */
327 public void testLower() {
328 NavigableSet q = set5();
329 Object e1 = q.lower(three);
330 assertEquals(two, e1);
331
332 Object e2 = q.lower(six);
333 assertEquals(five, e2);
334
335 Object e3 = q.lower(one);
336 assertNull(e3);
337
338 Object e4 = q.lower(zero);
339 assertNull(e4);
340 }
341
342 /**
343 * higher returns next element
344 */
345 public void testHigher() {
346 NavigableSet q = set5();
347 Object e1 = q.higher(three);
348 assertEquals(four, e1);
349
350 Object e2 = q.higher(zero);
351 assertEquals(one, e2);
352
353 Object e3 = q.higher(five);
354 assertNull(e3);
355
356 Object e4 = q.higher(six);
357 assertNull(e4);
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 * ceiling returns next element
380 */
381 public void testCeiling() {
382 NavigableSet q = set5();
383 Object e1 = q.ceiling(three);
384 assertEquals(three, e1);
385
386 Object e2 = q.ceiling(zero);
387 assertEquals(one, e2);
388
389 Object e3 = q.ceiling(five);
390 assertEquals(five, e3);
391
392 Object e4 = q.ceiling(six);
393 assertNull(e4);
394 }
395
396 /**
397 * toArray contains all elements in sorted order
398 */
399 public void testToArray() {
400 NavigableSet q = populatedSet(SIZE);
401 Object[] o = q.toArray();
402 for (int i = 0; i < o.length; i++)
403 assertSame(o[i], q.pollFirst());
404 }
405
406 /**
407 * toArray(a) contains all elements in sorted order
408 */
409 public void testToArray2() {
410 NavigableSet q = populatedSet(SIZE);
411 Integer[] ints = new Integer[SIZE];
412 assertSame(ints, q.toArray(ints));
413 for (int i = 0; i < ints.length; i++)
414 assertSame(ints[i], q.pollFirst());
415 }
416
417 /**
418 * iterator iterates through all elements
419 */
420 public void testIterator() {
421 NavigableSet q = populatedSet(SIZE);
422 int i = 0;
423 Iterator it = q.iterator();
424 while (it.hasNext()) {
425 assertTrue(q.contains(it.next()));
426 ++i;
427 }
428 assertEquals(i, SIZE);
429 }
430
431 /**
432 * iterator of empty set has no elements
433 */
434 public void testEmptyIterator() {
435 NavigableSet q = set0();
436 int i = 0;
437 Iterator it = q.iterator();
438 while (it.hasNext()) {
439 assertTrue(q.contains(it.next()));
440 ++i;
441 }
442 assertEquals(i, 0);
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(it.next(), 2);
460 assertEquals(it.next(), 3);
461 assertFalse(it.hasNext());
462 }
463
464
465 /**
466 * toString contains toStrings of elements
467 */
468 public void testToString() {
469 NavigableSet q = populatedSet(SIZE);
470 String s = q.toString();
471 for (int i = 0; i < SIZE; ++i) {
472 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
473 }
474 }
475
476 /**
477 * A deserialized serialized set has same elements
478 */
479 public void testSerialization() throws Exception {
480 NavigableSet q = populatedSet(SIZE);
481 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
482 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
483 out.writeObject(q);
484 out.close();
485
486 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
487 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
488 NavigableSet r = (NavigableSet)in.readObject();
489 assertEquals(q.size(), r.size());
490 while (!q.isEmpty())
491 assertEquals(q.pollFirst(), r.pollFirst());
492 }
493
494 /**
495 * subSet returns set with keys in requested range
496 */
497 public void testSubSetContents() {
498 NavigableSet set = set5();
499 SortedSet sm = set.subSet(two, four);
500 assertEquals(two, sm.first());
501 assertEquals(three, sm.last());
502 assertEquals(2, sm.size());
503 assertFalse(sm.contains(one));
504 assertTrue(sm.contains(two));
505 assertTrue(sm.contains(three));
506 assertFalse(sm.contains(four));
507 assertFalse(sm.contains(five));
508 Iterator i = sm.iterator();
509 Object k;
510 k = (Integer)(i.next());
511 assertEquals(two, k);
512 k = (Integer)(i.next());
513 assertEquals(three, k);
514 assertFalse(i.hasNext());
515 Iterator j = sm.iterator();
516 j.next();
517 j.remove();
518 assertFalse(set.contains(two));
519 assertEquals(4, set.size());
520 assertEquals(1, sm.size());
521 assertEquals(three, sm.first());
522 assertEquals(three, sm.last());
523 assertTrue(sm.remove(three));
524 assertTrue(sm.isEmpty());
525 assertEquals(3, set.size());
526 }
527
528 public void testSubSetContents2() {
529 NavigableSet set = set5();
530 SortedSet sm = set.subSet(two, three);
531 assertEquals(1, sm.size());
532 assertEquals(two, sm.first());
533 assertEquals(two, sm.last());
534 assertFalse(sm.contains(one));
535 assertTrue(sm.contains(two));
536 assertFalse(sm.contains(three));
537 assertFalse(sm.contains(four));
538 assertFalse(sm.contains(five));
539 Iterator i = sm.iterator();
540 Object k;
541 k = (Integer)(i.next());
542 assertEquals(two, k);
543 assertFalse(i.hasNext());
544 Iterator j = sm.iterator();
545 j.next();
546 j.remove();
547 assertFalse(set.contains(two));
548 assertEquals(4, set.size());
549 assertEquals(0, sm.size());
550 assertTrue(sm.isEmpty());
551 assertFalse(sm.remove(three));
552 assertEquals(4, set.size());
553 }
554
555 /**
556 * headSet returns set with keys in requested range
557 */
558 public void testHeadSetContents() {
559 NavigableSet set = set5();
560 SortedSet sm = set.headSet(four);
561 assertTrue(sm.contains(one));
562 assertTrue(sm.contains(two));
563 assertTrue(sm.contains(three));
564 assertFalse(sm.contains(four));
565 assertFalse(sm.contains(five));
566 Iterator i = sm.iterator();
567 Object k;
568 k = (Integer)(i.next());
569 assertEquals(one, k);
570 k = (Integer)(i.next());
571 assertEquals(two, k);
572 k = (Integer)(i.next());
573 assertEquals(three, k);
574 assertFalse(i.hasNext());
575 sm.clear();
576 assertTrue(sm.isEmpty());
577 assertEquals(2, set.size());
578 assertEquals(four, set.first());
579 }
580
581 /**
582 * tailSet returns set with keys in requested range
583 */
584 public void testTailSetContents() {
585 NavigableSet set = set5();
586 SortedSet sm = set.tailSet(two);
587 assertFalse(sm.contains(one));
588 assertTrue(sm.contains(two));
589 assertTrue(sm.contains(three));
590 assertTrue(sm.contains(four));
591 assertTrue(sm.contains(five));
592 Iterator i = sm.iterator();
593 Object k;
594 k = (Integer)(i.next());
595 assertEquals(two, k);
596 k = (Integer)(i.next());
597 assertEquals(three, k);
598 k = (Integer)(i.next());
599 assertEquals(four, k);
600 k = (Integer)(i.next());
601 assertEquals(five, k);
602 assertFalse(i.hasNext());
603
604 SortedSet ssm = sm.tailSet(four);
605 assertEquals(four, ssm.first());
606 assertEquals(five, ssm.last());
607 assertTrue(ssm.remove(four));
608 assertEquals(1, ssm.size());
609 assertEquals(3, sm.size());
610 assertEquals(4, set.size());
611 }
612
613 /**
614 * size changes when elements added and removed
615 */
616 public void testDescendingSize() {
617 NavigableSet q = populatedSet(SIZE);
618 for (int i = 0; i < SIZE; ++i) {
619 assertEquals(SIZE-i, q.size());
620 q.pollFirst();
621 }
622 for (int i = 0; i < SIZE; ++i) {
623 assertEquals(i, q.size());
624 q.add(new Integer(i));
625 }
626 }
627
628 /**
629 * Add of comparable element succeeds
630 */
631 public void testDescendingAdd() {
632 NavigableSet q = dset0();
633 assertTrue(q.add(m6));
634 }
635
636 /**
637 * Add of duplicate element fails
638 */
639 public void testDescendingAddDup() {
640 NavigableSet q = dset0();
641 assertTrue(q.add(m6));
642 assertFalse(q.add(m6));
643 }
644
645 /**
646 * Add of non-Comparable throws CCE
647 */
648 public void testDescendingAddNonComparable() {
649 try {
650 NavigableSet q = dset0();
651 q.add(new Object());
652 q.add(new Object());
653 q.add(new Object());
654 shouldThrow();
655 } catch (ClassCastException success) {}
656 }
657
658
659 /**
660 * addAll(null) throws NPE
661 */
662 public void testDescendingAddAll1() {
663 try {
664 NavigableSet q = dset0();
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 try {
675 NavigableSet q = dset0();
676 Integer[] ints = new Integer[SIZE];
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 try {
688 NavigableSet q = dset0();
689 Integer[] ints = new Integer[SIZE];
690 for (int i = 0; i < SIZE-1; ++i)
691 ints[i] = new Integer(i+SIZE);
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 I = (Integer)(p.pollFirst());
808 assertFalse(q.contains(I));
809 }
810 }
811 }
812
813
814
815 /**
816 * lower returns preceding element
817 */
818 public void testDescendingLower() {
819 NavigableSet q = dset5();
820 Object e1 = q.lower(m3);
821 assertEquals(m2, e1);
822
823 Object e2 = q.lower(m6);
824 assertEquals(m5, e2);
825
826 Object e3 = q.lower(m1);
827 assertNull(e3);
828
829 Object e4 = q.lower(zero);
830 assertNull(e4);
831 }
832
833 /**
834 * higher returns next element
835 */
836 public void testDescendingHigher() {
837 NavigableSet q = dset5();
838 Object e1 = q.higher(m3);
839 assertEquals(m4, e1);
840
841 Object e2 = q.higher(zero);
842 assertEquals(m1, e2);
843
844 Object e3 = q.higher(m5);
845 assertNull(e3);
846
847 Object e4 = q.higher(m6);
848 assertNull(e4);
849 }
850
851 /**
852 * floor returns preceding element
853 */
854 public void testDescendingFloor() {
855 NavigableSet q = dset5();
856 Object e1 = q.floor(m3);
857 assertEquals(m3, e1);
858
859 Object e2 = q.floor(m6);
860 assertEquals(m5, e2);
861
862 Object e3 = q.floor(m1);
863 assertEquals(m1, e3);
864
865 Object e4 = q.floor(zero);
866 assertNull(e4);
867 }
868
869 /**
870 * ceiling returns next element
871 */
872 public void testDescendingCeiling() {
873 NavigableSet q = dset5();
874 Object e1 = q.ceiling(m3);
875 assertEquals(m3, e1);
876
877 Object e2 = q.ceiling(zero);
878 assertEquals(m1, e2);
879
880 Object e3 = q.ceiling(m5);
881 assertEquals(m5, e3);
882
883 Object e4 = q.ceiling(m6);
884 assertNull(e4);
885 }
886
887 /**
888 * toArray contains all elements
889 */
890 public void testDescendingToArray() {
891 NavigableSet q = populatedSet(SIZE);
892 Object[] o = q.toArray();
893 Arrays.sort(o);
894 for (int i = 0; i < o.length; i++)
895 assertEquals(o[i], q.pollFirst());
896 }
897
898 /**
899 * toArray(a) contains all elements
900 */
901 public void testDescendingToArray2() {
902 NavigableSet q = populatedSet(SIZE);
903 Integer[] ints = new Integer[SIZE];
904 assertSame(ints, q.toArray(ints));
905 Arrays.sort(ints);
906 for (int i = 0; i < ints.length; i++)
907 assertEquals(ints[i], q.pollFirst());
908 }
909
910 /**
911 * iterator iterates through all elements
912 */
913 public void testDescendingIterator() {
914 NavigableSet q = populatedSet(SIZE);
915 int i = 0;
916 Iterator it = q.iterator();
917 while (it.hasNext()) {
918 assertTrue(q.contains(it.next()));
919 ++i;
920 }
921 assertEquals(i, SIZE);
922 }
923
924 /**
925 * iterator of empty set has no elements
926 */
927 public void testDescendingEmptyIterator() {
928 NavigableSet q = dset0();
929 int i = 0;
930 Iterator it = q.iterator();
931 while (it.hasNext()) {
932 assertTrue(q.contains(it.next()));
933 ++i;
934 }
935 assertEquals(i, 0);
936 }
937
938 /**
939 * iterator.remove removes current element
940 */
941 public void testDescendingIteratorRemove() {
942 final NavigableSet q = dset0();
943 q.add(new Integer(2));
944 q.add(new Integer(1));
945 q.add(new Integer(3));
946
947 Iterator it = q.iterator();
948 it.next();
949 it.remove();
950
951 it = q.iterator();
952 assertEquals(it.next(), 2);
953 assertEquals(it.next(), 3);
954 assertFalse(it.hasNext());
955 }
956
957
958 /**
959 * toString contains toStrings of elements
960 */
961 public void testDescendingToString() {
962 NavigableSet q = populatedSet(SIZE);
963 String s = q.toString();
964 for (int i = 0; i < SIZE; ++i) {
965 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
966 }
967 }
968
969 /**
970 * A deserialized serialized set has same elements
971 */
972 public void testDescendingSerialization() throws Exception {
973 NavigableSet q = populatedSet(SIZE);
974 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
975 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
976 out.writeObject(q);
977 out.close();
978
979 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
980 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
981 NavigableSet r = (NavigableSet)in.readObject();
982 assertEquals(q.size(), r.size());
983 while (!q.isEmpty())
984 assertEquals(q.pollFirst(), r.pollFirst());
985 }
986
987 /**
988 * subSet returns set with keys in requested range
989 */
990 public void testDescendingSubSetContents() {
991 NavigableSet set = dset5();
992 SortedSet sm = set.subSet(m2, m4);
993 assertEquals(m2, sm.first());
994 assertEquals(m3, sm.last());
995 assertEquals(2, sm.size());
996 assertFalse(sm.contains(m1));
997 assertTrue(sm.contains(m2));
998 assertTrue(sm.contains(m3));
999 assertFalse(sm.contains(m4));
1000 assertFalse(sm.contains(m5));
1001 Iterator i = sm.iterator();
1002 Object k;
1003 k = (Integer)(i.next());
1004 assertEquals(m2, k);
1005 k = (Integer)(i.next());
1006 assertEquals(m3, k);
1007 assertFalse(i.hasNext());
1008 Iterator j = sm.iterator();
1009 j.next();
1010 j.remove();
1011 assertFalse(set.contains(m2));
1012 assertEquals(4, set.size());
1013 assertEquals(1, sm.size());
1014 assertEquals(m3, sm.first());
1015 assertEquals(m3, sm.last());
1016 assertTrue(sm.remove(m3));
1017 assertTrue(sm.isEmpty());
1018 assertEquals(3, set.size());
1019 }
1020
1021 public void testDescendingSubSetContents2() {
1022 NavigableSet set = dset5();
1023 SortedSet sm = set.subSet(m2, m3);
1024 assertEquals(1, sm.size());
1025 assertEquals(m2, sm.first());
1026 assertEquals(m2, sm.last());
1027 assertFalse(sm.contains(m1));
1028 assertTrue(sm.contains(m2));
1029 assertFalse(sm.contains(m3));
1030 assertFalse(sm.contains(m4));
1031 assertFalse(sm.contains(m5));
1032 Iterator i = sm.iterator();
1033 Object k;
1034 k = (Integer)(i.next());
1035 assertEquals(m2, k);
1036 assertFalse(i.hasNext());
1037 Iterator j = sm.iterator();
1038 j.next();
1039 j.remove();
1040 assertFalse(set.contains(m2));
1041 assertEquals(4, set.size());
1042 assertEquals(0, sm.size());
1043 assertTrue(sm.isEmpty());
1044 assertFalse(sm.remove(m3));
1045 assertEquals(4, set.size());
1046 }
1047
1048 /**
1049 * headSet returns set with keys in requested range
1050 */
1051 public void testDescendingHeadSetContents() {
1052 NavigableSet set = dset5();
1053 SortedSet sm = set.headSet(m4);
1054 assertTrue(sm.contains(m1));
1055 assertTrue(sm.contains(m2));
1056 assertTrue(sm.contains(m3));
1057 assertFalse(sm.contains(m4));
1058 assertFalse(sm.contains(m5));
1059 Iterator i = sm.iterator();
1060 Object k;
1061 k = (Integer)(i.next());
1062 assertEquals(m1, k);
1063 k = (Integer)(i.next());
1064 assertEquals(m2, k);
1065 k = (Integer)(i.next());
1066 assertEquals(m3, k);
1067 assertFalse(i.hasNext());
1068 sm.clear();
1069 assertTrue(sm.isEmpty());
1070 assertEquals(2, set.size());
1071 assertEquals(m4, set.first());
1072 }
1073
1074 /**
1075 * tailSet returns set with keys in requested range
1076 */
1077 public void testDescendingTailSetContents() {
1078 NavigableSet set = dset5();
1079 SortedSet sm = set.tailSet(m2);
1080 assertFalse(sm.contains(m1));
1081 assertTrue(sm.contains(m2));
1082 assertTrue(sm.contains(m3));
1083 assertTrue(sm.contains(m4));
1084 assertTrue(sm.contains(m5));
1085 Iterator i = sm.iterator();
1086 Object k;
1087 k = (Integer)(i.next());
1088 assertEquals(m2, k);
1089 k = (Integer)(i.next());
1090 assertEquals(m3, k);
1091 k = (Integer)(i.next());
1092 assertEquals(m4, k);
1093 k = (Integer)(i.next());
1094 assertEquals(m5, k);
1095 assertFalse(i.hasNext());
1096
1097 SortedSet ssm = sm.tailSet(m4);
1098 assertEquals(m4, ssm.first());
1099 assertEquals(m5, ssm.last());
1100 assertTrue(ssm.remove(m4));
1101 assertEquals(1, ssm.size());
1102 assertEquals(3, sm.size());
1103 assertEquals(4, set.size());
1104 }
1105
1106 }