ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ConcurrentSkipListSubSetTest.java
Revision: 1.38
Committed: Sun Jan 7 22:59:18 2018 UTC (6 years, 3 months ago) by jsr166
Branch: MAIN
Changes since 1.37: +1 -2 lines
Log Message:
use <>

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