ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TreeSubSetTest.java
Revision: 1.16
Committed: Fri Nov 5 00:17:22 2010 UTC (13 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.15: +5 -4 lines
Log Message:
very small improvements to testToArray2

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