• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.apache.harmony.tests.java.util;
2 
3 /*
4  *  Licensed to the Apache Software Foundation (ASF) under one or more
5  *  contributor license agreements.  See the NOTICE file distributed with
6  *  this work for additional information regarding copyright ownership.
7  *  The ASF licenses this file to You under the Apache License, Version 2.0
8  *  (the "License"); you may not use this file except in compliance with
9  *  the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  *  Unless required by applicable law or agreed to in writing, software
14  *  distributed under the License is distributed on an "AS IS" BASIS,
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  *  See the License for the specific language governing permissions and
17  *  limitations under the License.
18  */
19 
20 import junit.framework.TestCase;
21 import org.apache.harmony.tests.java.util.TreeMapTest.MockComparator;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.Iterator;
26 import java.util.Map;
27 import java.util.Map.Entry;
28 import java.util.NavigableMap;
29 import java.util.NavigableSet;
30 import java.util.NoSuchElementException;
31 import java.util.Set;
32 import java.util.SortedMap;
33 import java.util.SortedSet;
34 import java.util.TreeMap;
35 
36 //
37 public class TreeMapExtendTest extends TestCase {
38 
39     TreeMap tm;
40 
41     TreeMap tm_comparator;
42 
43     SortedMap subMap_default;
44 
45     SortedMap subMap_startExcluded_endExcluded;
46 
47     SortedMap subMap_startExcluded_endIncluded;
48 
49     SortedMap subMap_startIncluded_endExcluded;
50 
51     SortedMap subMap_startIncluded_endIncluded;
52 
53     SortedMap subMap_default_beforeStart_100;
54 
55     SortedMap subMap_default_afterEnd_109;
56 
57     NavigableMap navigableMap_startExcluded_endExcluded;
58 
59     NavigableMap navigableMap_startExcluded_endIncluded;
60 
61     NavigableMap navigableMap_startIncluded_endExcluded;
62 
63     NavigableMap navigableMap_startIncluded_endIncluded;
64 
65     SortedMap subMap_default_comparator;
66 
67     SortedMap subMap_startExcluded_endExcluded_comparator;
68 
69     SortedMap subMap_startExcluded_endIncluded_comparator;
70 
71     SortedMap subMap_startIncluded_endExcluded_comparator;
72 
73     SortedMap subMap_startIncluded_endIncluded_comparator;
74 
75     Object objArray[] = new Object[1000];
76 
test_TreeMap_Constructor_Default()77     public void test_TreeMap_Constructor_Default() {
78         TreeMap treeMap = new TreeMap();
79         assertTrue(treeMap.isEmpty());
80         assertNull(treeMap.comparator());
81         assertEquals(0, treeMap.size());
82 
83         try {
84             treeMap.firstKey();
85             fail("should throw NoSuchElementException");
86         } catch (NoSuchElementException e) {
87             // Expected
88         }
89         assertNull(treeMap.firstEntry());
90 
91         try {
92             treeMap.lastKey();
93             fail("should throw NoSuchElementException");
94         } catch (NoSuchElementException e) {
95             // Expected
96         }
97         assertNull(treeMap.lastEntry());
98 
99         try {
100             treeMap.ceilingKey(1);
101         } catch (NoSuchElementException e) {
102             // Expected
103         }
104         assertNull(treeMap.ceilingEntry(1));
105 
106         try {
107             treeMap.floorKey(1);
108         } catch (NoSuchElementException e) {
109             // Expected
110         }
111         assertNull(treeMap.floorEntry(1));
112         assertNull(treeMap.lowerKey(1));
113         assertNull(treeMap.lowerEntry(1));
114         assertNull(treeMap.higherKey(1));
115         assertNull(treeMap.higherEntry(1));
116         assertFalse(treeMap.containsKey(1));
117         assertFalse(treeMap.containsValue(1));
118         assertNull(treeMap.get(1));
119 
120         assertNull(treeMap.pollFirstEntry());
121         assertNull(treeMap.pollLastEntry());
122         assertEquals(0, treeMap.values().size());
123     }
124 
test_TreeMap_Constructor_Comparator()125     public void test_TreeMap_Constructor_Comparator() {
126         MockComparator mockComparator = new MockComparator();
127         TreeMap treeMap = new TreeMap(mockComparator);
128 
129         assertEquals(mockComparator, treeMap.comparator());
130     }
131 
test_TreeMap_Constructor_Map()132     public void test_TreeMap_Constructor_Map() {
133         TreeMap treeMap = new TreeMap(tm);
134         assertEquals(tm.size(), treeMap.size());
135         assertEquals(tm.firstKey(), treeMap.firstKey());
136         assertEquals(tm.firstEntry(), treeMap.firstEntry());
137         assertEquals(tm.lastKey(), treeMap.lastKey());
138         assertEquals(tm.lastEntry(), treeMap.lastEntry());
139         assertEquals(tm.keySet(), treeMap.keySet());
140 
141         String key = new Integer(100).toString();
142         assertEquals(tm.ceilingKey(key), treeMap.ceilingKey(key));
143         assertEquals(tm.ceilingEntry(key), treeMap.ceilingEntry(key));
144         assertEquals(tm.floorKey(key), treeMap.floorKey(key));
145         assertEquals(tm.floorEntry(key), treeMap.floorEntry(key));
146         assertEquals(tm.lowerKey(key), treeMap.lowerKey(key));
147         assertEquals(tm.lowerEntry(key), treeMap.lowerEntry(key));
148         assertEquals(tm.higherKey(key), treeMap.higherKey(key));
149         assertEquals(tm.higherEntry(key), treeMap.higherEntry(key));
150         assertEquals(tm.entrySet(), treeMap.entrySet());
151     }
152 
test_TreeMap_Constructor_SortedMap()153     public void test_TreeMap_Constructor_SortedMap() {
154         TreeMap treeMap = new TreeMap(subMap_default);
155         assertEquals(subMap_default.size(), treeMap.size());
156         assertEquals(subMap_default.firstKey(), treeMap.firstKey());
157         assertEquals(subMap_default.lastKey(), treeMap.lastKey());
158         assertEquals(subMap_default.keySet(), treeMap.keySet());
159         assertEquals(subMap_default.entrySet(), treeMap.entrySet());
160     }
161 
test_TreeMap_clear()162     public void test_TreeMap_clear() {
163         tm.clear();
164         assertEquals(0, tm.size());
165     }
166 
test_TreeMap_clone()167     public void test_TreeMap_clone() {
168         TreeMap cloneTreeMap = (TreeMap) tm.clone();
169         assertEquals(tm, cloneTreeMap);
170     }
171 
test_SubMap_Constructor()172     public void test_SubMap_Constructor() {
173     }
174 
test_SubMap_clear()175     public void test_SubMap_clear() {
176         subMap_default.clear();
177         assertEquals(0, subMap_default.size());
178     }
179 
test_SubMap_comparator()180     public void test_SubMap_comparator() {
181         assertEquals(tm.comparator(), subMap_default.comparator());
182     }
183 
test_SubMap_containsKey()184     public void test_SubMap_containsKey() {
185         String key = null;
186         for (int counter = 101; counter < 109; counter++) {
187             key = objArray[counter].toString();
188             assertTrue("SubMap contains incorrect elements", subMap_default
189                     .containsKey(key));
190             assertTrue("SubMap contains incorrect elements",
191                     subMap_startExcluded_endExcluded.containsKey(key));
192             assertTrue("SubMap contains incorrect elements",
193                     subMap_startExcluded_endIncluded.containsKey(key));
194             assertTrue("SubMap contains incorrect elements",
195                     subMap_startIncluded_endExcluded.containsKey(key));
196             assertTrue("SubMap contains incorrect elements",
197                     subMap_startIncluded_endIncluded.containsKey(key));
198         }
199 
200         // Check boundary
201         key = objArray[100].toString();
202         assertTrue("SubMap contains incorrect elements", subMap_default
203                 .containsKey(key));
204         assertFalse("SubMap contains incorrect elements",
205                 subMap_startExcluded_endExcluded.containsKey(key));
206         assertFalse("SubMap contains incorrect elements",
207                 subMap_startExcluded_endIncluded.containsKey(key));
208         assertTrue("SubMap contains incorrect elements",
209                 subMap_startIncluded_endExcluded.containsKey(key));
210         assertTrue("SubMap contains incorrect elements",
211                 subMap_startIncluded_endIncluded.containsKey(key));
212 
213         key = objArray[109].toString();
214         assertFalse("SubMap contains incorrect elements", subMap_default
215                 .containsKey(key));
216         assertFalse("SubMap contains incorrect elements",
217                 subMap_startExcluded_endExcluded.containsKey(key));
218         assertTrue("SubMap contains incorrect elements",
219                 subMap_startExcluded_endIncluded.containsKey(key));
220         assertFalse("SubMap contains incorrect elements",
221                 subMap_startIncluded_endExcluded.containsKey(key));
222         assertTrue("SubMap contains incorrect elements",
223                 subMap_startIncluded_endIncluded.containsKey(key));
224 
225         // With Comparator
226         for (int counter = 101; counter < 109; counter++) {
227             key = objArray[counter].toString();
228             assertTrue("SubMap contains incorrect elements",
229                     subMap_default_comparator.containsKey(key));
230             assertTrue("SubMap contains incorrect elements",
231                     subMap_startExcluded_endExcluded_comparator
232                             .containsKey(key));
233             assertTrue("SubMap contains incorrect elements",
234                     subMap_startExcluded_endIncluded_comparator
235                             .containsKey(key));
236             assertTrue("SubMap contains incorrect elements",
237                     subMap_startIncluded_endExcluded_comparator
238                             .containsKey(key));
239             assertTrue("SubMap contains incorrect elements",
240                     subMap_startIncluded_endIncluded_comparator
241                             .containsKey(key));
242         }
243 
244         // Check boundary
245         key = objArray[100].toString();
246         assertTrue("SubMap contains incorrect elements",
247                 subMap_default_comparator.containsKey(key));
248         assertFalse("SubMap contains incorrect elements",
249                 subMap_startExcluded_endExcluded_comparator.containsKey(key));
250         assertFalse("SubMap contains incorrect elements",
251                 subMap_startExcluded_endIncluded_comparator.containsKey(key));
252         assertTrue("SubMap contains incorrect elements",
253                 subMap_startIncluded_endExcluded_comparator.containsKey(key));
254         assertTrue("SubMap contains incorrect elements",
255                 subMap_startIncluded_endIncluded_comparator.containsKey(key));
256 
257         key = objArray[109].toString();
258         assertFalse("SubMap contains incorrect elements",
259                 subMap_default_comparator.containsKey(key));
260         assertFalse("SubMap contains incorrect elements",
261                 subMap_startExcluded_endExcluded_comparator.containsKey(key));
262         assertTrue("SubMap contains incorrect elements",
263                 subMap_startExcluded_endIncluded_comparator.containsKey(key));
264         assertFalse("SubMap contains incorrect elements",
265                 subMap_startIncluded_endExcluded_comparator.containsKey(key));
266         assertTrue("SubMap contains incorrect elements",
267                 subMap_startIncluded_endIncluded_comparator.containsKey(key));
268     }
269 
test_SubMap_containsValue()270     public void test_SubMap_containsValue() {
271         Object value = null;
272         for (int counter = 101; counter < 109; counter++) {
273             value = objArray[counter];
274             assertTrue("SubMap contains incorrect elements", subMap_default
275                     .containsValue(value));
276             assertTrue("SubMap contains incorrect elements",
277                     subMap_startExcluded_endExcluded.containsValue(value));
278             assertTrue("SubMap contains incorrect elements",
279                     subMap_startExcluded_endIncluded.containsValue(value));
280             assertTrue("SubMap contains incorrect elements",
281                     subMap_startIncluded_endExcluded.containsValue(value));
282             assertTrue("SubMap contains incorrect elements",
283                     subMap_startIncluded_endIncluded.containsValue(value));
284         }
285 
286         // Check boundary
287         value = objArray[100];
288         assertTrue("SubMap contains incorrect elements", subMap_default
289                 .containsValue(value));
290         assertFalse("SubMap contains incorrect elements",
291                 subMap_startExcluded_endExcluded.containsValue(value));
292         assertFalse("SubMap contains incorrect elements",
293                 subMap_startExcluded_endIncluded.containsValue(value));
294         assertTrue("SubMap contains incorrect elements",
295                 subMap_startIncluded_endExcluded.containsValue(value));
296         assertTrue("SubMap contains incorrect elements",
297                 subMap_startIncluded_endIncluded.containsValue(value));
298 
299         value = objArray[109];
300         assertFalse("SubMap contains incorrect elements", subMap_default
301                 .containsValue(value));
302         assertFalse("SubMap contains incorrect elements",
303                 subMap_startExcluded_endExcluded.containsValue(value));
304         assertTrue("SubMap contains incorrect elements",
305                 subMap_startExcluded_endIncluded.containsValue(value));
306         assertFalse("SubMap contains incorrect elements",
307                 subMap_startIncluded_endExcluded.containsValue(value));
308         assertTrue("SubMap contains incorrect elements",
309                 subMap_startIncluded_endIncluded.containsValue(value));
310 
311         assertFalse(subMap_default.containsValue(null));
312 
313         TreeMap tm_null = new TreeMap();
314         tm_null.put("0", 1);
315         tm_null.put("1", null);
316         tm_null.put("2", 2);
317         SortedMap subMap = tm_null.subMap("0", "2");
318         assertTrue(subMap.containsValue(null));
319 
320         subMap.remove("1");
321         assertFalse(subMap.containsValue(null));
322     }
323 
test_SubMap_entrySet()324     public void test_SubMap_entrySet() {
325         Set entrySet = subMap_default.entrySet();
326         assertFalse(entrySet.isEmpty());
327         assertEquals(9, entrySet.size());
328 
329         entrySet = subMap_startExcluded_endExcluded.entrySet();
330         assertFalse(entrySet.isEmpty());
331         assertEquals(8, entrySet.size());
332 
333         entrySet = subMap_startExcluded_endIncluded.entrySet();
334         assertFalse(entrySet.isEmpty());
335         assertEquals(9, entrySet.size());
336 
337         entrySet = subMap_startIncluded_endExcluded.entrySet();
338         assertFalse(entrySet.isEmpty());
339         assertEquals(9, entrySet.size());
340 
341         entrySet = subMap_startIncluded_endIncluded.entrySet();
342         assertFalse(entrySet.isEmpty());
343         assertEquals(10, entrySet.size());
344     }
345 
test_SubMap_firstKey()346     public void test_SubMap_firstKey() {
347         String firstKey1 = new Integer(100).toString();
348         String firstKey2 = new Integer(101).toString();
349         assertEquals(firstKey1, subMap_default.firstKey());
350         assertEquals(firstKey2, subMap_startExcluded_endExcluded.firstKey());
351         assertEquals(firstKey2, subMap_startExcluded_endIncluded.firstKey());
352         assertEquals(firstKey1, subMap_startIncluded_endExcluded.firstKey());
353         assertEquals(firstKey1, subMap_startIncluded_endIncluded.firstKey());
354 
355         try {
356             subMap_default.subMap(firstKey1, firstKey1).firstKey();
357             fail("should throw NoSuchElementException");
358         } catch (NoSuchElementException e) {
359             // Expected
360         }
361 
362         try {
363             subMap_startExcluded_endExcluded.subMap(firstKey2, firstKey2)
364                     .firstKey();
365             fail("should throw NoSuchElementException");
366         } catch (NoSuchElementException e) {
367             // Expected
368         }
369 
370         try {
371             subMap_startExcluded_endIncluded.subMap(firstKey2, firstKey2)
372                     .firstKey();
373             fail("should throw NoSuchElementException");
374         } catch (NoSuchElementException e) {
375             // Expected
376         }
377 
378         try {
379             subMap_startIncluded_endExcluded.subMap(firstKey1, firstKey1)
380                     .firstKey();
381             fail("should throw NoSuchElementException");
382         } catch (NoSuchElementException e) {
383             // Expected
384         }
385 
386         try {
387             subMap_startIncluded_endIncluded.subMap(firstKey1, firstKey1)
388                     .firstKey();
389             fail("should throw NoSuchElementException");
390         } catch (NoSuchElementException e) {
391             // Expected
392         }
393 
394         // With Comparator
395         assertEquals(firstKey1, subMap_default_comparator.firstKey());
396         assertEquals(firstKey2, subMap_startExcluded_endExcluded_comparator
397                 .firstKey());
398         assertEquals(firstKey2, subMap_startExcluded_endIncluded_comparator
399                 .firstKey());
400         assertEquals(firstKey1, subMap_startIncluded_endExcluded_comparator
401                 .firstKey());
402         assertEquals(firstKey1, subMap_startIncluded_endIncluded_comparator
403                 .firstKey());
404 
405         try {
406             subMap_default_comparator.subMap(firstKey1, firstKey1).firstKey();
407             fail("should throw NoSuchElementException");
408         } catch (NoSuchElementException e) {
409             // Expected
410         }
411 
412         try {
413             subMap_startExcluded_endExcluded_comparator.subMap(firstKey2,
414                     firstKey2).firstKey();
415             fail("should throw NoSuchElementException");
416         } catch (NoSuchElementException e) {
417             // Expected
418         }
419 
420         try {
421             subMap_startExcluded_endIncluded_comparator.subMap(firstKey2,
422                     firstKey2).firstKey();
423             fail("should throw NoSuchElementException");
424         } catch (NoSuchElementException e) {
425             // Expected
426         }
427 
428         try {
429             subMap_startIncluded_endExcluded_comparator.subMap(firstKey1,
430                     firstKey1).firstKey();
431             fail("should throw NoSuchElementException");
432         } catch (NoSuchElementException e) {
433             // Expected
434         }
435 
436         try {
437             subMap_startIncluded_endIncluded_comparator.subMap(firstKey1,
438                     firstKey1).firstKey();
439             fail("should throw NoSuchElementException");
440         } catch (NoSuchElementException e) {
441             // Expected
442         }
443 
444     }
445 
test_SubMap_lastKey()446     public void test_SubMap_lastKey() {
447         String lastKey1 = new Integer(108).toString();
448         String lastKey2 = new Integer(109).toString();
449         assertEquals(lastKey1, subMap_default.lastKey());
450         assertEquals(lastKey1, subMap_startExcluded_endExcluded.lastKey());
451         assertEquals(lastKey2, subMap_startExcluded_endIncluded.lastKey());
452         assertEquals(lastKey1, subMap_startIncluded_endExcluded.lastKey());
453         assertEquals(lastKey2, subMap_startIncluded_endIncluded.lastKey());
454 
455         try {
456             subMap_default.subMap(lastKey1, lastKey1).lastKey();
457             fail("should throw NoSuchElementException");
458         } catch (NoSuchElementException e) {
459             // Expected
460         }
461 
462         try {
463             subMap_startExcluded_endExcluded.subMap(lastKey1, lastKey1)
464                     .lastKey();
465             fail("should throw NoSuchElementException");
466         } catch (NoSuchElementException e) {
467             // Expected
468         }
469 
470         try {
471             subMap_startExcluded_endIncluded.subMap(lastKey2, lastKey2)
472                     .lastKey();
473             fail("should throw NoSuchElementException");
474         } catch (NoSuchElementException e) {
475             // Expected
476         }
477 
478         try {
479             subMap_startIncluded_endExcluded.subMap(lastKey1, lastKey1)
480                     .lastKey();
481             fail("should throw NoSuchElementException");
482         } catch (NoSuchElementException e) {
483             // Expected
484         }
485 
486         try {
487             subMap_startIncluded_endIncluded.subMap(lastKey2, lastKey2)
488                     .lastKey();
489             fail("should throw NoSuchElementException");
490         } catch (NoSuchElementException e) {
491             // Expected
492         }
493 
494         // With Comparator
495         assertEquals(lastKey1, subMap_default_comparator.lastKey());
496         assertEquals(lastKey1, subMap_startExcluded_endExcluded_comparator
497                 .lastKey());
498         assertEquals(lastKey2, subMap_startExcluded_endIncluded_comparator
499                 .lastKey());
500         assertEquals(lastKey1, subMap_startIncluded_endExcluded_comparator
501                 .lastKey());
502         assertEquals(lastKey2, subMap_startIncluded_endIncluded_comparator
503                 .lastKey());
504 
505         try {
506             subMap_default_comparator.subMap(lastKey1, lastKey1).lastKey();
507             fail("should throw NoSuchElementException");
508         } catch (NoSuchElementException e) {
509             // Expected
510         }
511 
512         try {
513             subMap_startExcluded_endExcluded_comparator.subMap(lastKey1,
514                     lastKey1).lastKey();
515             fail("should throw NoSuchElementException");
516         } catch (NoSuchElementException e) {
517             // Expected
518         }
519 
520         try {
521             subMap_startExcluded_endIncluded_comparator.subMap(lastKey2,
522                     lastKey2).lastKey();
523             fail("should throw NoSuchElementException");
524         } catch (NoSuchElementException e) {
525             // Expected
526         }
527 
528         try {
529             subMap_startIncluded_endExcluded_comparator.subMap(lastKey1,
530                     lastKey1).lastKey();
531             fail("should throw NoSuchElementException");
532         } catch (NoSuchElementException e) {
533             // Expected
534         }
535 
536         try {
537             subMap_startIncluded_endIncluded_comparator.subMap(lastKey2,
538                     lastKey2).lastKey();
539             fail("should throw NoSuchElementException");
540         } catch (NoSuchElementException e) {
541             // Expected
542         }
543     }
544 
test_SubMap_get()545     public void test_SubMap_get() {
546         // left boundary
547         Integer value = new Integer(100);
548         assertEquals(value, subMap_default.get(value.toString()));
549         assertEquals(null, subMap_startExcluded_endExcluded.get(value
550                 .toString()));
551         assertEquals(null, subMap_startExcluded_endIncluded.get(value
552                 .toString()));
553         assertEquals(value, subMap_startIncluded_endExcluded.get(value
554                 .toString()));
555         assertEquals(value, subMap_startIncluded_endIncluded.get(value
556                 .toString()));
557 
558         // normal value
559         value = new Integer(105);
560         assertEquals(value, subMap_default.get(value.toString()));
561         assertEquals(value, subMap_startExcluded_endExcluded.get(value
562                 .toString()));
563         assertEquals(value, subMap_startExcluded_endIncluded.get(value
564                 .toString()));
565         assertEquals(value, subMap_startIncluded_endExcluded.get(value
566                 .toString()));
567         assertEquals(value, subMap_startIncluded_endIncluded.get(value
568                 .toString()));
569 
570         // right boundary
571         value = new Integer(109);
572         assertEquals(null, subMap_default.get(value.toString()));
573         assertEquals(null, subMap_startExcluded_endExcluded.get(value
574                 .toString()));
575         assertEquals(value, subMap_startExcluded_endIncluded.get(value
576                 .toString()));
577         assertEquals(null, subMap_startIncluded_endExcluded.get(value
578                 .toString()));
579         assertEquals(value, subMap_startIncluded_endIncluded.get(value
580                 .toString()));
581 
582         // With Comparator to test inInRange
583         // left boundary
584         value = new Integer(100);
585         assertEquals(value, subMap_default_comparator.get(value.toString()));
586 
587         // normal value
588         value = new Integer(105);
589         assertEquals(value, subMap_default_comparator.get(value.toString()));
590 
591         // right boundary
592         value = new Integer(109);
593         assertEquals(null, subMap_default_comparator.get(value.toString()));
594     }
595 
test_SubMap_headMap()596     public void test_SubMap_headMap() {
597         String endKey = new Integer(99).toString();
598         try {
599             subMap_default.headMap(endKey);
600             fail("should throw IllegalArgumentException");
601         } catch (IllegalArgumentException e) {
602             // Expected
603         }
604 
605         try {
606             subMap_startExcluded_endExcluded.headMap(endKey);
607             fail("should throw IllegalArgumentException");
608         } catch (IllegalArgumentException e) {
609             // Expected
610         }
611 
612         try {
613             subMap_startExcluded_endIncluded.headMap(endKey);
614             fail("should throw IllegalArgumentException");
615         } catch (IllegalArgumentException e) {
616             // Expected
617         }
618 
619         try {
620             subMap_startIncluded_endExcluded.headMap(endKey);
621             fail("should throw IllegalArgumentException");
622         } catch (IllegalArgumentException e) {
623             // Expected
624         }
625 
626         try {
627             subMap_startIncluded_endIncluded.headMap(endKey);
628             fail("should throw IllegalArgumentException");
629         } catch (IllegalArgumentException e) {
630             // Expected
631         }
632 
633         SortedMap headMap = null;
634         endKey = new Integer(100).toString();
635         headMap = subMap_default.headMap(endKey);
636         assertEquals(0, headMap.size());
637 
638         try {
639             headMap = subMap_startExcluded_endExcluded.headMap(endKey);
640             fail("should throw IllegalArgumentException");
641         } catch (IllegalArgumentException e) {
642             // Expected
643         }
644 
645         try {
646             headMap = subMap_startExcluded_endIncluded.headMap(endKey);
647             fail("should throw IllegalArgumentException");
648         } catch (IllegalArgumentException e) {
649             // Expected
650         }
651 
652         headMap = subMap_startIncluded_endExcluded.headMap(endKey);
653         assertEquals(0, headMap.size());
654 
655         headMap = subMap_startIncluded_endIncluded.headMap(endKey);
656         assertEquals(0, headMap.size());
657 
658         for (int i = 0, j = 101; i < 8; i++) {
659             endKey = new Integer(i + j).toString();
660             headMap = subMap_default.headMap(endKey);
661             assertEquals(i + 1, headMap.size());
662 
663             headMap = subMap_startExcluded_endExcluded.headMap(endKey);
664             assertEquals(i, headMap.size());
665 
666             headMap = subMap_startExcluded_endIncluded.headMap(endKey);
667             assertEquals(i, headMap.size());
668 
669             headMap = subMap_startIncluded_endExcluded.headMap(endKey);
670             assertEquals(i + 1, headMap.size());
671 
672             headMap = subMap_startIncluded_endIncluded.headMap(endKey);
673             assertEquals(i + 1, headMap.size());
674         }
675 
676         endKey = new Integer(109).toString();
677         headMap = subMap_default.headMap(endKey);
678         assertEquals(9, headMap.size());
679 
680         headMap = subMap_startExcluded_endExcluded.headMap(endKey);
681         assertEquals(8, headMap.size());
682 
683         headMap = subMap_startExcluded_endIncluded.headMap(endKey);
684         assertEquals(8, headMap.size());
685 
686         headMap = subMap_startIncluded_endExcluded.headMap(endKey);
687         assertEquals(9, headMap.size());
688 
689         headMap = subMap_startIncluded_endIncluded.headMap(endKey);
690         assertEquals(9, headMap.size());
691 
692         endKey = new Integer(110).toString();
693         try {
694             subMap_default.headMap(endKey);
695             fail("should throw IllegalArgumentException");
696         } catch (IllegalArgumentException e) {
697             // Expected
698         }
699 
700         try {
701             subMap_startExcluded_endExcluded.headMap(endKey);
702             fail("should throw IllegalArgumentException");
703         } catch (IllegalArgumentException e) {
704             // Expected
705         }
706 
707         try {
708             subMap_startExcluded_endIncluded.headMap(endKey);
709             fail("should throw IllegalArgumentException");
710         } catch (IllegalArgumentException e) {
711             // Expected
712         }
713 
714         try {
715             subMap_startIncluded_endExcluded.headMap(endKey);
716             fail("should throw IllegalArgumentException");
717         } catch (IllegalArgumentException e) {
718             // Expected
719         }
720 
721         try {
722             subMap_startIncluded_endIncluded.headMap(endKey);
723             fail("should throw IllegalArgumentException");
724         } catch (IllegalArgumentException e) {
725             // Expected
726         }
727 
728         // With Comparator
729         endKey = new Integer(99).toString();
730         try {
731             subMap_default_comparator.headMap(endKey);
732             fail("should throw IllegalArgumentException");
733         } catch (IllegalArgumentException e) {
734             // Expected
735         }
736 
737         try {
738             subMap_startExcluded_endExcluded_comparator.headMap(endKey);
739             fail("should throw IllegalArgumentException");
740         } catch (IllegalArgumentException e) {
741             // Expected
742         }
743 
744         try {
745             subMap_startExcluded_endIncluded_comparator.headMap(endKey);
746             fail("should throw IllegalArgumentException");
747         } catch (IllegalArgumentException e) {
748             // Expected
749         }
750 
751         try {
752             subMap_startIncluded_endExcluded_comparator.headMap(endKey);
753             fail("should throw IllegalArgumentException");
754         } catch (IllegalArgumentException e) {
755             // Expected
756         }
757 
758         try {
759             subMap_startIncluded_endIncluded_comparator.headMap(endKey);
760             fail("should throw IllegalArgumentException");
761         } catch (IllegalArgumentException e) {
762             // Expected
763         }
764 
765         headMap = null;
766         endKey = new Integer(100).toString();
767         headMap = subMap_default_comparator.headMap(endKey);
768         assertEquals(0, headMap.size());
769 
770         try {
771             headMap = subMap_startExcluded_endExcluded_comparator.headMap(endKey);
772             fail("should throw IllegalArgumentException");
773         } catch (IllegalArgumentException e) {
774             // Expected
775         }
776 
777         try {
778             headMap = subMap_startExcluded_endIncluded_comparator.headMap(endKey);
779             fail("should throw IllegalArgumentException");
780         } catch (IllegalArgumentException e) {
781             // Expected
782         }
783 
784         headMap = subMap_startIncluded_endExcluded_comparator.headMap(endKey);
785         assertEquals(0, headMap.size());
786 
787         headMap = subMap_startIncluded_endIncluded_comparator.headMap(endKey);
788         assertEquals(0, headMap.size());
789 
790         for (int i = 0, j = 101; i < 8; i++) {
791             endKey = new Integer(i + j).toString();
792             headMap = subMap_default_comparator.headMap(endKey);
793             assertEquals(i + 1, headMap.size());
794 
795             headMap = subMap_startExcluded_endExcluded_comparator
796                     .headMap(endKey);
797             assertEquals(i, headMap.size());
798 
799             headMap = subMap_startExcluded_endIncluded_comparator
800                     .headMap(endKey);
801             assertEquals(i, headMap.size());
802 
803             headMap = subMap_startIncluded_endExcluded_comparator
804                     .headMap(endKey);
805             assertEquals(i + 1, headMap.size());
806 
807             headMap = subMap_startIncluded_endIncluded_comparator
808                     .headMap(endKey);
809             assertEquals(i + 1, headMap.size());
810         }
811 
812         endKey = new Integer(108).toString();
813         headMap = subMap_default_comparator.headMap(endKey);
814         assertEquals(8, headMap.size());
815 
816         headMap = subMap_startExcluded_endExcluded_comparator.headMap(endKey);
817         assertEquals(7, headMap.size());
818 
819         headMap = subMap_startExcluded_endIncluded_comparator.headMap(endKey);
820         assertEquals(7, headMap.size());
821 
822         headMap = subMap_startIncluded_endExcluded_comparator.headMap(endKey);
823         assertEquals(8, headMap.size());
824 
825         headMap = subMap_startIncluded_endIncluded_comparator.headMap(endKey);
826         assertEquals(8, headMap.size());
827 
828         endKey = new Integer(110).toString();
829         try {
830             subMap_default_comparator.headMap(endKey);
831             fail("should throw IllegalArgumentException");
832         } catch (IllegalArgumentException e) {
833             // Expected
834         }
835 
836         try {
837             subMap_startExcluded_endExcluded_comparator.headMap(endKey);
838             fail("should throw IllegalArgumentException");
839         } catch (IllegalArgumentException e) {
840             // Expected
841         }
842 
843         try {
844             subMap_startExcluded_endIncluded_comparator.headMap(endKey);
845             fail("should throw IllegalArgumentException");
846         } catch (IllegalArgumentException e) {
847             // Expected
848         }
849 
850         try {
851             subMap_startIncluded_endExcluded_comparator.headMap(endKey);
852             fail("should throw IllegalArgumentException");
853         } catch (IllegalArgumentException e) {
854             // Expected
855         }
856 
857         try {
858             subMap_startIncluded_endIncluded_comparator.headMap(endKey);
859             fail("should throw IllegalArgumentException");
860         } catch (IllegalArgumentException e) {
861             // Expected
862         }
863     }
864 
test_SubMap_isEmpty()865     public void test_SubMap_isEmpty() {
866         assertFalse(subMap_default.isEmpty());
867         assertFalse(subMap_startExcluded_endExcluded.isEmpty());
868         assertFalse(subMap_startExcluded_endIncluded.isEmpty());
869         assertFalse(subMap_startIncluded_endExcluded.isEmpty());
870         assertFalse(subMap_startIncluded_endIncluded.isEmpty());
871 
872         Object startKey = new Integer(100);
873         Object endKey = startKey;
874         SortedMap subMap = tm.subMap(startKey.toString(), endKey.toString());
875         assertTrue(subMap.isEmpty());
876         subMap = subMap_default.subMap(startKey.toString(), endKey.toString());
877         assertTrue(subMap.isEmpty());
878         subMap = subMap_startIncluded_endExcluded.subMap(startKey.toString(),
879                 endKey.toString());
880         assertTrue(subMap.isEmpty());
881         subMap = subMap_startIncluded_endIncluded.subMap(startKey.toString(),
882                 endKey.toString());
883         assertTrue(subMap.isEmpty());
884 
885         for (int i = 0, j = 101; i < 8; i++) {
886             startKey = i + j;
887             endKey = startKey;
888 
889             subMap = subMap_default.subMap(startKey.toString(), endKey
890                     .toString());
891             assertTrue(subMap.isEmpty());
892 
893             subMap = subMap_startExcluded_endExcluded.subMap(startKey
894                     .toString(), endKey.toString());
895             assertTrue(subMap.isEmpty());
896 
897             subMap = subMap_startExcluded_endIncluded.subMap(startKey
898                     .toString(), endKey.toString());
899             assertTrue(subMap.isEmpty());
900 
901             subMap = subMap_startIncluded_endExcluded.subMap(startKey
902                     .toString(), endKey.toString());
903             assertTrue(subMap.isEmpty());
904 
905             subMap = subMap_startIncluded_endIncluded.subMap(startKey
906                     .toString(), endKey.toString());
907             assertTrue(subMap.isEmpty());
908         }
909 
910         for (int i = 0, j = 101; i < 5; i++) {
911             startKey = i + j;
912             endKey = i + j + 4;
913 
914             subMap = subMap_default.subMap(startKey.toString(), endKey
915                     .toString());
916             assertFalse(subMap.isEmpty());
917 
918             subMap = subMap_startExcluded_endExcluded.subMap(startKey
919                     .toString(), endKey.toString());
920             assertFalse(subMap.isEmpty());
921 
922             subMap = subMap_startExcluded_endIncluded.subMap(startKey
923                     .toString(), endKey.toString());
924             assertFalse(subMap.isEmpty());
925 
926             subMap = subMap_startIncluded_endExcluded.subMap(startKey
927                     .toString(), endKey.toString());
928             assertFalse(subMap.isEmpty());
929 
930             subMap = subMap_startIncluded_endIncluded.subMap(startKey
931                     .toString(), endKey.toString());
932             assertFalse(subMap.isEmpty());
933         }
934 
935         startKey = new Integer(109).toString();
936         endKey = startKey;
937         subMap = tm.subMap(startKey.toString(), endKey.toString());
938         assertTrue(subMap.isEmpty());
939         subMap = subMap_startExcluded_endIncluded.subMap(startKey, endKey);
940         assertTrue(subMap.isEmpty());
941         subMap = subMap_startIncluded_endIncluded.subMap(startKey, endKey);
942         assertTrue(subMap.isEmpty());
943 
944     }
945 
test_SubMap_keySet()946     public void test_SubMap_keySet() {
947         Set keySet = subMap_default.keySet();
948         assertFalse(keySet.isEmpty());
949         assertEquals(9, keySet.size());
950 
951         keySet = subMap_startExcluded_endExcluded.entrySet();
952         assertFalse(keySet.isEmpty());
953         assertEquals(8, keySet.size());
954 
955         keySet = subMap_startExcluded_endIncluded.entrySet();
956         assertFalse(keySet.isEmpty());
957         assertEquals(9, keySet.size());
958 
959         keySet = subMap_startIncluded_endExcluded.entrySet();
960         assertFalse(keySet.isEmpty());
961         assertEquals(9, keySet.size());
962 
963         keySet = subMap_startIncluded_endIncluded.entrySet();
964         assertFalse(keySet.isEmpty());
965         assertEquals(10, keySet.size());
966     }
967 
test_SubMap_put()968     public void test_SubMap_put() {
969         Integer value = new Integer(100);
970         int addValue = 5;
971 
972         subMap_default.put(value.toString(), value + addValue);
973         assertEquals(value + addValue, subMap_default.get(value.toString()));
974 
975         try {
976             subMap_startExcluded_endExcluded.put(value.toString(), value
977                     + addValue);
978             fail("should throw IllegalArgumentException");
979         } catch (IllegalArgumentException e) {
980             // Expected
981         }
982 
983         try {
984             subMap_startExcluded_endIncluded.put(value.toString(), value
985                     + addValue);
986             fail("should throw IllegalArgumentException");
987         } catch (IllegalArgumentException e) {
988             // Expected
989         }
990 
991         subMap_startIncluded_endExcluded
992                 .put(value.toString(), value + addValue);
993         assertEquals(value + addValue, subMap_startIncluded_endExcluded
994                 .get(value.toString()));
995 
996         subMap_startIncluded_endIncluded
997                 .put(value.toString(), value + addValue);
998         assertEquals(value + addValue, subMap_startIncluded_endIncluded
999                 .get(value.toString()));
1000 
1001         value = new Integer(109);
1002         try {
1003             subMap_default.put(value.toString(), value + addValue);
1004             fail("should throw IllegalArgumentException");
1005         } catch (IllegalArgumentException e) {
1006             // Expected
1007         }
1008 
1009         try {
1010             subMap_startExcluded_endExcluded.put(value.toString(), value
1011                     + addValue);
1012             fail("should throw IllegalArgumentException");
1013         } catch (IllegalArgumentException e) {
1014             // Expected
1015         }
1016 
1017         subMap_startExcluded_endIncluded
1018                 .put(value.toString(), value + addValue);
1019         assertEquals(value + addValue, subMap_startExcluded_endIncluded
1020                 .get(value.toString()));
1021 
1022         try {
1023             subMap_startIncluded_endExcluded.put(value.toString(), value
1024                     + addValue);
1025             fail("should throw IllegalArgumentException");
1026         } catch (IllegalArgumentException e) {
1027             // Expected
1028         }
1029 
1030         subMap_startIncluded_endIncluded
1031                 .put(value.toString(), value + addValue);
1032         assertEquals(value + addValue, subMap_startIncluded_endIncluded
1033                 .get(value.toString()));
1034     }
1035 
test_SubMap_remove()1036     public void test_SubMap_remove() {
1037         Integer value = new Integer(100);
1038 
1039         subMap_default.remove(value.toString());
1040         assertNull(subMap_default.get(value.toString()));
1041 
1042         subMap_startExcluded_endExcluded.remove(value.toString());
1043         assertNull(subMap_startExcluded_endExcluded.get(value.toString()));
1044 
1045         subMap_startExcluded_endIncluded.remove(value.toString());
1046         assertNull(subMap_startExcluded_endIncluded.get(value.toString()));
1047 
1048         subMap_startIncluded_endExcluded.remove(value.toString());
1049         assertNull(subMap_startIncluded_endExcluded.get(value.toString()));
1050 
1051         subMap_startIncluded_endIncluded.remove(value.toString());
1052         assertNull(subMap_startIncluded_endIncluded.get(value.toString()));
1053 
1054         value = new Integer(109);
1055         subMap_default.remove(value.toString());
1056         assertNull(subMap_default.get(value.toString()));
1057 
1058         subMap_startExcluded_endExcluded.remove(value.toString());
1059         assertNull(subMap_startExcluded_endExcluded.get(value.toString()));
1060 
1061         subMap_startExcluded_endIncluded.remove(value.toString());
1062         assertNull(subMap_startExcluded_endIncluded.get(value.toString()));
1063 
1064         subMap_startIncluded_endExcluded.remove(value.toString());
1065         assertNull(subMap_startIncluded_endExcluded.get(value.toString()));
1066 
1067         subMap_startIncluded_endIncluded.remove(value.toString());
1068         assertNull(subMap_startIncluded_endIncluded.get(value.toString()));
1069     }
1070 
test_SubMap_subMap_NoComparator()1071     public void test_SubMap_subMap_NoComparator() {
1072         String startKey = new Integer[100].toString();
1073         String endKey = new Integer[100].toString();
1074         try {
1075             subMap_default.subMap(startKey, endKey);
1076             fail("should throw IllegalArgumentException");
1077         } catch (IllegalArgumentException e) {
1078             // Expected
1079         }
1080 
1081         try {
1082             subMap_startExcluded_endExcluded.subMap(startKey, endKey);
1083             fail("should throw IllegalArgumentException");
1084         } catch (IllegalArgumentException e) {
1085             // Expected
1086         }
1087 
1088         try {
1089             subMap_startExcluded_endIncluded.subMap(startKey, endKey);
1090             fail("should throw IllegalArgumentException");
1091         } catch (IllegalArgumentException e) {
1092             // Expected
1093         }
1094 
1095         try {
1096             subMap_startIncluded_endExcluded.subMap(startKey, endKey);
1097             fail("should throw IllegalArgumentException");
1098         } catch (IllegalArgumentException e) {
1099             // Expected
1100         }
1101 
1102         try {
1103             subMap_startIncluded_endIncluded.subMap(startKey, endKey);
1104             fail("should throw IllegalArgumentException");
1105         } catch (IllegalArgumentException e) {
1106             // Expected
1107         }
1108 
1109         SortedMap subSubMap = null;
1110         for (int i = 101; i < 109; i++) {
1111             startKey = new Integer(i).toString();
1112             endKey = startKey;
1113 
1114             subSubMap = subMap_default.subMap(startKey, endKey);
1115             assertEquals(0, subSubMap.size());
1116 
1117             subSubMap = subMap_startExcluded_endExcluded.subMap(startKey,
1118                     endKey);
1119             assertEquals(0, subSubMap.size());
1120 
1121             subSubMap = subMap_startExcluded_endIncluded.subMap(startKey,
1122                     endKey);
1123             assertEquals(0, subSubMap.size());
1124 
1125             subSubMap = subMap_startIncluded_endExcluded.subMap(startKey,
1126                     endKey);
1127             assertEquals(0, subSubMap.size());
1128 
1129             subSubMap = subMap_startIncluded_endIncluded.subMap(startKey,
1130                     endKey);
1131             assertEquals(0, subSubMap.size());
1132         }
1133 
1134         for (int i = 101, j = 5; i < 105; i++) {
1135             startKey = new Integer(i).toString();
1136             endKey = new Integer(i + j).toString();
1137 
1138             subSubMap = subMap_default.subMap(startKey, endKey);
1139             assertEquals(j, subSubMap.size());
1140 
1141             subSubMap = subMap_startExcluded_endExcluded.subMap(startKey,
1142                     endKey);
1143             assertEquals(j, subSubMap.size());
1144 
1145             subSubMap = subMap_startExcluded_endIncluded.subMap(startKey,
1146                     endKey);
1147             assertEquals(j, subSubMap.size());
1148 
1149             subSubMap = subMap_startIncluded_endExcluded.subMap(startKey,
1150                     endKey);
1151             assertEquals(j, subSubMap.size());
1152 
1153             subSubMap = subMap_startIncluded_endIncluded.subMap(startKey,
1154                     endKey);
1155             assertEquals(j, subSubMap.size());
1156         }
1157 
1158         startKey = new Integer(108).toString();
1159         endKey = new Integer(109).toString();
1160 
1161         subSubMap = subMap_default.subMap(startKey, endKey);
1162         assertEquals(1, subSubMap.size());
1163 
1164         subSubMap = subMap_startExcluded_endExcluded.subMap(startKey, endKey);
1165         assertEquals(1, subSubMap.size());
1166 
1167         subSubMap = subMap_startExcluded_endIncluded.subMap(startKey, endKey);
1168         assertEquals(1, subSubMap.size());
1169 
1170         subSubMap = subMap_startIncluded_endExcluded.subMap(startKey, endKey);
1171         assertEquals(1, subSubMap.size());
1172 
1173         subSubMap = subMap_startIncluded_endIncluded.subMap(startKey, endKey);
1174         assertEquals(1, subSubMap.size());
1175 
1176         startKey = new Integer(109).toString();
1177         endKey = new Integer(109).toString();
1178 
1179         try {
1180             subMap_default.subMap(startKey, endKey);
1181             fail("should throw IllegalArgumentException");
1182         } catch (IllegalArgumentException e) {
1183             // Expected
1184         }
1185 
1186         try {
1187             subMap_startExcluded_endExcluded.subMap(startKey, endKey);
1188             fail("should throw IllegalArgumentException");
1189         } catch (IllegalArgumentException e) {
1190             // Expected
1191         }
1192 
1193         subSubMap = subMap_startExcluded_endIncluded.subMap(startKey, endKey);
1194         assertEquals(0, subSubMap.size());
1195 
1196         try {
1197             subMap_startIncluded_endExcluded.subMap(startKey, endKey);
1198             fail("should throw IllegalArgumentException");
1199         } catch (IllegalArgumentException e) {
1200             // Expected
1201         }
1202 
1203         subSubMap = subMap_startIncluded_endIncluded.subMap(startKey, endKey);
1204         assertEquals(0, subSubMap.size());
1205     }
1206 
test_SubMap_subMap_Comparator()1207     public void test_SubMap_subMap_Comparator() {
1208         String startKey = new Integer[100].toString();
1209         String endKey = new Integer[100].toString();
1210         try {
1211             subMap_default_comparator.subMap(startKey, endKey);
1212             fail("should throw IllegalArgumentException");
1213         } catch (IllegalArgumentException e) {
1214             // Expected
1215         }
1216 
1217         try {
1218             subMap_startExcluded_endExcluded_comparator
1219                     .subMap(startKey, endKey);
1220             fail("should throw IllegalArgumentException");
1221         } catch (IllegalArgumentException e) {
1222             // Expected
1223         }
1224 
1225         try {
1226             subMap_startExcluded_endIncluded_comparator
1227                     .subMap(startKey, endKey);
1228             fail("should throw IllegalArgumentException");
1229         } catch (IllegalArgumentException e) {
1230             // Expected
1231         }
1232 
1233         try {
1234             subMap_startIncluded_endExcluded_comparator
1235                     .subMap(startKey, endKey);
1236             fail("should throw IllegalArgumentException");
1237         } catch (IllegalArgumentException e) {
1238             // Expected
1239         }
1240 
1241         try {
1242             subMap_startIncluded_endIncluded_comparator
1243                     .subMap(startKey, endKey);
1244             fail("should throw IllegalArgumentException");
1245         } catch (IllegalArgumentException e) {
1246             // Expected
1247         }
1248 
1249         SortedMap subSubMap = null;
1250         for (int i = 101; i < 109; i++) {
1251             startKey = new Integer(i).toString();
1252             endKey = startKey;
1253 
1254             subSubMap = subMap_default_comparator.subMap(startKey, endKey);
1255             assertEquals(0, subSubMap.size());
1256 
1257             subSubMap = subMap_startExcluded_endExcluded_comparator.subMap(
1258                     startKey, endKey);
1259             assertEquals(0, subSubMap.size());
1260 
1261             subSubMap = subMap_startExcluded_endIncluded_comparator.subMap(
1262                     startKey, endKey);
1263             assertEquals(0, subSubMap.size());
1264 
1265             subSubMap = subMap_startIncluded_endExcluded_comparator.subMap(
1266                     startKey, endKey);
1267             assertEquals(0, subSubMap.size());
1268 
1269             subSubMap = subMap_startIncluded_endIncluded_comparator.subMap(
1270                     startKey, endKey);
1271             assertEquals(0, subSubMap.size());
1272         }
1273 
1274         for (int i = 101, j = 5; i < 105; i++) {
1275             startKey = new Integer(i).toString();
1276             endKey = new Integer(i + j).toString();
1277 
1278             subSubMap = subMap_default_comparator.subMap(startKey, endKey);
1279             assertEquals(j, subSubMap.size());
1280 
1281             subSubMap = subMap_startExcluded_endExcluded_comparator.subMap(
1282                     startKey, endKey);
1283             assertEquals(j, subSubMap.size());
1284 
1285             subSubMap = subMap_startExcluded_endIncluded_comparator.subMap(
1286                     startKey, endKey);
1287             assertEquals(j, subSubMap.size());
1288 
1289             subSubMap = subMap_startIncluded_endExcluded_comparator.subMap(
1290                     startKey, endKey);
1291             assertEquals(j, subSubMap.size());
1292 
1293             subSubMap = subMap_startIncluded_endIncluded_comparator.subMap(
1294                     startKey, endKey);
1295             assertEquals(j, subSubMap.size());
1296         }
1297 
1298         startKey = new Integer(108).toString();
1299         endKey = new Integer(109).toString();
1300 
1301         subSubMap = subMap_default_comparator.subMap(startKey, endKey);
1302         assertEquals(1, subSubMap.size());
1303 
1304         subSubMap = subMap_startExcluded_endExcluded_comparator.subMap(
1305                 startKey, endKey);
1306         assertEquals(1, subSubMap.size());
1307 
1308         subSubMap = subMap_startExcluded_endIncluded_comparator.subMap(
1309                 startKey, endKey);
1310         assertEquals(1, subSubMap.size());
1311 
1312         subSubMap = subMap_startIncluded_endExcluded_comparator.subMap(
1313                 startKey, endKey);
1314         assertEquals(1, subSubMap.size());
1315 
1316         subSubMap = subMap_startIncluded_endIncluded_comparator.subMap(
1317                 startKey, endKey);
1318         assertEquals(1, subSubMap.size());
1319 
1320         startKey = new Integer(109).toString();
1321         endKey = new Integer(109).toString();
1322 
1323         try {
1324             subMap_default_comparator.subMap(startKey, endKey);
1325             fail("should throw IllegalArgumentException");
1326         } catch (IllegalArgumentException e) {
1327             // Expected
1328         }
1329 
1330         try {
1331             subMap_startExcluded_endExcluded_comparator
1332                     .subMap(startKey, endKey);
1333             fail("should throw IllegalArgumentException");
1334         } catch (IllegalArgumentException e) {
1335             // Expected
1336         }
1337 
1338         subSubMap = subMap_startExcluded_endIncluded_comparator.subMap(
1339                 startKey, endKey);
1340         assertEquals(0, subSubMap.size());
1341 
1342         try {
1343             subMap_startIncluded_endExcluded_comparator
1344                     .subMap(startKey, endKey);
1345             fail("should throw IllegalArgumentException");
1346         } catch (IllegalArgumentException e) {
1347             // Expected
1348         }
1349 
1350         subSubMap = subMap_startIncluded_endIncluded_comparator.subMap(
1351                 startKey, endKey);
1352         assertEquals(0, subSubMap.size());
1353     }
1354 
test_SubMap_tailMap()1355     public void test_SubMap_tailMap() {
1356         String startKey = new Integer(99).toString();
1357         try {
1358             subMap_default.tailMap(startKey);
1359             fail("should throw IllegalArgumentException");
1360         } catch (IllegalArgumentException e) {
1361             // Expected
1362         }
1363 
1364         try {
1365             subMap_startExcluded_endExcluded.tailMap(startKey);
1366             fail("should throw IllegalArgumentException");
1367         } catch (IllegalArgumentException e) {
1368             // Expected
1369         }
1370 
1371         try {
1372             subMap_startExcluded_endIncluded.tailMap(startKey);
1373             fail("should throw IllegalArgumentException");
1374         } catch (IllegalArgumentException e) {
1375             // Expected
1376         }
1377 
1378         try {
1379             subMap_startIncluded_endExcluded.tailMap(startKey);
1380             fail("should throw IllegalArgumentException");
1381         } catch (IllegalArgumentException e) {
1382             // Expected
1383         }
1384 
1385         try {
1386             subMap_startIncluded_endIncluded.tailMap(startKey);
1387             fail("should throw IllegalArgumentException");
1388         } catch (IllegalArgumentException e) {
1389             // Expected
1390         }
1391         SortedMap tailMap = null;
1392 
1393         startKey = new Integer(100).toString();
1394         tailMap = subMap_default.tailMap(startKey);
1395         assertEquals(9, tailMap.size());
1396 
1397         try {
1398             subMap_startExcluded_endExcluded.tailMap(startKey);
1399             fail("should throw IllegalArgumentException");
1400         } catch (IllegalArgumentException e) {
1401             // Expected
1402         }
1403 
1404         try {
1405             subMap_startExcluded_endIncluded.tailMap(startKey);
1406             fail("should throw IllegalArgumentException");
1407         } catch (IllegalArgumentException e) {
1408             // Expected
1409         }
1410 
1411         tailMap = subMap_startIncluded_endExcluded.tailMap(startKey);
1412         assertEquals(9, tailMap.size());
1413 
1414         tailMap = subMap_startIncluded_endIncluded.tailMap(startKey);
1415         assertEquals(10, tailMap.size());
1416 
1417         for (int i = 0, j = 101, end = 8; i < end; i++) {
1418             startKey = new Integer(i + j).toString();
1419             tailMap = subMap_default.tailMap(startKey);
1420             assertEquals(end - i, tailMap.size());
1421 
1422             tailMap = subMap_startExcluded_endExcluded.tailMap(startKey);
1423             assertEquals(end - i, tailMap.size());
1424 
1425             tailMap = subMap_startExcluded_endIncluded.tailMap(startKey);
1426             assertEquals(end - i + 1, tailMap.size());
1427 
1428             tailMap = subMap_startIncluded_endExcluded.tailMap(startKey);
1429             assertEquals(end - i, tailMap.size());
1430 
1431             tailMap = subMap_startIncluded_endIncluded.tailMap(startKey);
1432             assertEquals(end - i + 1, tailMap.size());
1433         }
1434 
1435         startKey = new Integer(109).toString();
1436         try {
1437             subMap_default.tailMap(startKey);
1438             fail("should throw IllegalArgumentException");
1439         } catch (IllegalArgumentException e) {
1440             // Expected
1441         }
1442         try {
1443             subMap_startExcluded_endExcluded.tailMap(startKey);
1444             fail("should throw IllegalArgumentException");
1445         } catch (IllegalArgumentException e) {
1446             // Expected
1447         }
1448 
1449         tailMap = subMap_startExcluded_endIncluded.tailMap(startKey);
1450         assertEquals(1, tailMap.size());
1451 
1452         try {
1453             subMap_startIncluded_endExcluded.tailMap(startKey);
1454             fail("should throw IllegalArgumentException");
1455         } catch (IllegalArgumentException e) {
1456             // Expected
1457         }
1458 
1459         tailMap = subMap_startIncluded_endIncluded.tailMap(startKey);
1460         assertEquals(1, tailMap.size());
1461 
1462         startKey = new Integer(110).toString();
1463         try {
1464             subMap_default.tailMap(startKey);
1465             fail("should throw IllegalArgumentException");
1466         } catch (IllegalArgumentException e) {
1467             // Expected
1468         }
1469 
1470         try {
1471             subMap_startExcluded_endExcluded.tailMap(startKey);
1472             fail("should throw IllegalArgumentException");
1473         } catch (IllegalArgumentException e) {
1474             // Expected
1475         }
1476         try {
1477             subMap_startExcluded_endIncluded.tailMap(startKey);
1478             fail("should throw IllegalArgumentException");
1479         } catch (IllegalArgumentException e) {
1480             // Expected
1481         }
1482         try {
1483             subMap_startIncluded_endExcluded.tailMap(startKey);
1484             fail("should throw IllegalArgumentException");
1485         } catch (IllegalArgumentException e) {
1486             // Expected
1487         }
1488         try {
1489             subMap_startIncluded_endIncluded.tailMap(startKey);
1490             fail("should throw IllegalArgumentException");
1491         } catch (IllegalArgumentException e) {
1492             // Expected
1493         }
1494     }
1495 
test_SubMap_values()1496     public void test_SubMap_values() {
1497         Collection values = subMap_default.values();
1498 
1499         assertFalse(values.isEmpty());
1500         assertTrue(values.contains(100));
1501         for (int i = 101; i < 109; i++) {
1502             assertTrue(values.contains(i));
1503         }
1504         assertFalse(values.contains(109));
1505 
1506         values = subMap_startExcluded_endExcluded.values();
1507         assertFalse(values.isEmpty());
1508         assertFalse(values.contains(100));
1509         for (int i = 101; i < 109; i++) {
1510             assertTrue(values.contains(i));
1511         }
1512         assertFalse(values.contains(109));
1513 
1514         values = subMap_startExcluded_endIncluded.values();
1515         assertFalse(values.isEmpty());
1516         assertFalse(values.contains(100));
1517         for (int i = 101; i < 109; i++) {
1518             assertTrue(values.contains(i));
1519         }
1520         assertTrue(values.contains(109));
1521 
1522         values = subMap_startIncluded_endExcluded.values();
1523         assertFalse(values.isEmpty());
1524         assertTrue(values.contains(100));
1525         for (int i = 101; i < 109; i++) {
1526             assertTrue(values.contains(i));
1527         }
1528         assertFalse(values.contains(109));
1529 
1530         values = subMap_startIncluded_endIncluded.values();
1531         assertFalse(values.isEmpty());
1532         assertTrue(values.contains(100));
1533         for (int i = 100; i < 109; i++) {
1534             assertTrue(values.contains(i));
1535         }
1536         assertTrue(values.contains(109));
1537     }
1538 
test_SubMap_size()1539     public void test_SubMap_size() {
1540         assertEquals(9, subMap_default.size());
1541         assertEquals(8, subMap_startExcluded_endExcluded.size());
1542         assertEquals(9, subMap_startExcluded_endIncluded.size());
1543         assertEquals(9, subMap_startIncluded_endExcluded.size());
1544         assertEquals(10, subMap_startIncluded_endIncluded.size());
1545 
1546         assertEquals(9, subMap_default_comparator.size());
1547         assertEquals(8, subMap_startExcluded_endExcluded_comparator.size());
1548         assertEquals(9, subMap_startExcluded_endIncluded_comparator.size());
1549         assertEquals(9, subMap_startIncluded_endExcluded_comparator.size());
1550         assertEquals(10, subMap_startIncluded_endIncluded_comparator.size());
1551     }
1552 
test_SubMap_readObject()1553     public void test_SubMap_readObject() throws Exception {
1554         // SerializationTest.verifySelf(subMap_default);
1555         // SerializationTest.verifySelf(subMap_startExcluded_endExcluded);
1556         // SerializationTest.verifySelf(subMap_startExcluded_endIncluded);
1557         // SerializationTest.verifySelf(subMap_startIncluded_endExcluded);
1558         // SerializationTest.verifySelf(subMap_startIncluded_endIncluded);
1559     }
1560 
test_AscendingSubMap_ceilingEntry()1561     public void test_AscendingSubMap_ceilingEntry() {
1562         String key = new Integer(99).toString();
1563         assertNull(navigableMap_startExcluded_endExcluded.ceilingEntry(key));
1564         assertNull(navigableMap_startExcluded_endIncluded.ceilingEntry(key));
1565         assertNull(navigableMap_startIncluded_endExcluded.ceilingEntry(key));
1566         assertNull(navigableMap_startIncluded_endIncluded.ceilingEntry(key));
1567 
1568         key = new Integer(100).toString();
1569         assertEquals(101, navigableMap_startExcluded_endExcluded.ceilingEntry(
1570                 key).getValue());
1571         assertEquals(101, navigableMap_startExcluded_endIncluded.ceilingEntry(
1572                 key).getValue());
1573         assertEquals(100, navigableMap_startIncluded_endExcluded.ceilingEntry(
1574                 key).getValue());
1575         assertEquals(100, navigableMap_startIncluded_endIncluded.ceilingEntry(
1576                 key).getValue());
1577 
1578         for (int i = 101; i < 109; i++) {
1579             key = new Integer(i).toString();
1580             assertEquals(i, navigableMap_startExcluded_endExcluded
1581                     .ceilingEntry(key).getValue());
1582             assertEquals(i, navigableMap_startExcluded_endIncluded
1583                     .ceilingEntry(key).getValue());
1584             assertEquals(i, navigableMap_startIncluded_endExcluded
1585                     .ceilingEntry(key).getValue());
1586             assertEquals(i, navigableMap_startIncluded_endIncluded
1587                     .ceilingEntry(key).getValue());
1588 
1589         }
1590 
1591         key = new Integer(109).toString();
1592         assertNull(navigableMap_startExcluded_endExcluded.ceilingEntry(key));
1593         assertEquals(109, navigableMap_startExcluded_endIncluded.ceilingEntry(
1594                 key).getValue());
1595         assertNull(navigableMap_startIncluded_endExcluded.ceilingEntry(key));
1596         assertEquals(109, navigableMap_startIncluded_endIncluded.ceilingEntry(
1597                 key).getValue());
1598 
1599         key = new Integer(110).toString();
1600         assertNull(navigableMap_startExcluded_endExcluded.ceilingEntry(key));
1601         assertNull(navigableMap_startExcluded_endIncluded.ceilingEntry(key));
1602         assertNull(navigableMap_startIncluded_endExcluded.ceilingEntry(key));
1603         assertNull(navigableMap_startIncluded_endIncluded.ceilingEntry(key));
1604     }
1605 
test_AscendingSubMap_descendingMap()1606     public void test_AscendingSubMap_descendingMap() {
1607         NavigableMap descendingMap = navigableMap_startExcluded_endExcluded
1608                 .descendingMap();
1609         assertEquals(navigableMap_startExcluded_endExcluded.size(),
1610                 descendingMap.size());
1611         assertNotNull(descendingMap.comparator());
1612 
1613         assertEquals(navigableMap_startExcluded_endExcluded.firstKey(),
1614                 descendingMap.lastKey());
1615         assertEquals(navigableMap_startExcluded_endExcluded.firstEntry(),
1616                 descendingMap.lastEntry());
1617 
1618         assertEquals(navigableMap_startExcluded_endExcluded.lastKey(),
1619                 descendingMap.firstKey());
1620         assertEquals(navigableMap_startExcluded_endExcluded.lastEntry(),
1621                 descendingMap.firstEntry());
1622 
1623         descendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
1624         assertEquals(navigableMap_startExcluded_endIncluded.size(),
1625                 descendingMap.size());
1626         assertNotNull(descendingMap.comparator());
1627 
1628         assertEquals(navigableMap_startExcluded_endIncluded.firstKey(),
1629                 descendingMap.lastKey());
1630         assertEquals(navigableMap_startExcluded_endIncluded.firstEntry(),
1631                 descendingMap.lastEntry());
1632 
1633         assertEquals(navigableMap_startExcluded_endIncluded.lastKey(),
1634                 descendingMap.firstKey());
1635         assertEquals(navigableMap_startExcluded_endIncluded.lastEntry(),
1636                 descendingMap.firstEntry());
1637 
1638         descendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
1639         assertEquals(navigableMap_startIncluded_endExcluded.size(),
1640                 descendingMap.size());
1641         assertNotNull(descendingMap.comparator());
1642 
1643         assertEquals(navigableMap_startIncluded_endExcluded.firstKey(),
1644                 descendingMap.lastKey());
1645         assertEquals(navigableMap_startIncluded_endExcluded.firstEntry(),
1646                 descendingMap.lastEntry());
1647 
1648         assertEquals(navigableMap_startIncluded_endExcluded.lastKey(),
1649                 descendingMap.firstKey());
1650         assertEquals(navigableMap_startIncluded_endExcluded.lastEntry(),
1651                 descendingMap.firstEntry());
1652 
1653         descendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
1654         assertEquals(navigableMap_startIncluded_endIncluded.size(),
1655                 descendingMap.size());
1656         assertNotNull(descendingMap.comparator());
1657 
1658         assertEquals(navigableMap_startIncluded_endIncluded.firstKey(),
1659                 descendingMap.lastKey());
1660         assertEquals(navigableMap_startIncluded_endIncluded.firstEntry(),
1661                 descendingMap.lastEntry());
1662 
1663         assertEquals(navigableMap_startIncluded_endIncluded.lastKey(),
1664                 descendingMap.firstKey());
1665         assertEquals(navigableMap_startIncluded_endIncluded.lastEntry(),
1666                 descendingMap.firstEntry());
1667     }
1668 
test_AscendingSubMap_floorEntry()1669     public void test_AscendingSubMap_floorEntry() {
1670         String key = new Integer(99).toString();
1671         assertEquals(108, navigableMap_startExcluded_endExcluded
1672                 .floorEntry(key).getValue());
1673         assertEquals(109, navigableMap_startExcluded_endIncluded
1674                 .floorEntry(key).getValue());
1675         assertEquals(108, navigableMap_startIncluded_endExcluded
1676                 .floorEntry(key).getValue());
1677         assertEquals(109, navigableMap_startIncluded_endIncluded
1678                 .floorEntry(key).getValue());
1679 
1680         key = new Integer(100).toString();
1681         assertNull(navigableMap_startExcluded_endExcluded.floorEntry(key));
1682         assertNull(navigableMap_startExcluded_endIncluded.floorEntry(key));
1683         assertEquals(100, navigableMap_startIncluded_endExcluded
1684                 .floorEntry(key).getValue());
1685         assertEquals(100, navigableMap_startIncluded_endIncluded
1686                 .floorEntry(key).getValue());
1687 
1688         for (int i = 101; i < 109; i++) {
1689             key = new Integer(i).toString();
1690             assertEquals(i, navigableMap_startExcluded_endExcluded.floorEntry(
1691                     key).getValue());
1692             assertEquals(i, navigableMap_startExcluded_endIncluded.floorEntry(
1693                     key).getValue());
1694             assertEquals(i, navigableMap_startIncluded_endExcluded.floorEntry(
1695                     key).getValue());
1696             assertEquals(i, navigableMap_startIncluded_endIncluded.floorEntry(
1697                     key).getValue());
1698 
1699         }
1700 
1701         key = new Integer(109).toString();
1702         assertEquals(108, navigableMap_startExcluded_endExcluded
1703                 .floorEntry(key).getValue());
1704         assertEquals(109, navigableMap_startExcluded_endIncluded
1705                 .floorEntry(key).getValue());
1706         assertEquals(108, navigableMap_startIncluded_endExcluded
1707                 .floorEntry(key).getValue());
1708         assertEquals(109, navigableMap_startIncluded_endIncluded
1709                 .floorEntry(key).getValue());
1710 
1711         key = new Integer(110).toString();
1712         assertEquals(108, navigableMap_startExcluded_endExcluded
1713                 .floorEntry(key).getValue());
1714         assertEquals(109, navigableMap_startExcluded_endIncluded
1715                 .floorEntry(key).getValue());
1716         assertEquals(108, navigableMap_startIncluded_endExcluded
1717                 .floorEntry(key).getValue());
1718         assertEquals(109, navigableMap_startIncluded_endIncluded
1719                 .floorEntry(key).getValue());
1720     }
1721 
test_AscendingSubMap_pollFirstEntry()1722     public void test_AscendingSubMap_pollFirstEntry() {
1723         assertEquals(101, navigableMap_startExcluded_endExcluded
1724                 .pollFirstEntry().getValue());
1725         assertEquals(102, navigableMap_startExcluded_endIncluded
1726                 .pollFirstEntry().getValue());
1727         assertEquals(100, navigableMap_startIncluded_endExcluded
1728                 .pollFirstEntry().getValue());
1729         assertEquals(103, navigableMap_startIncluded_endIncluded
1730                 .pollFirstEntry().getValue());
1731     }
1732 
test_AscendingSubMap_pollLastEntry()1733     public void test_AscendingSubMap_pollLastEntry() {
1734         assertEquals(108, navigableMap_startExcluded_endExcluded
1735                 .pollLastEntry().getValue());
1736         assertEquals(109, navigableMap_startExcluded_endIncluded
1737                 .pollLastEntry().getValue());
1738         assertEquals(107, navigableMap_startIncluded_endExcluded
1739                 .pollLastEntry().getValue());
1740         assertEquals(106, navigableMap_startIncluded_endIncluded
1741                 .pollLastEntry().getValue());
1742     }
1743 
test_AscendingSubMap_entrySet()1744     public void test_AscendingSubMap_entrySet() {
1745         assertEquals(8, navigableMap_startExcluded_endExcluded.entrySet()
1746                 .size());
1747         assertEquals(9, navigableMap_startExcluded_endIncluded.entrySet()
1748                 .size());
1749         assertEquals(9, navigableMap_startIncluded_endExcluded.entrySet()
1750                 .size());
1751         assertEquals(10, navigableMap_startIncluded_endIncluded.entrySet()
1752                 .size());
1753     }
1754 
test_AscendingSubMap_subMap()1755     public void test_AscendingSubMap_subMap() {
1756         Set entrySet;
1757         Entry startEntry, endEntry;
1758         int startIndex, endIndex;
1759         SortedMap subMap;
1760         Iterator subMapSetIterator;
1761 
1762         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
1763         Iterator startIterator = entrySet.iterator();
1764         while (startIterator.hasNext()) {
1765             startEntry = (Entry) startIterator.next();
1766             startIndex = (Integer) startEntry.getValue();
1767             Iterator endIterator = entrySet.iterator();
1768             while (endIterator.hasNext()) {
1769                 endEntry = (Entry) endIterator.next();
1770                 endIndex = (Integer) endEntry.getValue();
1771 
1772                 if (startIndex > endIndex) {
1773                     try {
1774                         navigableMap_startExcluded_endExcluded.subMap(
1775                                 startEntry.getKey(), endEntry.getKey());
1776                         fail("should throw IllegalArgumentException");
1777                     } catch (IllegalArgumentException e) {
1778                         // Expected
1779                     }
1780                     try {
1781                         navigableMap_startExcluded_endExcluded.subMap(
1782                                 startEntry.getKey(), false, endEntry.getKey(),
1783                                 false);
1784                         fail("should throw IllegalArgumentException");
1785                     } catch (IllegalArgumentException e) {
1786                         // Expected
1787                     }
1788                     try {
1789                         navigableMap_startExcluded_endExcluded.subMap(
1790                                 startEntry.getKey(), false, endEntry.getKey(),
1791                                 true);
1792                         fail("should throw IllegalArgumentException");
1793                     } catch (IllegalArgumentException e) {
1794                         // Expected
1795                     }
1796                     try {
1797                         navigableMap_startExcluded_endExcluded.subMap(
1798                                 startEntry.getKey(), true, endEntry.getKey(),
1799                                 false);
1800                         fail("should throw IllegalArgumentException");
1801                     } catch (IllegalArgumentException e) {
1802                         // Expected
1803                     }
1804                     try {
1805                         navigableMap_startExcluded_endExcluded.subMap(
1806                                 startEntry.getKey(), true, endEntry.getKey(),
1807                                 true);
1808                         fail("should throw IllegalArgumentException");
1809                     } catch (IllegalArgumentException e) {
1810                         // Expected
1811                     }
1812                 } else {
1813                     subMap = navigableMap_startExcluded_endExcluded.subMap(
1814                             startEntry.getKey(), endEntry.getKey());
1815                     subMapSetIterator = subMap.entrySet().iterator();
1816                     for (int index = startIndex; index < endIndex; index++) {
1817                         assertEquals(index, ((Entry) subMapSetIterator.next())
1818                                 .getValue());
1819                     }
1820 
1821                     subMap = navigableMap_startExcluded_endExcluded.subMap(
1822                             startEntry.getKey(), false, endEntry.getKey(),
1823                             false);
1824                     subMapSetIterator = subMap.entrySet().iterator();
1825                     for (int index = startIndex + 1; index < endIndex; index++) {
1826                         assertEquals(index, ((Entry) subMapSetIterator.next())
1827                                 .getValue());
1828                     }
1829 
1830                     subMap = navigableMap_startExcluded_endExcluded
1831                             .subMap(startEntry.getKey(), false, endEntry
1832                                     .getKey(), true);
1833                     subMapSetIterator = subMap.entrySet().iterator();
1834                     for (int index = startIndex + 1; index < endIndex; index++) {
1835                         assertEquals(index, ((Entry) subMapSetIterator.next())
1836                                 .getValue());
1837                     }
1838 
1839                     subMap = navigableMap_startExcluded_endExcluded
1840                             .subMap(startEntry.getKey(), true, endEntry
1841                                     .getKey(), false);
1842                     subMapSetIterator = subMap.entrySet().iterator();
1843                     for (int index = startIndex; index < endIndex; index++) {
1844                         assertEquals(index, ((Entry) subMapSetIterator.next())
1845                                 .getValue());
1846                     }
1847 
1848                     subMap = navigableMap_startExcluded_endExcluded.subMap(
1849                             startEntry.getKey(), true, endEntry.getKey(), true);
1850                     subMapSetIterator = subMap.entrySet().iterator();
1851                     for (int index = startIndex; index <= endIndex; index++) {
1852                         assertEquals(index, ((Entry) subMapSetIterator.next())
1853                                 .getValue());
1854                     }
1855                 }
1856             }
1857         }
1858     }
1859 
test_DescendingSubMap_ceilingEntry()1860     public void test_DescendingSubMap_ceilingEntry() {
1861         NavigableMap decendingMap = tm.descendingMap();
1862         String key = new Integer(-1).toString();
1863         assertNull(decendingMap.ceilingEntry(key));
1864         for (int i = 0; i < objArray.length; i++) {
1865             key = objArray[i].toString();
1866             assertEquals(objArray[i], decendingMap.ceilingEntry(key).getValue());
1867         }
1868         key = new Integer(1000).toString();
1869         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1870         key = new Integer(1001).toString();
1871         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1872 
1873         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
1874         key = new Integer(100).toString();
1875         assertNull(decendingMap.ceilingEntry(key));
1876         for (int i = 101; i < 109; i++) {
1877             key = new Integer(i).toString();
1878             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1879         }
1880         key = new Integer(109).toString();
1881         assertEquals(108, decendingMap.ceilingEntry(key).getValue());
1882 
1883         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
1884         key = new Integer(100).toString();
1885         assertNull(decendingMap.ceilingEntry(key));
1886         for (int i = 101; i < 109; i++) {
1887             key = new Integer(i).toString();
1888             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1889         }
1890         key = new Integer(109).toString();
1891         assertEquals(109, decendingMap.ceilingEntry(key).getValue());
1892 
1893         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
1894         key = new Integer(100).toString();
1895         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1896         for (int i = 101; i < 109; i++) {
1897             key = new Integer(i).toString();
1898             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1899         }
1900         key = new Integer(109).toString();
1901         assertEquals(108, decendingMap.ceilingEntry(key).getValue());
1902 
1903         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
1904         key = new Integer(100).toString();
1905         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1906         for (int i = 101; i < 109; i++) {
1907             key = new Integer(i).toString();
1908             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1909         }
1910         key = new Integer(109).toString();
1911         assertEquals(109, decendingMap.ceilingEntry(key).getValue());
1912 
1913         // With Comparator
1914         decendingMap = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
1915                 .descendingMap();
1916         key = new Integer(100).toString();
1917         assertNull(decendingMap.ceilingEntry(key));
1918         for (int i = 101; i < 109; i++) {
1919             key = new Integer(i).toString();
1920             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1921         }
1922         key = new Integer(109).toString();
1923         assertEquals(108, decendingMap.ceilingEntry(key).getValue());
1924 
1925         decendingMap = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
1926                 .descendingMap();
1927         key = new Integer(100).toString();
1928         assertNull(decendingMap.ceilingEntry(key));
1929         for (int i = 101; i < 109; i++) {
1930             key = new Integer(i).toString();
1931             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1932         }
1933         key = new Integer(109).toString();
1934         assertEquals(109, decendingMap.ceilingEntry(key).getValue());
1935 
1936         decendingMap = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
1937                 .descendingMap();
1938         key = new Integer(100).toString();
1939         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1940         for (int i = 101; i < 109; i++) {
1941             key = new Integer(i).toString();
1942             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1943         }
1944         key = new Integer(109).toString();
1945         assertEquals(108, decendingMap.ceilingEntry(key).getValue());
1946 
1947         decendingMap = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
1948                 .descendingMap();
1949         key = new Integer(100).toString();
1950         assertEquals(100, decendingMap.ceilingEntry(key).getValue());
1951         for (int i = 101; i < 109; i++) {
1952             key = new Integer(i).toString();
1953             assertEquals(i, decendingMap.ceilingEntry(key).getValue());
1954         }
1955         key = new Integer(109).toString();
1956         assertEquals(109, decendingMap.ceilingEntry(key).getValue());
1957     }
1958 
test_DescendingSubMap_descendingMap()1959     public void test_DescendingSubMap_descendingMap() {
1960         NavigableMap decendingMap = tm.descendingMap();
1961         NavigableMap decendingDecendingMap = decendingMap.descendingMap();
1962         assertEquals(decendingMap, decendingDecendingMap);
1963 
1964         NavigableMap decendingMapHeadMap = decendingMap.headMap(
1965                 new Integer(990).toString(), false);
1966         NavigableMap decendingDecendingHeadMap = decendingMapHeadMap
1967                 .descendingMap();
1968         assertNotNull(decendingMapHeadMap);
1969         assertNotNull(decendingDecendingHeadMap);
1970         assertEquals(decendingMapHeadMap, decendingDecendingHeadMap);
1971 
1972         NavigableMap decendingMapTailMap = decendingMap.tailMap(
1973                 new Integer(990).toString(), false);
1974         NavigableMap decendingDecendingTailMap = decendingMapTailMap
1975                 .descendingMap();
1976         assertNotNull(decendingMapTailMap);
1977         assertNotNull(decendingDecendingTailMap);
1978         // assertEquals(decendingMapTailMap,decendingDecendingTailMap);
1979 
1980         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
1981         decendingDecendingMap = decendingMap.descendingMap();
1982         assertEquals(decendingMap, decendingDecendingMap);
1983 
1984         decendingMapHeadMap = decendingMap.headMap(new Integer(104).toString(),
1985                 false);
1986         decendingDecendingHeadMap = decendingMapHeadMap.descendingMap();
1987         assertEquals(decendingMapHeadMap, decendingDecendingHeadMap);
1988 
1989         decendingMapTailMap = decendingMap.tailMap(new Integer(104).toString(),
1990                 false);
1991         decendingDecendingTailMap = decendingMapTailMap.descendingMap();
1992         assertEquals(decendingMapTailMap, decendingDecendingTailMap);
1993 
1994         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
1995         decendingDecendingMap = decendingMap.descendingMap();
1996         assertEquals(decendingMap, decendingDecendingMap);
1997 
1998         decendingMapHeadMap = decendingMap.headMap(new Integer(104).toString(),
1999                 false);
2000         decendingDecendingHeadMap = decendingMapHeadMap.descendingMap();
2001         assertEquals(decendingMapHeadMap, decendingDecendingHeadMap);
2002 
2003         decendingMapTailMap = decendingMap.tailMap(new Integer(104).toString(),
2004                 false);
2005         decendingDecendingTailMap = decendingMapTailMap.descendingMap();
2006         assertEquals(decendingMapTailMap, decendingDecendingTailMap);
2007 
2008         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2009         decendingDecendingMap = decendingMap.descendingMap();
2010         assertEquals(decendingMap, decendingDecendingMap);
2011 
2012         decendingMapHeadMap = decendingMap.headMap(new Integer(104).toString(),
2013                 false);
2014         decendingDecendingHeadMap = decendingMapHeadMap.descendingMap();
2015         assertEquals(decendingMapHeadMap, decendingDecendingHeadMap);
2016 
2017         decendingMapTailMap = decendingMap.tailMap(new Integer(104).toString(),
2018                 false);
2019         decendingDecendingTailMap = decendingMapTailMap.descendingMap();
2020         assertEquals(decendingMapTailMap, decendingDecendingTailMap);
2021 
2022         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2023         decendingDecendingMap = decendingMap.descendingMap();
2024         assertEquals(decendingMap, decendingDecendingMap);
2025 
2026         decendingMapHeadMap = decendingMap.headMap(new Integer(104).toString(),
2027                 false);
2028         decendingDecendingHeadMap = decendingMapHeadMap.descendingMap();
2029         assertEquals(decendingMapHeadMap, decendingDecendingHeadMap);
2030 
2031         decendingMapTailMap = decendingMap.tailMap(new Integer(104).toString(),
2032                 false);
2033         decendingDecendingTailMap = decendingMapTailMap.descendingMap();
2034         assertEquals(decendingMapTailMap, decendingDecendingTailMap);
2035     }
2036 
test_DescendingSubMap_firstEntry()2037     public void test_DescendingSubMap_firstEntry() {
2038         NavigableMap decendingMap = tm.descendingMap();
2039         assertEquals(999, decendingMap.firstEntry().getValue());
2040 
2041         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2042         assertEquals(108, decendingMap.firstEntry().getValue());
2043 
2044         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2045         assertEquals(109, decendingMap.firstEntry().getValue());
2046 
2047         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2048         assertEquals(108, decendingMap.firstEntry().getValue());
2049 
2050         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2051         assertEquals(109, decendingMap.firstEntry().getValue());
2052     }
2053 
test_DescendingSubMap_floorEntry()2054     public void test_DescendingSubMap_floorEntry() {
2055         NavigableMap decendingMap = tm.descendingMap();
2056         String key = new Integer(-1).toString();
2057         assertEquals(0, decendingMap.floorEntry(key).getValue());
2058         for (int i = 0; i < objArray.length; i++) {
2059             key = objArray[i].toString();
2060             assertEquals(objArray[i], decendingMap.floorEntry(key).getValue());
2061         }
2062         key = new Integer(1000).toString();
2063         assertEquals(101, decendingMap.floorEntry(key).getValue());
2064         key = new Integer(1001).toString();
2065         assertEquals(101, decendingMap.floorEntry(key).getValue());
2066 
2067         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2068         key = new Integer(100).toString();
2069         assertEquals(101, decendingMap.floorEntry(key).getValue());
2070         for (int i = 101; i < 109; i++) {
2071             key = new Integer(i).toString();
2072             assertEquals(i, decendingMap.floorEntry(key).getValue());
2073         }
2074         key = new Integer(109).toString();
2075         assertNull(decendingMap.floorEntry(key));
2076 
2077         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2078         key = new Integer(100).toString();
2079         assertEquals(101, decendingMap.floorEntry(key).getValue());
2080         for (int i = 101; i < 109; i++) {
2081             key = new Integer(i).toString();
2082             assertEquals(i, decendingMap.floorEntry(key).getValue());
2083         }
2084         key = new Integer(109).toString();
2085         assertEquals(109, decendingMap.floorEntry(key).getValue());
2086 
2087         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2088         key = new Integer(100).toString();
2089         assertEquals(100, decendingMap.floorEntry(key).getValue());
2090         for (int i = 101; i < 109; i++) {
2091             key = new Integer(i).toString();
2092             assertEquals(i, decendingMap.floorEntry(key).getValue());
2093         }
2094         key = new Integer(109).toString();
2095         assertNull(decendingMap.floorEntry(key));
2096 
2097         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2098         key = new Integer(100).toString();
2099         assertEquals(100, decendingMap.floorEntry(key).getValue());
2100         for (int i = 101; i < 109; i++) {
2101             key = new Integer(i).toString();
2102             assertEquals(i, decendingMap.floorEntry(key).getValue());
2103         }
2104         key = new Integer(109).toString();
2105         assertEquals(109, decendingMap.floorEntry(key).getValue());
2106 
2107         // With Comparator
2108         decendingMap = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
2109                 .descendingMap();
2110         key = new Integer(100).toString();
2111         assertEquals(101, decendingMap.floorEntry(key).getValue());
2112         for (int i = 101; i < 109; i++) {
2113             key = new Integer(i).toString();
2114             assertEquals(i, decendingMap.floorEntry(key).getValue());
2115         }
2116         key = new Integer(109).toString();
2117         assertNull(decendingMap.floorEntry(key));
2118 
2119         decendingMap = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
2120                 .descendingMap();
2121         key = new Integer(100).toString();
2122         assertEquals(101, decendingMap.floorEntry(key).getValue());
2123         for (int i = 101; i < 109; i++) {
2124             key = new Integer(i).toString();
2125             assertEquals(i, decendingMap.floorEntry(key).getValue());
2126         }
2127         key = new Integer(109).toString();
2128         assertEquals(109, decendingMap.floorEntry(key).getValue());
2129 
2130         decendingMap = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
2131                 .descendingMap();
2132         key = new Integer(100).toString();
2133         assertEquals(100, decendingMap.floorEntry(key).getValue());
2134         for (int i = 101; i < 109; i++) {
2135             key = new Integer(i).toString();
2136             assertEquals(i, decendingMap.floorEntry(key).getValue());
2137         }
2138         key = new Integer(109).toString();
2139         assertNull(decendingMap.floorEntry(key));
2140 
2141         decendingMap = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
2142                 .descendingMap();
2143         key = new Integer(100).toString();
2144         assertEquals(100, decendingMap.floorEntry(key).getValue());
2145         for (int i = 101; i < 109; i++) {
2146             key = new Integer(i).toString();
2147             assertEquals(i, decendingMap.floorEntry(key).getValue());
2148         }
2149         key = new Integer(109).toString();
2150         assertEquals(109, decendingMap.floorEntry(key).getValue());
2151     }
2152 
test_DescendingSubMap_lastEntry()2153     public void test_DescendingSubMap_lastEntry() {
2154         NavigableMap decendingMap = tm.descendingMap();
2155         assertEquals(0, decendingMap.lastEntry().getValue());
2156 
2157         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2158         assertEquals(101, decendingMap.lastEntry().getValue());
2159 
2160         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2161         assertEquals(101, decendingMap.lastEntry().getValue());
2162 
2163         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2164         assertEquals(100, decendingMap.lastEntry().getValue());
2165 
2166         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2167         assertEquals(100, decendingMap.lastEntry().getValue());
2168     }
2169 
test_DescendingSubMap_higherEntry()2170     public void test_DescendingSubMap_higherEntry() {
2171         NavigableMap decendingMap;
2172         NavigableMap decendingTailMap;
2173         Integer value;
2174         Entry entry;
2175         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2176         value = new Integer(101);
2177         assertNull(decendingMap.higherEntry(value.toString()));
2178 
2179         for (int i = 108; i > 101; i--) {
2180             value = new Integer(i);
2181             entry = decendingMap.higherEntry(value.toString());
2182             assertEquals(value - 1, entry.getValue());
2183         }
2184 
2185         value = new Integer(109);
2186         entry = decendingMap.higherEntry(value.toString());
2187         assertEquals(108, entry.getValue());
2188 
2189         decendingTailMap = decendingMap.tailMap(new Integer(104).toString(),
2190                 false);
2191         value = new Integer(109);
2192         entry = decendingTailMap.higherEntry(value.toString());
2193         assertEquals(103, entry.getValue());
2194 
2195         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2196         value = new Integer(100);
2197         assertNull(decendingMap.higherEntry(value.toString()));
2198 
2199         for (int i = 108; i > 100; i--) {
2200             value = new Integer(i);
2201             entry = decendingMap.higherEntry(value.toString());
2202             assertEquals(value - 1, entry.getValue());
2203         }
2204 
2205         value = new Integer(109);
2206         entry = decendingMap.higherEntry(value.toString());
2207         assertEquals(108, entry.getValue());
2208 
2209         decendingTailMap = decendingMap.tailMap(new Integer(104).toString(),
2210                 false);
2211         value = new Integer(109);
2212         entry = decendingTailMap.higherEntry(value.toString());
2213         assertEquals(103, entry.getValue());
2214 
2215         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2216         value = new Integer(101);
2217         assertNull(decendingMap.higherEntry(value.toString()));
2218 
2219         for (int i = 109; i > 101; i--) {
2220             value = new Integer(i);
2221             entry = decendingMap.higherEntry(value.toString());
2222             assertEquals(value - 1, entry.getValue());
2223         }
2224 
2225         value = new Integer(2);
2226         entry = decendingMap.higherEntry(value.toString());
2227         assertEquals(109, entry.getValue());
2228 
2229         decendingTailMap = decendingMap.tailMap(new Integer(104).toString(),
2230                 false);
2231         value = new Integer(109);
2232         entry = decendingTailMap.higherEntry(value.toString());
2233         assertEquals(103, entry.getValue());
2234 
2235         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2236         value = new Integer(100);
2237         assertNull(decendingMap.higherEntry(value.toString()));
2238 
2239         for (int i = 109; i > 100; i--) {
2240             value = new Integer(i);
2241             entry = decendingMap.higherEntry(value.toString());
2242             assertEquals(value - 1, entry.getValue());
2243         }
2244 
2245         value = new Integer(2);
2246         entry = decendingMap.higherEntry(value.toString());
2247         assertEquals(109, entry.getValue());
2248 
2249         decendingTailMap = decendingMap.tailMap(new Integer(104).toString(),
2250                 false);
2251         value = new Integer(109);
2252         entry = decendingTailMap.higherEntry(value.toString());
2253         assertEquals(103, entry.getValue());
2254     }
2255 
test_DescendingSubMap_lowerEntry()2256     public void test_DescendingSubMap_lowerEntry() {
2257         NavigableMap decendingMap;
2258         NavigableMap decendingHeadMap;
2259         Integer value;
2260         Entry entry;
2261         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2262         value = new Integer(99);
2263         assertNull(decendingMap.lowerEntry(value.toString()));
2264         for (int i = 100; i < 108; i++) {
2265             value = new Integer(i);
2266             entry = decendingMap.lowerEntry(value.toString());
2267             assertEquals(value + 1, entry.getValue());
2268         }
2269         value = new Integer(109);
2270         assertNull(decendingMap.lowerEntry(value.toString()));
2271 
2272         decendingHeadMap = decendingMap.headMap(new Integer(103).toString(),
2273                 false);
2274         for (int i = 104; i < 106; i++) {
2275             value = new Integer(i);
2276             entry = decendingHeadMap.lowerEntry(value.toString());
2277             assertEquals(value + 1, entry.getValue());
2278         }
2279         value = new Integer(102);
2280         entry = decendingHeadMap.lowerEntry(value.toString());
2281         assertEquals(104, entry.getValue());
2282 
2283         value = new Integer(109);
2284         entry = decendingHeadMap.lowerEntry(value.toString());
2285         assertNull(entry);
2286 
2287         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2288         value = new Integer(99);
2289         assertNull(decendingMap.lowerEntry(value.toString()));
2290         for (int i = 100; i < 109; i++) {
2291             value = new Integer(i);
2292             entry = decendingMap.lowerEntry(value.toString());
2293             assertEquals(value + 1, entry.getValue());
2294         }
2295         value = new Integer(110);
2296         assertNull(decendingMap.lowerEntry(value.toString()));
2297 
2298         decendingHeadMap = decendingMap.headMap(new Integer(103).toString(),
2299                 false);
2300         for (int i = 104; i < 109; i++) {
2301             value = new Integer(i);
2302             entry = decendingHeadMap.lowerEntry(value.toString());
2303             assertEquals(value + 1, entry.getValue());
2304         }
2305         value = new Integer(102);
2306         entry = decendingHeadMap.lowerEntry(value.toString());
2307         assertEquals(104, entry.getValue());
2308 
2309         value = new Integer(2);
2310         entry = decendingHeadMap.lowerEntry(value.toString());
2311         assertNull(entry);
2312 
2313         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2314         value = new Integer(99);
2315         assertNull(decendingMap.lowerEntry(value.toString()));
2316         for (int i = 100; i < 108; i++) {
2317             value = new Integer(i);
2318             entry = decendingMap.lowerEntry(value.toString());
2319             assertEquals(value + 1, entry.getValue());
2320         }
2321         value = new Integer(109);
2322         assertNull(decendingMap.lowerEntry(value.toString()));
2323 
2324         decendingHeadMap = decendingMap.headMap(new Integer(103).toString(),
2325                 false);
2326         for (int i = 104; i < 107; i++) {
2327             value = new Integer(i);
2328             entry = decendingHeadMap.lowerEntry(value.toString());
2329             assertEquals(value + 1, entry.getValue());
2330         }
2331         value = new Integer(102);
2332         entry = decendingHeadMap.lowerEntry(value.toString());
2333         assertEquals(104, entry.getValue());
2334 
2335         value = new Integer(2);
2336         entry = decendingHeadMap.lowerEntry(value.toString());
2337         assertNull(entry);
2338 
2339         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2340         value = new Integer(99);
2341         assertNull(decendingMap.lowerEntry(value.toString()));
2342         for (int i = 100; i < 109; i++) {
2343             value = new Integer(i);
2344             entry = decendingMap.lowerEntry(value.toString());
2345             assertEquals(value + 1, entry.getValue());
2346         }
2347         value = new Integer(110);
2348         assertNull(decendingMap.lowerEntry(value.toString()));
2349 
2350         decendingHeadMap = decendingMap.headMap(new Integer(103).toString(),
2351                 false);
2352         for (int i = 104; i < 109; i++) {
2353             value = new Integer(i);
2354             entry = decendingHeadMap.lowerEntry(value.toString());
2355             assertEquals(value + 1, entry.getValue());
2356         }
2357         value = new Integer(102);
2358         entry = decendingHeadMap.lowerEntry(value.toString());
2359         assertEquals(104, entry.getValue());
2360 
2361         value = new Integer(2);
2362         entry = decendingHeadMap.lowerEntry(value.toString());
2363         assertNull(entry);
2364     }
2365 
test_DescendingSubMap_pollFirstEntry()2366     public void test_DescendingSubMap_pollFirstEntry() {
2367         NavigableMap decendingMap = tm.descendingMap();
2368         assertEquals(999, decendingMap.pollFirstEntry().getValue());
2369 
2370         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2371         assertEquals(108, decendingMap.pollFirstEntry().getValue());
2372 
2373         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2374         assertEquals(109, decendingMap.pollFirstEntry().getValue());
2375 
2376         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2377         assertEquals(107, decendingMap.pollFirstEntry().getValue());
2378 
2379         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2380         assertEquals(106, decendingMap.pollFirstEntry().getValue());
2381     }
2382 
test_DescendingSubMap_pollLastEntry()2383     public void test_DescendingSubMap_pollLastEntry() {
2384         NavigableMap decendingMap = tm.descendingMap();
2385         assertEquals(0, decendingMap.pollLastEntry().getValue());
2386 
2387         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2388         assertEquals(101, decendingMap.pollLastEntry().getValue());
2389 
2390         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2391         assertEquals(102, decendingMap.pollLastEntry().getValue());
2392 
2393         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2394         assertEquals(100, decendingMap.pollLastEntry().getValue());
2395 
2396         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2397         assertEquals(103, decendingMap.pollLastEntry().getValue());
2398     }
2399 
test_DescendingSubMap_values()2400     public void test_DescendingSubMap_values() {
2401         NavigableMap decendingMap = tm.descendingMap();
2402         Collection values = decendingMap.values();
2403         assertFalse(values.isEmpty());
2404         assertFalse(values.contains(1000));
2405         for (int i = 999; i > 0; i--) {
2406             assertTrue(values.contains(i));
2407         }
2408         assertTrue(values.contains(0));
2409 
2410         String endKey = new Integer(99).toString();
2411         NavigableMap headMap = decendingMap.headMap(endKey, false);
2412         values = headMap.values();
2413         Iterator it = values.iterator();
2414         for (int i = 999; i > 990; i--) {
2415             assertTrue(values.contains(i));
2416             assertEquals(i, it.next());
2417         }
2418 
2419         String startKey = new Integer(11).toString();
2420         NavigableMap tailMap = decendingMap.tailMap(startKey, false);
2421         values = tailMap.values();
2422         it = values.iterator();
2423         for (int i = 109; i > 100; i--) {
2424             assertTrue(values.contains(i));
2425             assertEquals(i, it.next());
2426         }
2427 
2428         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2429         values = decendingMap.values();
2430         assertFalse(values.isEmpty());
2431         assertFalse(values.contains(109));
2432         for (int i = 108; i > 100; i--) {
2433             assertTrue(values.contains(i));
2434         }
2435         assertFalse(values.contains(100));
2436 
2437         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2438         values = decendingMap.values();
2439         assertFalse(values.isEmpty());
2440         assertFalse(values.contains(100));
2441         for (int i = 108; i > 100; i--) {
2442             assertTrue(values.contains(i));
2443         }
2444         assertTrue(values.contains(109));
2445 
2446         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2447         values = decendingMap.values();
2448         assertFalse(values.isEmpty());
2449         assertTrue(values.contains(100));
2450         for (int i = 108; i > 100; i--) {
2451             assertTrue(values.contains(i));
2452         }
2453         assertFalse(values.contains(109));
2454 
2455         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2456         values = decendingMap.values();
2457         assertFalse(values.isEmpty());
2458         assertTrue(values.contains(100));
2459         for (int i = 108; i > 100; i--) {
2460             assertTrue(values.contains(i));
2461         }
2462         assertTrue(values.contains(109));
2463     }
2464 
test_DescendingSubMap_headMap()2465     public void test_DescendingSubMap_headMap() {
2466         NavigableMap decendingMap = tm.descendingMap();
2467         String endKey = new Integer(0).toString(), key;
2468         SortedMap subDecendingMap_Included = decendingMap.headMap(endKey, true);
2469         SortedMap subDecendingMap_Excluded = decendingMap
2470                 .headMap(endKey, false);
2471         key = endKey;
2472         assertTrue(subDecendingMap_Included.containsKey(key));
2473         assertFalse(subDecendingMap_Excluded.containsKey(key));
2474         for (int i = 1; i < 1000; i++) {
2475             key = new Integer(i).toString();
2476             assertTrue(subDecendingMap_Included.containsKey(key));
2477             assertTrue(subDecendingMap_Excluded.containsKey(key));
2478         }
2479         key = new Integer(1000).toString();
2480         assertFalse(subDecendingMap_Included.containsKey(key));
2481         assertFalse(subDecendingMap_Excluded.containsKey(key));
2482 
2483         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2484         endKey = new Integer(100).toString();
2485         try {
2486             decendingMap.headMap(endKey, true);
2487             fail("should throw IllegalArgumentException");
2488         } catch (IllegalArgumentException e) {
2489             // Expected
2490         }
2491         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2492         key = endKey;
2493         assertFalse(subDecendingMap_Excluded.containsKey(key));
2494 
2495         endKey = new Integer(101).toString();
2496         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2497         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2498 
2499         key = endKey;
2500         assertTrue(subDecendingMap_Included.containsKey(key));
2501         assertFalse(subDecendingMap_Excluded.containsKey(key));
2502 
2503         for (int i = 102; i < 109; i++) {
2504             key = new Integer(i).toString();
2505             assertTrue(subDecendingMap_Included.containsKey(key));
2506             assertTrue(subDecendingMap_Excluded.containsKey(key));
2507         }
2508         key = new Integer(109).toString();
2509         assertFalse(subDecendingMap_Included.containsKey(key));
2510         assertFalse(subDecendingMap_Excluded.containsKey(key));
2511 
2512         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2513         endKey = new Integer(100).toString();
2514         try {
2515             decendingMap.headMap(endKey, true);
2516             fail("should throw IllegalArgumentException");
2517         } catch (IllegalArgumentException e) {
2518             // Expected
2519         }
2520         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2521         key = endKey;
2522         assertFalse(subDecendingMap_Excluded.containsKey(key));
2523 
2524         endKey = new Integer(101).toString();
2525         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2526         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2527 
2528         key = endKey;
2529         assertTrue(subDecendingMap_Included.containsKey(key));
2530         assertFalse(subDecendingMap_Excluded.containsKey(key));
2531 
2532         for (int i = 102; i < 109; i++) {
2533             key = new Integer(i).toString();
2534             assertTrue(subDecendingMap_Included.containsKey(key));
2535             assertTrue(subDecendingMap_Excluded.containsKey(key));
2536         }
2537         key = new Integer(109).toString();
2538         assertTrue(subDecendingMap_Included.containsKey(key));
2539         assertTrue(subDecendingMap_Excluded.containsKey(key));
2540 
2541         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2542         endKey = new Integer(100).toString();
2543         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2544         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2545         key = endKey;
2546         assertTrue(subDecendingMap_Included.containsKey(key));
2547         assertFalse(subDecendingMap_Excluded.containsKey(key));
2548 
2549         endKey = new Integer(101).toString();
2550         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2551         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2552 
2553         key = endKey;
2554         assertTrue(subDecendingMap_Included.containsKey(key));
2555         assertFalse(subDecendingMap_Excluded.containsKey(key));
2556 
2557         for (int i = 102; i < 109; i++) {
2558             key = new Integer(i).toString();
2559             assertTrue(subDecendingMap_Included.containsKey(key));
2560             assertTrue(subDecendingMap_Excluded.containsKey(key));
2561         }
2562         key = new Integer(109).toString();
2563         assertFalse(subDecendingMap_Included.containsKey(key));
2564         assertFalse(subDecendingMap_Excluded.containsKey(key));
2565 
2566         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
2567         endKey = new Integer(100).toString();
2568         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2569         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2570         key = endKey;
2571         assertTrue(subDecendingMap_Included.containsKey(key));
2572         assertFalse(subDecendingMap_Excluded.containsKey(key));
2573 
2574         endKey = new Integer(101).toString();
2575         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2576         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2577 
2578         key = endKey;
2579         assertTrue(subDecendingMap_Included.containsKey(key));
2580         assertFalse(subDecendingMap_Excluded.containsKey(key));
2581 
2582         for (int i = 102; i < 109; i++) {
2583             key = new Integer(i).toString();
2584             assertTrue(subDecendingMap_Included.containsKey(key));
2585             assertTrue(subDecendingMap_Excluded.containsKey(key));
2586         }
2587         key = new Integer(109).toString();
2588         assertTrue(subDecendingMap_Included.containsKey(key));
2589         assertTrue(subDecendingMap_Excluded.containsKey(key));
2590 
2591         // With Comparator
2592 
2593         decendingMap = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
2594                 .descendingMap();
2595         endKey = new Integer(100).toString();
2596         try {
2597             decendingMap.headMap(endKey, true);
2598             fail("should throw IllegalArgumentException");
2599         } catch (IllegalArgumentException e) {
2600             // Expected
2601         }
2602         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2603         key = endKey;
2604         assertFalse(subDecendingMap_Excluded.containsKey(key));
2605 
2606         endKey = new Integer(101).toString();
2607         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2608         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2609 
2610         key = endKey;
2611         assertTrue(subDecendingMap_Included.containsKey(key));
2612         assertFalse(subDecendingMap_Excluded.containsKey(key));
2613 
2614         for (int i = 102; i < 109; i++) {
2615             key = new Integer(i).toString();
2616             assertTrue(subDecendingMap_Included.containsKey(key));
2617             assertTrue(subDecendingMap_Excluded.containsKey(key));
2618         }
2619         key = new Integer(109).toString();
2620         assertFalse(subDecendingMap_Included.containsKey(key));
2621         assertFalse(subDecendingMap_Excluded.containsKey(key));
2622 
2623         decendingMap = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
2624                 .descendingMap();
2625         endKey = new Integer(100).toString();
2626         try {
2627             decendingMap.headMap(endKey, true);
2628             fail("should throw IllegalArgumentException");
2629         } catch (IllegalArgumentException e) {
2630             // Expected
2631         }
2632         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2633         key = endKey;
2634         assertFalse(subDecendingMap_Excluded.containsKey(key));
2635 
2636         endKey = new Integer(101).toString();
2637         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2638         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2639 
2640         key = endKey;
2641         assertTrue(subDecendingMap_Included.containsKey(key));
2642         assertFalse(subDecendingMap_Excluded.containsKey(key));
2643 
2644         for (int i = 102; i < 109; i++) {
2645             key = new Integer(i).toString();
2646             assertTrue(subDecendingMap_Included.containsKey(key));
2647             assertTrue(subDecendingMap_Excluded.containsKey(key));
2648         }
2649         key = new Integer(109).toString();
2650         assertTrue(subDecendingMap_Included.containsKey(key));
2651         assertTrue(subDecendingMap_Excluded.containsKey(key));
2652 
2653         decendingMap = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
2654                 .descendingMap();
2655         endKey = new Integer(100).toString();
2656         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2657         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2658         key = endKey;
2659         assertTrue(subDecendingMap_Included.containsKey(key));
2660         assertFalse(subDecendingMap_Excluded.containsKey(key));
2661 
2662         endKey = new Integer(101).toString();
2663         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2664         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2665 
2666         key = endKey;
2667         assertTrue(subDecendingMap_Included.containsKey(key));
2668         assertFalse(subDecendingMap_Excluded.containsKey(key));
2669 
2670         for (int i = 102; i < 109; i++) {
2671             key = new Integer(i).toString();
2672             assertTrue(subDecendingMap_Included.containsKey(key));
2673             assertTrue(subDecendingMap_Excluded.containsKey(key));
2674         }
2675         key = new Integer(109).toString();
2676         assertFalse(subDecendingMap_Included.containsKey(key));
2677         assertFalse(subDecendingMap_Excluded.containsKey(key));
2678 
2679         decendingMap = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
2680                 .descendingMap();
2681         endKey = new Integer(100).toString();
2682         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2683         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2684         key = endKey;
2685         assertTrue(subDecendingMap_Included.containsKey(key));
2686         assertFalse(subDecendingMap_Excluded.containsKey(key));
2687 
2688         endKey = new Integer(101).toString();
2689         subDecendingMap_Included = decendingMap.headMap(endKey, true);
2690         subDecendingMap_Excluded = decendingMap.headMap(endKey, false);
2691 
2692         key = endKey;
2693         assertTrue(subDecendingMap_Included.containsKey(key));
2694         assertFalse(subDecendingMap_Excluded.containsKey(key));
2695 
2696         for (int i = 102; i < 109; i++) {
2697             key = new Integer(i).toString();
2698             assertTrue(subDecendingMap_Included.containsKey(key));
2699             assertTrue(subDecendingMap_Excluded.containsKey(key));
2700         }
2701         key = new Integer(109).toString();
2702         assertTrue(subDecendingMap_Included.containsKey(key));
2703         assertTrue(subDecendingMap_Excluded.containsKey(key));
2704     }
2705 
test_DescendingSubMap_subMap()2706     public void test_DescendingSubMap_subMap() {
2707         NavigableMap descendingMap = tm.descendingMap();
2708         String startKey = new Integer(109).toString();
2709         String endKey = new Integer(100).toString();
2710         try {
2711             descendingMap.subMap(endKey, false, startKey, false);
2712         } catch (IllegalArgumentException e) {
2713             // Expected
2714         }
2715 
2716         SortedMap subDescendingMap = descendingMap.subMap(startKey, false,
2717                 endKey, false);
2718         String key = new Integer(100).toString();
2719         assertFalse(subDescendingMap.containsKey(key));
2720         for (int i = 101; i < 109; i++) {
2721             key = new Integer(i).toString();
2722             assertTrue(subDescendingMap.containsKey(key));
2723         }
2724         key = new Integer(109).toString();
2725         assertFalse(subDescendingMap.containsKey(key));
2726 
2727         subDescendingMap = descendingMap.subMap(startKey, false, endKey, true);
2728         key = new Integer(100).toString();
2729         assertTrue(subDescendingMap.containsKey(key));
2730         for (int i = 101; i < 109; i++) {
2731             key = new Integer(i).toString();
2732             assertTrue(subDescendingMap.containsKey(key));
2733         }
2734         key = new Integer(109).toString();
2735         assertFalse(subDescendingMap.containsKey(key));
2736 
2737         subDescendingMap = descendingMap.subMap(startKey, true, endKey, false);
2738         key = new Integer(100).toString();
2739         assertFalse(subDescendingMap.containsKey(key));
2740         for (int i = 101; i < 109; i++) {
2741             key = new Integer(i).toString();
2742             assertTrue(subDescendingMap.containsKey(key));
2743         }
2744         key = new Integer(109).toString();
2745         assertTrue(subDescendingMap.containsKey(key));
2746 
2747         subDescendingMap = descendingMap.subMap(startKey, true, endKey, true);
2748         key = new Integer(100).toString();
2749         assertTrue(subDescendingMap.containsKey(key));
2750         for (int i = 101; i < 109; i++) {
2751             key = new Integer(i).toString();
2752             assertTrue(subDescendingMap.containsKey(key));
2753         }
2754         key = new Integer(109).toString();
2755         assertTrue(subDescendingMap.containsKey(key));
2756 
2757         TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();
2758         for (int i = -10; i < 10; i++) {
2759             treeMap.put(i, String.valueOf(i));
2760         }
2761         descendingMap = treeMap.descendingMap();
2762         subDescendingMap = descendingMap.subMap(5, 0);
2763         assertEquals(5, subDescendingMap.size());
2764     }
2765 
test_DescendingSubMap_tailMap()2766     public void test_DescendingSubMap_tailMap() {
2767         // tm
2768         NavigableMap decendingMap = tm.descendingMap();
2769         String endKey = new Integer(1000).toString(), key;
2770         SortedMap subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2771         SortedMap subDecendingMap_Excluded = decendingMap
2772                 .tailMap(endKey, false);
2773 
2774         key = endKey;
2775         assertFalse(subDecendingMap_Included.containsKey(key));
2776         assertFalse(subDecendingMap_Excluded.containsKey(key));
2777         key = new Integer(100).toString();
2778         assertTrue(subDecendingMap_Included.containsKey(key));
2779         assertTrue(subDecendingMap_Excluded.containsKey(key));
2780 
2781         key = new Integer(10).toString();
2782         assertTrue(subDecendingMap_Included.containsKey(key));
2783         assertTrue(subDecendingMap_Excluded.containsKey(key));
2784 
2785         key = new Integer(1).toString();
2786         assertTrue(subDecendingMap_Included.containsKey(key));
2787         assertTrue(subDecendingMap_Excluded.containsKey(key));
2788 
2789         key = new Integer(0).toString();
2790         assertTrue(subDecendingMap_Included.containsKey(key));
2791         assertTrue(subDecendingMap_Excluded.containsKey(key));
2792 
2793         endKey = new Integer(999).toString();
2794         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2795         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2796         key = endKey;
2797         assertTrue(subDecendingMap_Included.containsKey(key));
2798         assertFalse(subDecendingMap_Excluded.containsKey(key));
2799         for (int i = 998; i > 0; i--) {
2800             key = new Integer(i).toString();
2801             assertTrue(subDecendingMap_Included.containsKey(key));
2802             assertTrue(subDecendingMap_Excluded.containsKey(key));
2803         }
2804         key = new Integer(0).toString();
2805         assertTrue(subDecendingMap_Included.containsKey(key));
2806         assertTrue(subDecendingMap_Excluded.containsKey(key));
2807 
2808         endKey = new Integer(0).toString();
2809         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2810         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2811         assertEquals(1, subDecendingMap_Included.size());
2812         key = endKey;
2813         assertTrue(subDecendingMap_Included.containsKey(key));
2814         assertTrue(subDecendingMap_Excluded.isEmpty());
2815 
2816         // navigableMap_startExcluded_endExcluded
2817         decendingMap = navigableMap_startExcluded_endExcluded.descendingMap();
2818         endKey = new Integer(110).toString();
2819         try {
2820             decendingMap.tailMap(endKey, true);
2821             fail("should throw IllegalArgumentException");
2822         } catch (IllegalArgumentException e) {
2823             // Expected
2824         }
2825 
2826         try {
2827             decendingMap.tailMap(endKey, false);
2828             fail("should throw IllegalArgumentException");
2829         } catch (IllegalArgumentException e) {
2830             // Expected
2831         }
2832 
2833         endKey = new Integer(109).toString();
2834         try {
2835             decendingMap.tailMap(endKey, true);
2836             fail("should throw IllegalArgumentException");
2837         } catch (IllegalArgumentException e) {
2838             // Expected
2839         }
2840         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2841         key = endKey;
2842         assertFalse(subDecendingMap_Excluded.containsKey(key));
2843 
2844         endKey = new Integer(108).toString();
2845         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2846         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2847         key = endKey;
2848         assertTrue(subDecendingMap_Included.containsKey(key));
2849         assertFalse(subDecendingMap_Excluded.containsKey(key));
2850         for (int i = 107; i > 100; i--) {
2851             key = new Integer(i).toString();
2852             assertTrue(subDecendingMap_Included.containsKey(key));
2853             assertTrue(subDecendingMap_Excluded.containsKey(key));
2854         }
2855         key = new Integer(100).toString();
2856         assertFalse(subDecendingMap_Included.containsKey(key));
2857         assertFalse(subDecendingMap_Included.containsKey(key));
2858 
2859         endKey = new Integer(101).toString();
2860         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2861         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2862         key = endKey;
2863         assertEquals(1, subDecendingMap_Included.size());
2864         assertTrue(subDecendingMap_Included.containsKey(key));
2865         assertTrue(subDecendingMap_Excluded.isEmpty());
2866 
2867         endKey = new Integer(100).toString();
2868         try {
2869             decendingMap.tailMap(endKey, true);
2870             fail("should throw IllegalArgumentException");
2871         } catch (IllegalArgumentException e) {
2872             // Expected
2873         }
2874         try {
2875             decendingMap.tailMap(endKey, false);
2876             fail("should throw IllegalArgumentException");
2877         } catch (IllegalArgumentException e) {
2878             // Expected
2879         }
2880 
2881         endKey = new Integer(99).toString();
2882         try {
2883             decendingMap.tailMap(endKey, true);
2884             fail("should throw IllegalArgumentException");
2885         } catch (IllegalArgumentException e) {
2886             // Expected
2887         }
2888 
2889         try {
2890             decendingMap.tailMap(endKey, false);
2891             fail("should throw IllegalArgumentException");
2892         } catch (IllegalArgumentException e) {
2893             // Expected
2894         }
2895 
2896         // navigableMap_startExcluded_endIncluded
2897         decendingMap = navigableMap_startExcluded_endIncluded.descendingMap();
2898         endKey = new Integer(110).toString();
2899         try {
2900             decendingMap.tailMap(endKey, true);
2901             fail("should throw IllegalArgumentException");
2902         } catch (IllegalArgumentException e) {
2903             // Expected
2904         }
2905 
2906         try {
2907             decendingMap.tailMap(endKey, false);
2908             fail("should throw IllegalArgumentException");
2909         } catch (IllegalArgumentException e) {
2910             // Expected
2911         }
2912 
2913         endKey = new Integer(109).toString();
2914         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2915         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2916         key = endKey;
2917         assertTrue(subDecendingMap_Included.containsKey(key));
2918         assertFalse(subDecendingMap_Excluded.containsKey(key));
2919 
2920         endKey = new Integer(108).toString();
2921         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2922         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2923         key = endKey;
2924         assertTrue(subDecendingMap_Included.containsKey(key));
2925         assertFalse(subDecendingMap_Excluded.containsKey(key));
2926         for (int i = 107; i > 100; i--) {
2927             key = new Integer(i).toString();
2928             assertTrue(subDecendingMap_Included.containsKey(key));
2929             assertTrue(subDecendingMap_Excluded.containsKey(key));
2930         }
2931         key = new Integer(100).toString();
2932         assertFalse(subDecendingMap_Included.containsKey(key));
2933         assertFalse(subDecendingMap_Included.containsKey(key));
2934 
2935         endKey = new Integer(101).toString();
2936         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
2937         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2938         key = endKey;
2939         assertEquals(1, subDecendingMap_Included.size());
2940         assertTrue(subDecendingMap_Included.containsKey(key));
2941         assertTrue(subDecendingMap_Excluded.isEmpty());
2942 
2943         endKey = new Integer(100).toString();
2944         try {
2945             decendingMap.tailMap(endKey, true);
2946             fail("should throw IllegalArgumentException");
2947         } catch (IllegalArgumentException e) {
2948             // Expected
2949         }
2950         try {
2951             decendingMap.tailMap(endKey, false);
2952             fail("should throw IllegalArgumentException");
2953         } catch (IllegalArgumentException e) {
2954             // Expected
2955         }
2956 
2957         endKey = new Integer(99).toString();
2958         try {
2959             decendingMap.tailMap(endKey, true);
2960             fail("should throw IllegalArgumentException");
2961         } catch (IllegalArgumentException e) {
2962             // Expected
2963         }
2964         try {
2965             decendingMap.tailMap(endKey, false);
2966             fail("should throw IllegalArgumentException");
2967         } catch (IllegalArgumentException e) {
2968             // Expected
2969         }
2970 
2971         // navigableMap_startIncluded_endExcluded
2972         decendingMap = navigableMap_startIncluded_endExcluded.descendingMap();
2973         endKey = new Integer(110).toString();
2974         try {
2975             decendingMap.tailMap(endKey, true);
2976             fail("should throw IllegalArgumentException");
2977         } catch (IllegalArgumentException e) {
2978             // Expected
2979         }
2980 
2981         try {
2982             decendingMap.tailMap(endKey, false);
2983             fail("should throw IllegalArgumentException");
2984         } catch (IllegalArgumentException e) {
2985             // Expected
2986         }
2987 
2988         endKey = new Integer(109).toString();
2989         try {
2990             decendingMap.tailMap(endKey, true);
2991 
2992         } catch (IllegalArgumentException e) {
2993             // Expected
2994         }
2995         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
2996         key = endKey;
2997         assertFalse(subDecendingMap_Excluded.containsKey(key));
2998 
2999         endKey = new Integer(108).toString();
3000         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3001         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3002         key = endKey;
3003         assertTrue(subDecendingMap_Included.containsKey(key));
3004         assertFalse(subDecendingMap_Excluded.containsKey(key));
3005         for (int i = 107; i > 100; i--) {
3006             key = new Integer(i).toString();
3007             assertTrue(subDecendingMap_Included.containsKey(key));
3008             assertTrue(subDecendingMap_Excluded.containsKey(key));
3009         }
3010         key = new Integer(100).toString();
3011         assertTrue(subDecendingMap_Included.containsKey(key));
3012         assertTrue(subDecendingMap_Included.containsKey(key));
3013 
3014         endKey = new Integer(101).toString();
3015         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3016         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3017         key = endKey;
3018         assertEquals(2, subDecendingMap_Included.size());
3019         assertTrue(subDecendingMap_Included.containsKey(key));
3020         assertFalse(subDecendingMap_Excluded.containsKey(key));
3021 
3022         endKey = new Integer(100).toString();
3023         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3024         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3025         key = endKey;
3026         assertTrue(subDecendingMap_Included.containsKey(key));
3027         assertFalse(subDecendingMap_Excluded.containsKey(key));
3028 
3029         endKey = new Integer(99).toString();
3030         try {
3031             decendingMap.tailMap(endKey, true);
3032             fail("should throw IllegalArgumentException");
3033         } catch (IllegalArgumentException e) {
3034             // Expected
3035         }
3036         try {
3037             decendingMap.tailMap(endKey, false);
3038             fail("should throw IllegalArgumentException");
3039         } catch (IllegalArgumentException e) {
3040             // Expected
3041         }
3042 
3043         // navigableMap_startIncluded_endIncluded
3044         decendingMap = navigableMap_startIncluded_endIncluded.descendingMap();
3045         endKey = new Integer(110).toString();
3046         try {
3047             decendingMap.tailMap(endKey, true);
3048             fail("should throw IllegalArgumentException");
3049         } catch (IllegalArgumentException e) {
3050             // Expected
3051         }
3052         try {
3053             decendingMap.tailMap(endKey, false);
3054             fail("should throw IllegalArgumentException");
3055         } catch (IllegalArgumentException e) {
3056             // Expected
3057         }
3058 
3059         endKey = new Integer(109).toString();
3060         try {
3061             decendingMap.tailMap(endKey, true);
3062 
3063         } catch (IllegalArgumentException e) {
3064             // Expected
3065         }
3066         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3067         key = endKey;
3068         assertFalse(subDecendingMap_Excluded.containsKey(key));
3069 
3070         endKey = new Integer(108).toString();
3071         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3072         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3073         key = endKey;
3074         assertTrue(subDecendingMap_Included.containsKey(key));
3075         assertFalse(subDecendingMap_Excluded.containsKey(key));
3076         for (int i = 107; i > 100; i--) {
3077             key = new Integer(i).toString();
3078             assertTrue(subDecendingMap_Included.containsKey(key));
3079             assertTrue(subDecendingMap_Excluded.containsKey(key));
3080         }
3081         key = new Integer(100).toString();
3082         assertTrue(subDecendingMap_Included.containsKey(key));
3083         assertTrue(subDecendingMap_Included.containsKey(key));
3084 
3085         endKey = new Integer(101).toString();
3086         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3087         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3088         key = endKey;
3089         assertEquals(2, subDecendingMap_Included.size());
3090         assertTrue(subDecendingMap_Included.containsKey(key));
3091         assertFalse(subDecendingMap_Excluded.containsKey(key));
3092 
3093         endKey = new Integer(100).toString();
3094         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3095         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3096         key = endKey;
3097         assertTrue(subDecendingMap_Included.containsKey(key));
3098         assertFalse(subDecendingMap_Excluded.containsKey(key));
3099 
3100         endKey = new Integer(99).toString();
3101         try {
3102             decendingMap.tailMap(endKey, true);
3103             fail("should throw IllegalArgumentException");
3104         } catch (IllegalArgumentException e) {
3105             // Expected
3106         }
3107         try {
3108             decendingMap.tailMap(endKey, false);
3109             fail("should throw IllegalArgumentException");
3110         } catch (IllegalArgumentException e) {
3111             // Expected
3112         }
3113 
3114         // With Comparator
3115         decendingMap = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
3116                 .descendingMap();
3117         endKey = new Integer(110).toString();
3118         try {
3119             decendingMap.tailMap(endKey, true);
3120             fail("should throw IllegalArgumentException");
3121         } catch (IllegalArgumentException e) {
3122             // Expected
3123         }
3124 
3125         try {
3126             decendingMap.tailMap(endKey, false);
3127             fail("should throw IllegalArgumentException");
3128         } catch (IllegalArgumentException e) {
3129             // Expected
3130         }
3131 
3132         endKey = new Integer(109).toString();
3133         try {
3134             decendingMap.tailMap(endKey, true);
3135             fail("should throw IllegalArgumentException");
3136         } catch (IllegalArgumentException e) {
3137             // Expected
3138         }
3139         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3140         key = endKey;
3141         assertFalse(subDecendingMap_Excluded.containsKey(key));
3142 
3143         endKey = new Integer(108).toString();
3144         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3145         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3146         key = endKey;
3147         assertTrue(subDecendingMap_Included.containsKey(key));
3148         assertFalse(subDecendingMap_Excluded.containsKey(key));
3149         for (int i = 107; i > 100; i--) {
3150             key = new Integer(i).toString();
3151             assertTrue(subDecendingMap_Included.containsKey(key));
3152             assertTrue(subDecendingMap_Excluded.containsKey(key));
3153         }
3154         key = new Integer(100).toString();
3155         assertFalse(subDecendingMap_Included.containsKey(key));
3156         assertFalse(subDecendingMap_Included.containsKey(key));
3157 
3158         endKey = new Integer(101).toString();
3159         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3160         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3161         key = endKey;
3162         assertEquals(1, subDecendingMap_Included.size());
3163         assertTrue(subDecendingMap_Included.containsKey(key));
3164         assertTrue(subDecendingMap_Excluded.isEmpty());
3165 
3166         endKey = new Integer(100).toString();
3167         try {
3168             decendingMap.tailMap(endKey, true);
3169             fail("should throw IllegalArgumentException");
3170         } catch (IllegalArgumentException e) {
3171             // Expected
3172         }
3173         try {
3174             decendingMap.tailMap(endKey, false);
3175             fail("should throw IllegalArgumentException");
3176         } catch (IllegalArgumentException e) {
3177             // Expected
3178         }
3179 
3180         endKey = new Integer(99).toString();
3181         try {
3182             decendingMap.tailMap(endKey, true);
3183             fail("should throw IllegalArgumentException");
3184         } catch (IllegalArgumentException e) {
3185             // Expected
3186         }
3187 
3188         try {
3189             decendingMap.tailMap(endKey, false);
3190             fail("should throw IllegalArgumentException");
3191         } catch (IllegalArgumentException e) {
3192             // Expected
3193         }
3194 
3195         decendingMap = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
3196                 .descendingMap();
3197         endKey = new Integer(110).toString();
3198         try {
3199             decendingMap.tailMap(endKey, true);
3200             fail("should throw IllegalArgumentException");
3201         } catch (IllegalArgumentException e) {
3202             // Expected
3203         }
3204 
3205         try {
3206             decendingMap.tailMap(endKey, false);
3207             fail("should throw IllegalArgumentException");
3208         } catch (IllegalArgumentException e) {
3209             // Expected
3210         }
3211 
3212         endKey = new Integer(109).toString();
3213         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3214         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3215         key = endKey;
3216         assertTrue(subDecendingMap_Included.containsKey(key));
3217         assertFalse(subDecendingMap_Excluded.containsKey(key));
3218 
3219         endKey = new Integer(108).toString();
3220         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3221         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3222         key = endKey;
3223         assertTrue(subDecendingMap_Included.containsKey(key));
3224         assertFalse(subDecendingMap_Excluded.containsKey(key));
3225         for (int i = 107; i > 100; i--) {
3226             key = new Integer(i).toString();
3227             assertTrue(subDecendingMap_Included.containsKey(key));
3228             assertTrue(subDecendingMap_Excluded.containsKey(key));
3229         }
3230         key = new Integer(100).toString();
3231         assertFalse(subDecendingMap_Included.containsKey(key));
3232         assertFalse(subDecendingMap_Included.containsKey(key));
3233 
3234         endKey = new Integer(101).toString();
3235         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3236         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3237         key = endKey;
3238         assertEquals(1, subDecendingMap_Included.size());
3239         assertTrue(subDecendingMap_Included.containsKey(key));
3240         assertTrue(subDecendingMap_Excluded.isEmpty());
3241 
3242         endKey = new Integer(100).toString();
3243         try {
3244             decendingMap.tailMap(endKey, true);
3245             fail("should throw IllegalArgumentException");
3246         } catch (IllegalArgumentException e) {
3247             // Expected
3248         }
3249         try {
3250             decendingMap.tailMap(endKey, false);
3251             fail("should throw IllegalArgumentException");
3252         } catch (IllegalArgumentException e) {
3253             // Expected
3254         }
3255 
3256         endKey = new Integer(99).toString();
3257         try {
3258             decendingMap.tailMap(endKey, true);
3259             fail("should throw IllegalArgumentException");
3260         } catch (IllegalArgumentException e) {
3261             // Expected
3262         }
3263         try {
3264             decendingMap.tailMap(endKey, false);
3265             fail("should throw IllegalArgumentException");
3266         } catch (IllegalArgumentException e) {
3267             // Expected
3268         }
3269 
3270         // navigableMap_startIncluded_endExcluded
3271         decendingMap = ((NavigableMap) subMap_startIncluded_endExcluded)
3272                 .descendingMap();
3273         endKey = new Integer(110).toString();
3274         try {
3275             decendingMap.tailMap(endKey, true);
3276             fail("should throw IllegalArgumentException");
3277         } catch (IllegalArgumentException e) {
3278             // Expected
3279         }
3280 
3281         try {
3282             decendingMap.tailMap(endKey, false);
3283             fail("should throw IllegalArgumentException");
3284         } catch (IllegalArgumentException e) {
3285             // Expected
3286         }
3287 
3288         endKey = new Integer(109).toString();
3289         try {
3290             decendingMap.tailMap(endKey, true);
3291 
3292         } catch (IllegalArgumentException e) {
3293             // Expected
3294         }
3295         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3296         key = endKey;
3297         assertFalse(subDecendingMap_Excluded.containsKey(key));
3298 
3299         endKey = new Integer(108).toString();
3300         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3301         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3302         key = endKey;
3303         assertTrue(subDecendingMap_Included.containsKey(key));
3304         assertFalse(subDecendingMap_Excluded.containsKey(key));
3305         for (int i = 107; i > 100; i--) {
3306             key = new Integer(i).toString();
3307             assertTrue(subDecendingMap_Included.containsKey(key));
3308             assertTrue(subDecendingMap_Excluded.containsKey(key));
3309         }
3310         key = new Integer(100).toString();
3311         assertTrue(subDecendingMap_Included.containsKey(key));
3312         assertTrue(subDecendingMap_Included.containsKey(key));
3313 
3314         endKey = new Integer(101).toString();
3315         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3316         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3317         key = endKey;
3318         assertEquals(2, subDecendingMap_Included.size());
3319         assertTrue(subDecendingMap_Included.containsKey(key));
3320         assertFalse(subDecendingMap_Excluded.containsKey(key));
3321 
3322         endKey = new Integer(100).toString();
3323         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3324         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3325         key = endKey;
3326         assertTrue(subDecendingMap_Included.containsKey(key));
3327         assertFalse(subDecendingMap_Excluded.containsKey(key));
3328 
3329         endKey = new Integer(99).toString();
3330         try {
3331             decendingMap.tailMap(endKey, true);
3332             fail("should throw IllegalArgumentException");
3333         } catch (IllegalArgumentException e) {
3334             // Expected
3335         }
3336         try {
3337             decendingMap.tailMap(endKey, false);
3338             fail("should throw IllegalArgumentException");
3339         } catch (IllegalArgumentException e) {
3340             // Expected
3341         }
3342 
3343         decendingMap = ((NavigableMap) subMap_startIncluded_endIncluded)
3344                 .descendingMap();
3345         endKey = new Integer(110).toString();
3346         try {
3347             decendingMap.tailMap(endKey, true);
3348             fail("should throw IllegalArgumentException");
3349         } catch (IllegalArgumentException e) {
3350             // Expected
3351         }
3352         try {
3353             decendingMap.tailMap(endKey, false);
3354             fail("should throw IllegalArgumentException");
3355         } catch (IllegalArgumentException e) {
3356             // Expected
3357         }
3358 
3359         endKey = new Integer(109).toString();
3360         try {
3361             decendingMap.tailMap(endKey, true);
3362 
3363         } catch (IllegalArgumentException e) {
3364             // Expected
3365         }
3366         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3367         key = endKey;
3368         assertFalse(subDecendingMap_Excluded.containsKey(key));
3369 
3370         endKey = new Integer(108).toString();
3371         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3372         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3373         key = endKey;
3374         assertTrue(subDecendingMap_Included.containsKey(key));
3375         assertFalse(subDecendingMap_Excluded.containsKey(key));
3376         for (int i = 107; i > 100; i--) {
3377             key = new Integer(i).toString();
3378             assertTrue(subDecendingMap_Included.containsKey(key));
3379             assertTrue(subDecendingMap_Excluded.containsKey(key));
3380         }
3381         key = new Integer(100).toString();
3382         assertTrue(subDecendingMap_Included.containsKey(key));
3383         assertTrue(subDecendingMap_Included.containsKey(key));
3384 
3385         endKey = new Integer(101).toString();
3386         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3387         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3388         key = endKey;
3389         assertEquals(2, subDecendingMap_Included.size());
3390         assertTrue(subDecendingMap_Included.containsKey(key));
3391         assertFalse(subDecendingMap_Excluded.containsKey(key));
3392 
3393         endKey = new Integer(100).toString();
3394         subDecendingMap_Included = decendingMap.tailMap(endKey, true);
3395         subDecendingMap_Excluded = decendingMap.tailMap(endKey, false);
3396         key = endKey;
3397         assertTrue(subDecendingMap_Included.containsKey(key));
3398         assertFalse(subDecendingMap_Excluded.containsKey(key));
3399 
3400         endKey = new Integer(99).toString();
3401         try {
3402             decendingMap.tailMap(endKey, true);
3403             fail("should throw IllegalArgumentException");
3404         } catch (IllegalArgumentException e) {
3405             // Expected
3406         }
3407         try {
3408             decendingMap.tailMap(endKey, false);
3409             fail("should throw IllegalArgumentException");
3410         } catch (IllegalArgumentException e) {
3411             // Expected
3412         }
3413     }
3414 
test_Entry_setValue()3415     public void test_Entry_setValue() {
3416         TreeMap treeMap = new TreeMap();
3417         Integer value = null;
3418         for (int i = 0; i < 50; i++) {
3419             value = new Integer(i);
3420             treeMap.put(value, value);
3421         }
3422         Map checkedMap = Collections.checkedMap(treeMap, Integer.class,
3423                 Integer.class);
3424         Set entrySet = checkedMap.entrySet();
3425         Iterator iterator = entrySet.iterator();
3426         Entry entry;
3427         value = new Integer(0);
3428         for (; iterator.hasNext(); value++) {
3429             entry = (Entry) iterator.next();
3430             assertEquals(value, entry.setValue(value + 1));
3431             assertEquals(value + 1, entry.getValue());
3432         }
3433     }
3434 
test_DescendingSubMapEntrySet_comparator()3435     public void test_DescendingSubMapEntrySet_comparator() {
3436         Set entrySet;
3437         NavigableSet descendingSet;
3438         Comparator comparator;
3439         Entry[] entryArray;
3440         Integer value1, value2;
3441 
3442         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3443         if (entrySet instanceof NavigableSet) {
3444             descendingSet = ((NavigableSet) entrySet).descendingSet();
3445             assertNull(((NavigableSet) entrySet).comparator());
3446             comparator = descendingSet.comparator();
3447             assertNotNull(comparator);
3448 
3449             entryArray = (Entry[]) descendingSet
3450                     .toArray(new Entry[descendingSet.size()]);
3451             for (int i = 1; i < entryArray.length; i++) {
3452                 value1 = (Integer) entryArray[i - 1].getValue();
3453                 value2 = (Integer) entryArray[i].getValue();
3454                 assertTrue(value1 > value2);
3455                 assertTrue(comparator.compare(value1, value2) < 0);
3456             }
3457         }
3458 
3459         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3460         if (entrySet instanceof NavigableSet) {
3461             descendingSet = ((NavigableSet) entrySet).descendingSet();
3462             assertNull(((NavigableSet) entrySet).comparator());
3463             comparator = descendingSet.comparator();
3464             assertNotNull(comparator);
3465 
3466             entryArray = (Entry[]) descendingSet
3467                     .toArray(new Entry[descendingSet.size()]);
3468             for (int i = 1; i < entryArray.length; i++) {
3469                 value1 = (Integer) entryArray[i - 1].getValue();
3470                 value2 = (Integer) entryArray[i].getValue();
3471                 assertTrue(value1 > value2);
3472                 assertTrue(comparator.compare(value1, value2) < 0);
3473             }
3474         }
3475 
3476         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3477         if (entrySet instanceof NavigableSet) {
3478             descendingSet = ((NavigableSet) entrySet).descendingSet();
3479             assertNull(((NavigableSet) entrySet).comparator());
3480             comparator = descendingSet.comparator();
3481             assertNotNull(comparator);
3482 
3483             entryArray = (Entry[]) descendingSet
3484                     .toArray(new Entry[descendingSet.size()]);
3485             for (int i = 1; i < entryArray.length; i++) {
3486                 value1 = (Integer) entryArray[i - 1].getValue();
3487                 value2 = (Integer) entryArray[i].getValue();
3488                 assertTrue(value1 > value2);
3489                 assertTrue(comparator.compare(value1, value2) < 0);
3490             }
3491         }
3492 
3493         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3494         if (entrySet instanceof NavigableSet) {
3495             descendingSet = ((NavigableSet) entrySet).descendingSet();
3496             assertNull(((NavigableSet) entrySet).comparator());
3497             comparator = descendingSet.comparator();
3498             assertNotNull(comparator);
3499 
3500             entryArray = (Entry[]) descendingSet
3501                     .toArray(new Entry[descendingSet.size()]);
3502             for (int i = 1; i < entryArray.length; i++) {
3503                 value1 = (Integer) entryArray[i - 1].getValue();
3504                 value2 = (Integer) entryArray[i].getValue();
3505                 assertTrue(value1 > value2);
3506                 assertTrue(comparator.compare(value1, value2) < 0);
3507             }
3508         }
3509 
3510         String endKey = new Integer(2).toString();
3511         entrySet = tm.headMap(endKey, true).entrySet();
3512         if (entrySet instanceof NavigableSet) {
3513             descendingSet = ((NavigableSet) entrySet).descendingSet();
3514             assertNotNull(descendingSet.comparator());
3515         }
3516     }
3517 
3518     public void test_DescendingSubMapEntrySet_descendingSet() {
3519         Set entrySet;
3520         NavigableSet ascendingSubMapEntrySet, descendingSet, descendingDescedingSet;
3521         Entry[] ascendingEntryArray, descendingDescendingArray;
3522 
3523         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3524         if (entrySet instanceof NavigableSet) {
3525             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3526             descendingSet = ascendingSubMapEntrySet.descendingSet();
3527             descendingDescedingSet = descendingSet.descendingSet();
3528             ascendingEntryArray = (Entry[]) ascendingSubMapEntrySet
3529                     .toArray(new Entry[ascendingSubMapEntrySet.size()]);
3530 
3531             descendingDescendingArray = (Entry[]) descendingDescedingSet
3532                     .toArray(new Entry[descendingDescedingSet.size()]);
3533 
3534             assertEquals(ascendingEntryArray.length,
3535                     descendingDescendingArray.length);
3536             for (int i = 0; i < ascendingEntryArray.length; i++) {
3537                 assertEquals(ascendingEntryArray[i],
3538                         descendingDescendingArray[i]);
3539             }
3540         }
3541 
3542         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3543         if (entrySet instanceof NavigableSet) {
3544             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3545             descendingSet = ascendingSubMapEntrySet.descendingSet();
3546             descendingDescedingSet = descendingSet.descendingSet();
3547             ascendingEntryArray = (Entry[]) ascendingSubMapEntrySet
3548                     .toArray(new Entry[ascendingSubMapEntrySet.size()]);
3549 
3550             descendingDescendingArray = (Entry[]) descendingDescedingSet
3551                     .toArray(new Entry[descendingDescedingSet.size()]);
3552 
3553             assertEquals(ascendingEntryArray.length,
3554                     descendingDescendingArray.length);
3555             for (int i = 0; i < ascendingEntryArray.length; i++) {
3556                 assertEquals(ascendingEntryArray[i],
3557                         descendingDescendingArray[i]);
3558             }
3559         }
3560 
3561         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3562         if (entrySet instanceof NavigableSet) {
3563             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3564             descendingSet = ascendingSubMapEntrySet.descendingSet();
3565             descendingDescedingSet = descendingSet.descendingSet();
3566             ascendingEntryArray = (Entry[]) ascendingSubMapEntrySet
3567                     .toArray(new Entry[ascendingSubMapEntrySet.size()]);
3568 
3569             descendingDescendingArray = (Entry[]) descendingDescedingSet
3570                     .toArray(new Entry[descendingDescedingSet.size()]);
3571 
3572             assertEquals(ascendingEntryArray.length,
3573                     descendingDescendingArray.length);
3574             for (int i = 0; i < ascendingEntryArray.length; i++) {
3575                 assertEquals(ascendingEntryArray[i],
3576                         descendingDescendingArray[i]);
3577             }
3578         }
3579 
3580         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3581         if (entrySet instanceof NavigableSet) {
3582             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3583             descendingSet = ascendingSubMapEntrySet.descendingSet();
3584             descendingDescedingSet = descendingSet.descendingSet();
3585             ascendingEntryArray = (Entry[]) ascendingSubMapEntrySet
3586                     .toArray(new Entry[ascendingSubMapEntrySet.size()]);
3587 
3588             descendingDescendingArray = (Entry[]) descendingDescedingSet
3589                     .toArray(new Entry[descendingDescedingSet.size()]);
3590 
3591             assertEquals(ascendingEntryArray.length,
3592                     descendingDescendingArray.length);
3593             for (int i = 0; i < ascendingEntryArray.length; i++) {
3594                 assertEquals(ascendingEntryArray[i],
3595                         descendingDescendingArray[i]);
3596             }
3597         }
3598 
3599         String endKey = new Integer(2).toString();
3600         entrySet = tm.headMap(endKey, true).entrySet();// 0...2
3601         if (entrySet instanceof NavigableSet) {
3602             // [2...0]
3603             descendingSet = ((NavigableSet) entrySet).descendingSet();
3604             // [0...2]
3605             descendingDescedingSet = descendingSet.descendingSet();
3606             Iterator iterator = descendingDescedingSet.iterator();
3607             assertEquals(0, ((Entry) iterator.next()).getValue());
3608         }
3609 
3610         String startKey = new Integer(2).toString();
3611         entrySet = tm.tailMap(startKey, true).entrySet();// 2...
3612         if (entrySet instanceof NavigableSet) {
3613             // [2...0]
3614             descendingSet = ((NavigableSet) entrySet).descendingSet();
3615             // [0...2]
3616             descendingDescedingSet = descendingSet.descendingSet();
3617             Iterator iterator = descendingDescedingSet.iterator();
3618             assertEquals(2, ((Entry) iterator.next()).getValue());
3619         }
3620 
3621     }
3622 
3623     public void test_DescendingSubMapEntrySet_first() {
3624         Set entrySet;
3625         NavigableSet ascendingSubMapEntrySet, descendingSet;
3626         Entry entry;
3627 
3628         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3629         if (entrySet instanceof NavigableSet) {
3630             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3631             descendingSet = ascendingSubMapEntrySet.descendingSet();
3632             entry = (Entry) descendingSet.first();
3633             assertEquals(101, entry.getValue());
3634         }
3635 
3636         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3637         if (entrySet instanceof NavigableSet) {
3638             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3639             descendingSet = ascendingSubMapEntrySet.descendingSet();
3640             entry = (Entry) descendingSet.first();
3641             assertEquals(101, entry.getValue());
3642         }
3643 
3644         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3645         if (entrySet instanceof NavigableSet) {
3646             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3647             descendingSet = ascendingSubMapEntrySet.descendingSet();
3648             entry = (Entry) descendingSet.first();
3649             assertEquals(100, entry.getValue());
3650         }
3651 
3652         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3653         if (entrySet instanceof NavigableSet) {
3654             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3655             descendingSet = ascendingSubMapEntrySet.descendingSet();
3656             entry = (Entry) descendingSet.first();
3657             assertEquals(100, entry.getValue());
3658         }
3659     }
3660 
3661     public void test_DescendingSubMapEntrySet_last() {
3662         Set entrySet;
3663         NavigableSet ascendingSubMapEntrySet, descendingSet;
3664         Entry entry;
3665 
3666         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3667         if (entrySet instanceof NavigableSet) {
3668             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3669             descendingSet = ascendingSubMapEntrySet.descendingSet();
3670             entry = (Entry) descendingSet.last();
3671             assertEquals(108, entry.getValue());
3672         }
3673 
3674         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3675         if (entrySet instanceof NavigableSet) {
3676             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3677             descendingSet = ascendingSubMapEntrySet.descendingSet();
3678             entry = (Entry) descendingSet.last();
3679             assertEquals(109, entry.getValue());
3680         }
3681 
3682         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3683         if (entrySet instanceof NavigableSet) {
3684             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3685             descendingSet = ascendingSubMapEntrySet.descendingSet();
3686             entry = (Entry) descendingSet.last();
3687             assertEquals(108, entry.getValue());
3688         }
3689 
3690         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3691         if (entrySet instanceof NavigableSet) {
3692             ascendingSubMapEntrySet = (NavigableSet) entrySet;
3693             descendingSet = ascendingSubMapEntrySet.descendingSet();
3694             entry = (Entry) descendingSet.last();
3695             assertEquals(109, entry.getValue());
3696         }
3697     }
3698 
3699     public void test_DescendingSubMapEntrySet_pollFirst_startExcluded_endExcluded() {
3700         Set entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3701         Entry entry;
3702         if (entrySet instanceof NavigableSet) {
3703             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3704                     .descendingSet();
3705             assertEquals(8, descendingSubMapEntrySet.size());
3706             for (int i = 101; i < 109; i++) {
3707                 entry = (Entry) descendingSubMapEntrySet.pollFirst();
3708                 assertEquals(i, entry.getValue());
3709             }
3710             assertNull(descendingSubMapEntrySet.pollFirst());
3711         }
3712     }
3713 
3714     public void test_DescendingSubMapEntrySet_pollFirst_startExcluded_endIncluded() {
3715         Set entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3716         Entry entry;
3717         if (entrySet instanceof NavigableSet) {
3718             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3719                     .descendingSet();
3720             assertEquals(9, descendingSubMapEntrySet.size());
3721             for (int i = 101; i < 110; i++) {
3722                 entry = (Entry) descendingSubMapEntrySet.pollFirst();
3723                 assertEquals(i, entry.getValue());
3724             }
3725             assertNull(descendingSubMapEntrySet.pollFirst());
3726         }
3727     }
3728 
3729     public void test_DescendingSubMapEntrySet_pollFirst_startIncluded_endExcluded() {
3730         Set entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3731         Entry entry;
3732         if (entrySet instanceof NavigableSet) {
3733             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3734                     .descendingSet();
3735             assertEquals(9, descendingSubMapEntrySet.size());
3736             for (int i = 100; i < 109; i++) {
3737                 entry = (Entry) descendingSubMapEntrySet.pollFirst();
3738                 assertEquals(i, entry.getValue());
3739             }
3740             assertNull(descendingSubMapEntrySet.pollFirst());
3741         }
3742     }
3743 
3744     public void test_DescendingSubMapEntrySet_pollFirst_startIncluded_endIncluded() {
3745         Set entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3746         Entry entry;
3747         if (entrySet instanceof NavigableSet) {
3748             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3749                     .descendingSet();
3750             assertEquals(10, descendingSubMapEntrySet.size());
3751             for (int i = 100; i < 110; i++) {
3752                 entry = (Entry) descendingSubMapEntrySet.pollFirst();
3753                 assertEquals(i, entry.getValue());
3754             }
3755             assertNull(descendingSubMapEntrySet.pollFirst());
3756         }
3757     }
3758 
3759     public void test_DescendingSubMapEntrySet_pollFirst() {
3760         String key = new Integer(2).toString();
3761         Set entrySet = tm.headMap(key, true).entrySet();// [0...2]
3762         NavigableSet descendingEntrySet;
3763         Entry entry;
3764 
3765         if (entrySet instanceof NavigableSet) {
3766             // [2...0]
3767             descendingEntrySet = ((NavigableSet) entrySet).descendingSet();
3768             entry = (Entry) descendingEntrySet.pollFirst();
3769             assertEquals(0, entry.getValue());
3770         }
3771 
3772         entrySet = tm.tailMap(key, true).entrySet();
3773         if (entrySet instanceof NavigableSet) {
3774             descendingEntrySet = ((NavigableSet) entrySet).descendingSet();
3775             entry = (Entry) descendingEntrySet.pollFirst();
3776             assertEquals(2, entry.getValue());
3777         }
3778     }
3779 
3780     public void test_DescendingSubMapEntrySet_pollLast_startExcluded_endExclued() {
3781         Set entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3782         Entry entry;
3783         if (entrySet instanceof NavigableSet) {
3784             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3785                     .descendingSet();
3786             assertEquals(8, descendingSubMapEntrySet.size());
3787             for (int i = 108; i > 100; i--) {
3788                 entry = (Entry) descendingSubMapEntrySet.pollLast();
3789                 assertEquals(i, entry.getValue());
3790             }
3791             assertNull(descendingSubMapEntrySet.pollFirst());
3792         }
3793     }
3794 
3795     public void test_DescendingSubMapEntrySet_pollLast_startExcluded_endInclued() {
3796         Set entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3797         Entry entry;
3798         if (entrySet instanceof NavigableSet) {
3799             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3800                     .descendingSet();
3801             assertEquals(9, descendingSubMapEntrySet.size());
3802             for (int i = 109; i > 100; i--) {
3803                 entry = (Entry) descendingSubMapEntrySet.pollLast();
3804                 assertEquals(i, entry.getValue());
3805             }
3806             assertNull(descendingSubMapEntrySet.pollFirst());
3807         }
3808     }
3809 
3810     public void test_DescendingSubMapEntrySet_pollLast_startIncluded_endExclued() {
3811         Set entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3812         Entry entry;
3813         if (entrySet instanceof NavigableSet) {
3814             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3815                     .descendingSet();
3816             assertEquals(9, descendingSubMapEntrySet.size());
3817             for (int i = 108; i > 99; i--) {
3818                 entry = (Entry) descendingSubMapEntrySet.pollLast();
3819                 assertEquals(i, entry.getValue());
3820             }
3821             assertNull(descendingSubMapEntrySet.pollFirst());
3822         }
3823     }
3824 
3825     public void test_DescendingSubMapEntrySet_pollLast_startIncluded_endInclued() {
3826         Set entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3827         Entry entry;
3828         if (entrySet instanceof NavigableSet) {
3829             NavigableSet descendingSubMapEntrySet = ((NavigableSet) entrySet)
3830                     .descendingSet();
3831             assertEquals(10, descendingSubMapEntrySet.size());
3832             for (int i = 109; i > 99; i--) {
3833                 entry = (Entry) descendingSubMapEntrySet.pollLast();
3834                 assertEquals(i, entry.getValue());
3835             }
3836             assertNull(descendingSubMapEntrySet.pollFirst());
3837         }
3838     }
3839 
3840     public void test_DescendingSubMapEntrySet_pollLast() {
3841         String key = new Integer(2).toString();
3842         Set entrySet = tm.headMap(key, true).entrySet();// [0...2]
3843         NavigableSet descendingEntrySet;
3844         Entry entry;
3845 
3846         if (entrySet instanceof NavigableSet) {
3847             // [2...0]
3848             descendingEntrySet = ((NavigableSet) entrySet).descendingSet();
3849             entry = (Entry) descendingEntrySet.pollLast();
3850             assertEquals(2, entry.getValue());
3851         }
3852 
3853         entrySet = tm.tailMap(key, true).entrySet();
3854         if (entrySet instanceof NavigableSet) {
3855             descendingEntrySet = ((NavigableSet) entrySet).descendingSet();
3856             entry = (Entry) descendingEntrySet.pollLast();
3857             assertEquals(999, entry.getValue());
3858         }
3859     }
3860 
3861     public void test_DescendingSubMapEntrySet_descendingIterator() {
3862         Set entrySet;
3863         NavigableSet descendingSet;
3864         Iterator iterator;
3865 
3866         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3867         if (entrySet instanceof NavigableSet) {
3868             descendingSet = ((NavigableSet) entrySet).descendingSet();
3869             iterator = descendingSet.iterator();
3870             for (int value = 108; value > 100; value--) {
3871                 assertTrue(iterator.hasNext());
3872                 assertEquals(value, ((Entry) iterator.next()).getValue());
3873             }
3874             assertFalse(iterator.hasNext());
3875             try {
3876                 iterator.next();
3877                 fail("should throw NoSuchElementException");
3878             } catch (NoSuchElementException e) {
3879                 // Expected
3880             }
3881         }
3882 
3883         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
3884         if (entrySet instanceof NavigableSet) {
3885             descendingSet = ((NavigableSet) entrySet).descendingSet();
3886             iterator = descendingSet.iterator();
3887             for (int value = 109; value > 100; value--) {
3888                 assertTrue(iterator.hasNext());
3889                 assertEquals(value, ((Entry) iterator.next()).getValue());
3890             }
3891             assertFalse(iterator.hasNext());
3892             try {
3893                 iterator.next();
3894                 fail("should throw NoSuchElementException");
3895             } catch (NoSuchElementException e) {
3896                 // Expected
3897             }
3898         }
3899 
3900         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
3901         if (entrySet instanceof NavigableSet) {
3902             descendingSet = ((NavigableSet) entrySet).descendingSet();
3903             iterator = descendingSet.iterator();
3904             for (int value = 108; value > 99; value--) {
3905                 assertTrue(iterator.hasNext());
3906                 assertEquals(value, ((Entry) iterator.next()).getValue());
3907             }
3908             assertFalse(iterator.hasNext());
3909             try {
3910                 iterator.next();
3911                 fail("should throw NoSuchElementException");
3912             } catch (NoSuchElementException e) {
3913                 // Expected
3914             }
3915         }
3916 
3917         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
3918         if (entrySet instanceof NavigableSet) {
3919             descendingSet = ((NavigableSet) entrySet).descendingSet();
3920             iterator = descendingSet.iterator();
3921             for (int value = 109; value > 99; value--) {
3922                 assertTrue(iterator.hasNext());
3923                 assertEquals(value, ((Entry) iterator.next()).getValue());
3924             }
3925             assertFalse(iterator.hasNext());
3926             try {
3927                 iterator.next();
3928                 fail("should throw NoSuchElementException");
3929             } catch (NoSuchElementException e) {
3930                 // Expected
3931             }
3932         }
3933 
3934         String endKey = new Integer(2).toString();
3935         entrySet = tm.headMap(endKey, true).entrySet();// 0...2
3936         if (entrySet instanceof NavigableSet) {
3937             // [2...0]
3938             descendingSet = ((NavigableSet) entrySet).descendingSet();
3939             iterator = descendingSet.descendingIterator();
3940             assertEquals(0, ((Entry) iterator.next()).getValue());// 0...2
3941         }
3942     }
3943 
3944     public void test_DescendingSubMapEntrySet_headSet() {
3945         Set entrySet, headSet;
3946         NavigableSet descendingSubMapEntrySet;
3947         Iterator iterator, headSetIterator;
3948         Entry entry;
3949         int value;
3950 
3951         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
3952         if (entrySet instanceof NavigableSet) {
3953             descendingSubMapEntrySet = ((NavigableSet) entrySet)
3954                     .descendingSet();
3955             iterator = descendingSubMapEntrySet.iterator();
3956             while (iterator.hasNext()) {
3957                 entry = (Entry) iterator.next();
3958                 headSet = descendingSubMapEntrySet.headSet(entry);
3959                 headSetIterator = headSet.iterator();
3960                 for (value = 108; headSetIterator.hasNext(); value--) {
3961                     assertEquals(value, ((Entry) headSetIterator.next())
3962                             .getValue());
3963                 }
3964                 try {
3965                     headSetIterator.next();
3966                     fail("should throw NoSuchElementException");
3967                 } catch (NoSuchElementException e) {
3968                     // Expected
3969                 }
3970 
3971                 headSet = descendingSubMapEntrySet.headSet(entry, false);
3972                 headSetIterator = headSet.iterator();
3973                 for (value = 108; headSetIterator.hasNext(); value--) {
3974                     assertEquals(value, ((Entry) headSetIterator.next())
3975                             .getValue());
3976                 }
3977                 try {
3978                     headSetIterator.next();
3979                     fail("should throw NoSuchElementException");
3980                 } catch (NoSuchElementException e) {
3981                     // Expected
3982                 }
3983 
3984                 headSet = descendingSubMapEntrySet.headSet(entry, true);
3985                 headSetIterator = headSet.iterator();
3986                 for (value = 108; headSetIterator.hasNext(); value--) {
3987                     assertEquals(value, ((Entry) headSetIterator.next())
3988                             .getValue());
3989                 }
3990                 try {
3991                     headSetIterator.next();
3992                     fail("should throw NoSuchElementException");
3993                 } catch (NoSuchElementException e) {
3994                     // Expected
3995                 }
3996             }
3997         }
3998 
3999         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
4000         if (entrySet instanceof NavigableSet) {
4001             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4002                     .descendingSet();
4003             iterator = descendingSubMapEntrySet.iterator();
4004             while (iterator.hasNext()) {
4005                 entry = (Entry) iterator.next();
4006                 headSet = descendingSubMapEntrySet.headSet(entry);
4007                 headSetIterator = headSet.iterator();
4008                 for (value = 109; headSetIterator.hasNext(); value--) {
4009                     assertEquals(value, ((Entry) headSetIterator.next())
4010                             .getValue());
4011                 }
4012                 try {
4013                     headSetIterator.next();
4014                     fail("should throw NoSuchElementException");
4015                 } catch (NoSuchElementException e) {
4016                     // Expected
4017                 }
4018 
4019                 headSet = descendingSubMapEntrySet.headSet(entry, false);
4020                 headSetIterator = headSet.iterator();
4021                 for (value = 109; headSetIterator.hasNext(); value--) {
4022                     assertEquals(value, ((Entry) headSetIterator.next())
4023                             .getValue());
4024                 }
4025                 try {
4026                     headSetIterator.next();
4027                     fail("should throw NoSuchElementException");
4028                 } catch (NoSuchElementException e) {
4029                     // Expected
4030                 }
4031 
4032                 headSet = descendingSubMapEntrySet.headSet(entry, true);
4033                 headSetIterator = headSet.iterator();
4034                 for (value = 109; headSetIterator.hasNext(); value--) {
4035                     assertEquals(value, ((Entry) headSetIterator.next())
4036                             .getValue());
4037                 }
4038                 try {
4039                     headSetIterator.next();
4040                     fail("should throw NoSuchElementException");
4041                 } catch (NoSuchElementException e) {
4042                     // Expected
4043                 }
4044             }
4045         }
4046 
4047         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
4048         if (entrySet instanceof NavigableSet) {
4049             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4050                     .descendingSet();
4051             iterator = descendingSubMapEntrySet.iterator();
4052             while (iterator.hasNext()) {
4053                 entry = (Entry) iterator.next();
4054                 headSet = descendingSubMapEntrySet.headSet(entry);
4055                 headSetIterator = headSet.iterator();
4056                 for (value = 108; headSetIterator.hasNext(); value--) {
4057                     assertEquals(value, ((Entry) headSetIterator.next())
4058                             .getValue());
4059                 }
4060                 try {
4061                     headSetIterator.next();
4062                     fail("should throw NoSuchElementException");
4063                 } catch (NoSuchElementException e) {
4064                     // Expected
4065                 }
4066 
4067                 headSet = descendingSubMapEntrySet.headSet(entry, false);
4068                 headSetIterator = headSet.iterator();
4069                 for (value = 108; headSetIterator.hasNext(); value--) {
4070                     assertEquals(value, ((Entry) headSetIterator.next())
4071                             .getValue());
4072                 }
4073                 try {
4074                     headSetIterator.next();
4075                     fail("should throw NoSuchElementException");
4076                 } catch (NoSuchElementException e) {
4077                     // Expected
4078                 }
4079 
4080                 headSet = descendingSubMapEntrySet.headSet(entry, true);
4081                 headSetIterator = headSet.iterator();
4082                 for (value = 108; headSetIterator.hasNext(); value--) {
4083                     assertEquals(value, ((Entry) headSetIterator.next())
4084                             .getValue());
4085                 }
4086                 try {
4087                     headSetIterator.next();
4088                     fail("should throw NoSuchElementException");
4089                 } catch (NoSuchElementException e) {
4090                     // Expected
4091                 }
4092             }
4093         }
4094 
4095         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
4096         if (entrySet instanceof NavigableSet) {
4097             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4098                     .descendingSet();
4099             iterator = descendingSubMapEntrySet.iterator();
4100             while (iterator.hasNext()) {
4101                 entry = (Entry) iterator.next();
4102                 headSet = descendingSubMapEntrySet.headSet(entry);
4103                 headSetIterator = headSet.iterator();
4104                 for (value = 109; headSetIterator.hasNext(); value--) {
4105                     assertEquals(value, ((Entry) headSetIterator.next())
4106                             .getValue());
4107                 }
4108                 try {
4109                     headSetIterator.next();
4110                     fail("should throw NoSuchElementException");
4111                 } catch (NoSuchElementException e) {
4112                     // Expected
4113                 }
4114 
4115                 headSet = descendingSubMapEntrySet.headSet(entry, false);
4116                 headSetIterator = headSet.iterator();
4117                 for (value = 109; headSetIterator.hasNext(); value--) {
4118                     assertEquals(value, ((Entry) headSetIterator.next())
4119                             .getValue());
4120                 }
4121                 try {
4122                     headSetIterator.next();
4123                     fail("should throw NoSuchElementException");
4124                 } catch (NoSuchElementException e) {
4125                     // Expected
4126                 }
4127 
4128                 headSet = descendingSubMapEntrySet.headSet(entry, true);
4129                 headSetIterator = headSet.iterator();
4130                 for (value = 109; headSetIterator.hasNext(); value--) {
4131                     assertEquals(value, ((Entry) headSetIterator.next())
4132                             .getValue());
4133                 }
4134                 try {
4135                     headSetIterator.next();
4136                     fail("should throw NoSuchElementException");
4137                 } catch (NoSuchElementException e) {
4138                     // Expected
4139                 }
4140             }
4141         }
4142 
4143         String endKey = new Integer(2).toString();
4144         entrySet = tm.headMap(endKey, true).entrySet();// 0...2
4145         if (entrySet instanceof NavigableSet) {
4146             // [2...0]
4147             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4148                     .descendingSet();
4149             iterator = descendingSubMapEntrySet.iterator();
4150             iterator.next();// 2
4151             iterator.next();// 199
4152             entry = (Entry) iterator.next();// 198
4153             headSet = descendingSubMapEntrySet.headSet(entry);
4154             assertEquals(2, headSet.size());// 2 199
4155             headSetIterator = headSet.iterator();
4156             assertEquals(2, ((Entry) headSetIterator.next()).getValue());
4157             assertEquals(199, ((Entry) headSetIterator.next()).getValue());
4158 
4159             headSet = descendingSubMapEntrySet.headSet(entry, true);
4160             assertEquals(3, headSet.size());// 2 199
4161             headSetIterator = headSet.iterator();
4162             assertEquals(2, ((Entry) headSetIterator.next()).getValue());
4163             assertEquals(199, ((Entry) headSetIterator.next()).getValue());
4164             assertEquals(198, ((Entry) headSetIterator.next()).getValue());
4165         }
4166     }
4167 
4168     public void test_DescendingSubMapEntrySet_tailSet() {
4169         Set entrySet, tailSet;
4170         NavigableSet descendingSubMapEntrySet;
4171         Iterator iterator, tailSetIterator;
4172         Entry entry;
4173         int value;
4174 
4175         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
4176         if (entrySet instanceof NavigableSet) {
4177             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4178                     .descendingSet();
4179             iterator = descendingSubMapEntrySet.iterator();
4180             while (iterator.hasNext()) {
4181                 entry = (Entry) iterator.next();
4182                 tailSet = descendingSubMapEntrySet.tailSet(entry);
4183                 tailSetIterator = tailSet.iterator();
4184                 for (value = (Integer) entry.getValue(); tailSetIterator
4185                         .hasNext(); value--) {
4186                     assertEquals(value, ((Entry) tailSetIterator.next())
4187                             .getValue());
4188                 }
4189                 try {
4190                     tailSetIterator.next();
4191                     fail("should throw NoSuchElementException");
4192                 } catch (NoSuchElementException e) {
4193                     // Expected
4194                 }
4195 
4196                 tailSet = descendingSubMapEntrySet.tailSet(entry, false);
4197                 tailSetIterator = tailSet.iterator();
4198                 for (value = (Integer) entry.getValue(); tailSetIterator
4199                         .hasNext(); value--) {
4200                     assertEquals(value - 1, ((Entry) tailSetIterator.next())
4201                             .getValue());
4202                 }
4203                 try {
4204                     tailSetIterator.next();
4205                     fail("should throw NoSuchElementException");
4206                 } catch (NoSuchElementException e) {
4207                     // Expected
4208                 }
4209 
4210                 tailSet = descendingSubMapEntrySet.tailSet(entry, true);
4211                 tailSetIterator = tailSet.iterator();
4212                 for (value = (Integer) entry.getValue(); tailSetIterator
4213                         .hasNext(); value--) {
4214                     assertEquals(value, ((Entry) tailSetIterator.next())
4215                             .getValue());
4216                 }
4217                 try {
4218                     tailSetIterator.next();
4219                     fail("should throw NoSuchElementException");
4220                 } catch (NoSuchElementException e) {
4221                     // Expected
4222                 }
4223             }
4224         }
4225 
4226         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
4227         if (entrySet instanceof NavigableSet) {
4228             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4229                     .descendingSet();
4230             iterator = descendingSubMapEntrySet.iterator();
4231             while (iterator.hasNext()) {
4232                 entry = (Entry) iterator.next();
4233                 tailSet = descendingSubMapEntrySet.tailSet(entry);
4234                 tailSetIterator = tailSet.iterator();
4235                 for (value = (Integer) entry.getValue(); tailSetIterator
4236                         .hasNext(); value--) {
4237                     assertEquals(value, ((Entry) tailSetIterator.next())
4238                             .getValue());
4239                 }
4240                 try {
4241                     tailSetIterator.next();
4242                     fail("should throw NoSuchElementException");
4243                 } catch (NoSuchElementException e) {
4244                     // Expected
4245                 }
4246 
4247                 tailSet = descendingSubMapEntrySet.tailSet(entry, false);
4248                 tailSetIterator = tailSet.iterator();
4249                 for (value = (Integer) entry.getValue(); tailSetIterator
4250                         .hasNext(); value--) {
4251                     assertEquals(value - 1, ((Entry) tailSetIterator.next())
4252                             .getValue());
4253                 }
4254                 try {
4255                     tailSetIterator.next();
4256                     fail("should throw NoSuchElementException");
4257                 } catch (NoSuchElementException e) {
4258                     // Expected
4259                 }
4260 
4261                 tailSet = descendingSubMapEntrySet.tailSet(entry, true);
4262                 tailSetIterator = tailSet.iterator();
4263                 for (value = (Integer) entry.getValue(); tailSetIterator
4264                         .hasNext(); value--) {
4265                     assertEquals(value, ((Entry) tailSetIterator.next())
4266                             .getValue());
4267                 }
4268                 try {
4269                     tailSetIterator.next();
4270                     fail("should throw NoSuchElementException");
4271                 } catch (NoSuchElementException e) {
4272                     // Expected
4273                 }
4274             }
4275         }
4276 
4277         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
4278         if (entrySet instanceof NavigableSet) {
4279             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4280                     .descendingSet();
4281             iterator = descendingSubMapEntrySet.iterator();
4282             while (iterator.hasNext()) {
4283                 entry = (Entry) iterator.next();
4284                 tailSet = descendingSubMapEntrySet.tailSet(entry);
4285                 tailSetIterator = tailSet.iterator();
4286                 for (value = (Integer) entry.getValue(); tailSetIterator
4287                         .hasNext(); value--) {
4288                     assertEquals(value, ((Entry) tailSetIterator.next())
4289                             .getValue());
4290                 }
4291                 try {
4292                     tailSetIterator.next();
4293                     fail("should throw NoSuchElementException");
4294                 } catch (NoSuchElementException e) {
4295                     // Expected
4296                 }
4297 
4298                 tailSet = descendingSubMapEntrySet.tailSet(entry, false);
4299                 tailSetIterator = tailSet.iterator();
4300                 for (value = (Integer) entry.getValue(); tailSetIterator
4301                         .hasNext(); value--) {
4302                     assertEquals(value - 1, ((Entry) tailSetIterator.next())
4303                             .getValue());
4304                 }
4305                 try {
4306                     tailSetIterator.next();
4307                     fail("should throw NoSuchElementException");
4308                 } catch (NoSuchElementException e) {
4309                     // Expected
4310                 }
4311 
4312                 tailSet = descendingSubMapEntrySet.tailSet(entry, true);
4313                 tailSetIterator = tailSet.iterator();
4314                 for (value = (Integer) entry.getValue(); tailSetIterator
4315                         .hasNext(); value--) {
4316                     assertEquals(value, ((Entry) tailSetIterator.next())
4317                             .getValue());
4318                 }
4319                 try {
4320                     tailSetIterator.next();
4321                     fail("should throw NoSuchElementException");
4322                 } catch (NoSuchElementException e) {
4323                     // Expected
4324                 }
4325             }
4326         }
4327 
4328         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
4329         if (entrySet instanceof NavigableSet) {
4330             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4331                     .descendingSet();
4332             iterator = descendingSubMapEntrySet.iterator();
4333             while (iterator.hasNext()) {
4334                 entry = (Entry) iterator.next();
4335                 tailSet = descendingSubMapEntrySet.tailSet(entry);
4336                 tailSetIterator = tailSet.iterator();
4337                 for (value = (Integer) entry.getValue(); tailSetIterator
4338                         .hasNext(); value--) {
4339                     assertEquals(value, ((Entry) tailSetIterator.next())
4340                             .getValue());
4341                 }
4342                 try {
4343                     tailSetIterator.next();
4344                     fail("should throw NoSuchElementException");
4345                 } catch (NoSuchElementException e) {
4346                     // Expected
4347                 }
4348 
4349                 tailSet = descendingSubMapEntrySet.tailSet(entry, false);
4350                 tailSetIterator = tailSet.iterator();
4351                 for (value = (Integer) entry.getValue(); tailSetIterator
4352                         .hasNext(); value--) {
4353                     assertEquals(value - 1, ((Entry) tailSetIterator.next())
4354                             .getValue());
4355                 }
4356                 try {
4357                     tailSetIterator.next();
4358                     fail("should throw NoSuchElementException");
4359                 } catch (NoSuchElementException e) {
4360                     // Expected
4361                 }
4362 
4363                 tailSet = descendingSubMapEntrySet.tailSet(entry, true);
4364                 tailSetIterator = tailSet.iterator();
4365                 for (value = (Integer) entry.getValue(); tailSetIterator
4366                         .hasNext(); value--) {
4367                     assertEquals(value, ((Entry) tailSetIterator.next())
4368                             .getValue());
4369                 }
4370                 try {
4371                     tailSetIterator.next();
4372                     fail("should throw NoSuchElementException");
4373                 } catch (NoSuchElementException e) {
4374                     // Expected
4375                 }
4376             }
4377         }
4378 
4379         String endKey = new Integer(2).toString();
4380         entrySet = tm.headMap(endKey, true).entrySet();// 0...2
4381         if (entrySet instanceof NavigableSet) {
4382             // [2...0]
4383             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4384                     .descendingSet();
4385             iterator = descendingSubMapEntrySet.iterator();
4386             iterator.next();// 2
4387             entry = (Entry) iterator.next();// 199
4388             tailSet = descendingSubMapEntrySet.tailSet(entry);
4389             tailSetIterator = tailSet.iterator();
4390             assertEquals(199, ((Entry) tailSetIterator.next()).getValue());
4391 
4392             tailSet = descendingSubMapEntrySet.tailSet(entry, false);
4393             tailSetIterator = tailSet.iterator();
4394             assertEquals(198, ((Entry) tailSetIterator.next()).getValue());
4395 
4396             tailSet = descendingSubMapEntrySet.tailSet(entry, true);
4397             tailSetIterator = tailSet.iterator();
4398             assertEquals(199, ((Entry) tailSetIterator.next()).getValue());
4399         }
4400     }
4401 
4402     public void test_DescendingSubMapEntrySet_subSet() {
4403         Set entrySet, subSet;
4404         NavigableSet descendingSubMapEntrySet;
4405         Entry startEntry, endEntry;
4406         Iterator subSetIterator;
4407 
4408         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
4409         if (entrySet instanceof NavigableSet) {
4410             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4411                     .descendingSet();
4412             Iterator iteratorStart = descendingSubMapEntrySet.iterator();
4413             while (iteratorStart.hasNext()) {
4414                 startEntry = (Entry) iteratorStart.next();
4415                 Iterator iteratorEnd = descendingSubMapEntrySet.iterator();
4416                 while (iteratorEnd.hasNext()) {
4417                     endEntry = (Entry) iteratorEnd.next();
4418                     int startIndex = (Integer) startEntry.getValue();
4419                     int endIndex = (Integer) endEntry.getValue();
4420                     if (startIndex < endIndex) {
4421                         try {
4422                             descendingSubMapEntrySet.subSet(startEntry,
4423                                     endEntry);
4424                             fail("should throw IllegalArgumentException");
4425                         } catch (IllegalArgumentException e) {
4426                             // Expected
4427                         }
4428 
4429                         try {
4430                             descendingSubMapEntrySet.subSet(startEntry, false,
4431                                     endEntry, false);
4432                             fail("should throw IllegalArgumentException");
4433                         } catch (IllegalArgumentException e) {
4434                             // Expected
4435                         }
4436 
4437                         try {
4438                             descendingSubMapEntrySet.subSet(startEntry, false,
4439                                     endEntry, true);
4440                             fail("should throw IllegalArgumentException");
4441                         } catch (IllegalArgumentException e) {
4442                             // Expected
4443                         }
4444 
4445                         try {
4446                             descendingSubMapEntrySet.subSet(startEntry, true,
4447                                     endEntry, false);
4448                             fail("should throw IllegalArgumentException");
4449                         } catch (IllegalArgumentException e) {
4450                             // Expected
4451                         }
4452 
4453                         try {
4454                             descendingSubMapEntrySet.subSet(startEntry, true,
4455                                     endEntry, true);
4456                             fail("should throw IllegalArgumentException");
4457                         } catch (IllegalArgumentException e) {
4458                             // Expected
4459                         }
4460                     } else {
4461                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4462                                 endEntry);
4463                         subSetIterator = subSet.iterator();
4464                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4465                             assertEquals(index, ((Entry) subSetIterator.next())
4466                                     .getValue());
4467                         }
4468 
4469                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4470                                 false, endEntry, false);
4471                         subSetIterator = subSet.iterator();
4472                         for (int index = startIndex - 1; subSetIterator
4473                                 .hasNext(); index--) {
4474                             assertEquals(index, ((Entry) subSetIterator.next())
4475                                     .getValue());
4476                         }
4477 
4478                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4479                                 false, endEntry, true);
4480                         subSetIterator = subSet.iterator();
4481                         for (int index = startIndex - 1; subSetIterator
4482                                 .hasNext(); index--) {
4483                             assertEquals(index, ((Entry) subSetIterator.next())
4484                                     .getValue());
4485                         }
4486 
4487                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4488                                 true, endEntry, false);
4489                         subSetIterator = subSet.iterator();
4490                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4491                             assertEquals(index, ((Entry) subSetIterator.next())
4492                                     .getValue());
4493                         }
4494 
4495                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4496                                 true, endEntry, true);
4497                         subSetIterator = subSet.iterator();
4498                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4499                             assertEquals(index, ((Entry) subSetIterator.next())
4500                                     .getValue());
4501                         }
4502                     }
4503                 }
4504             }
4505         }
4506 
4507         String endKey = new Integer(2).toString();
4508         entrySet = tm.headMap(endKey, true).entrySet();
4509         if (entrySet instanceof NavigableSet) {
4510             // [2...0]
4511             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4512                     .descendingSet();
4513             Iterator iterator = descendingSubMapEntrySet.iterator();
4514             startEntry = (Entry) iterator.next();
4515             iterator.next();
4516             endEntry = (Entry) iterator.next();
4517             subSet = descendingSubMapEntrySet.subSet(startEntry, endEntry);
4518             assertEquals(2, subSet.size());
4519 
4520             subSet = descendingSubMapEntrySet.subSet(startEntry, false,
4521                     endEntry, false);
4522             assertEquals(1, subSet.size());
4523             subSetIterator = subSet.iterator();
4524             assertEquals(199, ((Entry) subSetIterator.next()).getValue());
4525 
4526             subSet = descendingSubMapEntrySet.subSet(startEntry, false,
4527                     endEntry, true);
4528             assertEquals(2, subSet.size());
4529             subSetIterator = subSet.iterator();
4530             assertEquals(199, ((Entry) subSetIterator.next()).getValue());
4531             assertEquals(198, ((Entry) subSetIterator.next()).getValue());
4532 
4533             subSet = descendingSubMapEntrySet.subSet(startEntry, true,
4534                     endEntry, false);
4535             assertEquals(2, subSet.size());
4536             subSetIterator = subSet.iterator();
4537             assertEquals(2, ((Entry) subSetIterator.next()).getValue());
4538             assertEquals(199, ((Entry) subSetIterator.next()).getValue());
4539 
4540             subSet = descendingSubMapEntrySet.subSet(startEntry, true,
4541                     endEntry, true);
4542             assertEquals(3, subSet.size());
4543             subSetIterator = subSet.iterator();
4544             assertEquals(2, ((Entry) subSetIterator.next()).getValue());
4545             assertEquals(199, ((Entry) subSetIterator.next()).getValue());
4546             assertEquals(198, ((Entry) subSetIterator.next()).getValue());
4547         }
4548 
4549         // With Comnparator
4550         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
4551         if (entrySet instanceof NavigableSet) {
4552             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4553                     .descendingSet();
4554             Iterator iteratorStart = descendingSubMapEntrySet.iterator();
4555             while (iteratorStart.hasNext()) {
4556                 startEntry = (Entry) iteratorStart.next();
4557                 Iterator iteratorEnd = descendingSubMapEntrySet.iterator();
4558                 while (iteratorEnd.hasNext()) {
4559                     endEntry = (Entry) iteratorEnd.next();
4560                     int startIndex = (Integer) startEntry.getValue();
4561                     int endIndex = (Integer) endEntry.getValue();
4562                     if (startIndex < endIndex) {
4563                         try {
4564                             descendingSubMapEntrySet.subSet(startEntry,
4565                                     endEntry);
4566                             fail("should throw IllegalArgumentException");
4567                         } catch (IllegalArgumentException e) {
4568                             // Expected
4569                         }
4570 
4571                         try {
4572                             descendingSubMapEntrySet.subSet(startEntry, false,
4573                                     endEntry, false);
4574                             fail("should throw IllegalArgumentException");
4575                         } catch (IllegalArgumentException e) {
4576                             // Expected
4577                         }
4578 
4579                         try {
4580                             descendingSubMapEntrySet.subSet(startEntry, false,
4581                                     endEntry, true);
4582                             fail("should throw IllegalArgumentException");
4583                         } catch (IllegalArgumentException e) {
4584                             // Expected
4585                         }
4586 
4587                         try {
4588                             descendingSubMapEntrySet.subSet(startEntry, true,
4589                                     endEntry, false);
4590                             fail("should throw IllegalArgumentException");
4591                         } catch (IllegalArgumentException e) {
4592                             // Expected
4593                         }
4594 
4595                         try {
4596                             descendingSubMapEntrySet.subSet(startEntry, true,
4597                                     endEntry, true);
4598                             fail("should throw IllegalArgumentException");
4599                         } catch (IllegalArgumentException e) {
4600                             // Expected
4601                         }
4602                     } else {
4603                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4604                                 endEntry);
4605                         subSetIterator = subSet.iterator();
4606                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4607                             assertEquals(index, ((Entry) subSetIterator.next())
4608                                     .getValue());
4609                         }
4610 
4611                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4612                                 false, endEntry, false);
4613                         subSetIterator = subSet.iterator();
4614                         for (int index = startIndex - 1; subSetIterator
4615                                 .hasNext(); index--) {
4616                             assertEquals(index, ((Entry) subSetIterator.next())
4617                                     .getValue());
4618                         }
4619 
4620                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4621                                 false, endEntry, true);
4622                         subSetIterator = subSet.iterator();
4623                         for (int index = startIndex - 1; subSetIterator
4624                                 .hasNext(); index--) {
4625                             assertEquals(index, ((Entry) subSetIterator.next())
4626                                     .getValue());
4627                         }
4628 
4629                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4630                                 true, endEntry, false);
4631                         subSetIterator = subSet.iterator();
4632                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4633                             assertEquals(index, ((Entry) subSetIterator.next())
4634                                     .getValue());
4635                         }
4636 
4637                         subSet = descendingSubMapEntrySet.subSet(startEntry,
4638                                 true, endEntry, true);
4639                         subSetIterator = subSet.iterator();
4640                         for (int index = startIndex; subSetIterator.hasNext(); index--) {
4641                             assertEquals(index, ((Entry) subSetIterator.next())
4642                                     .getValue());
4643                         }
4644                     }
4645                 }
4646             }
4647         }
4648     }
4649 
4650     public void test_DescendingSubMapEntrySet_lower() {
4651         Set entrySet, subSet;
4652         NavigableSet descendingSubMapEntrySet;
4653         Iterator iterator;
4654         Entry entry, lowerEntry;
4655         int value;
4656 
4657         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
4658         if (entrySet instanceof NavigableSet) {
4659             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4660                     .descendingSet();
4661             iterator = descendingSubMapEntrySet.iterator();
4662             while (iterator.hasNext()) {
4663                 entry = (Entry) iterator.next();
4664                 lowerEntry = (Entry) descendingSubMapEntrySet.lower(entry);
4665                 value = (Integer) entry.getValue();
4666                 if (value < 108) {
4667                     assertEquals(value + 1, lowerEntry.getValue());
4668                 } else {
4669                     assertNull(lowerEntry);
4670                 }
4671             }
4672 
4673             // System.out.println(descendingSubMapEntrySet);
4674             // System.out.println(tm);
4675             Object afterEnd = this.subMap_default_afterEnd_109.entrySet()
4676                     .iterator().next();
4677             // System.out.println("o:" + afterEnd);
4678             Object x = descendingSubMapEntrySet.lower(afterEnd);
4679             // System.out.println("x:" + x);
4680             assertNull(x);
4681             Object beforeStart = this.subMap_default_beforeStart_100.entrySet()
4682                     .iterator().next();
4683             // System.out.println("before: " + beforeStart);
4684             Object y = descendingSubMapEntrySet.lower(beforeStart);
4685             // System.out.println("y: " + y);
4686             assertNotNull(y);
4687             assertEquals(101, (((Entry) y).getValue()));
4688         }
4689 
4690         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
4691         if (entrySet instanceof NavigableSet) {
4692             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4693                     .descendingSet();
4694             iterator = descendingSubMapEntrySet.iterator();
4695             while (iterator.hasNext()) {
4696                 entry = (Entry) iterator.next();
4697                 lowerEntry = (Entry) descendingSubMapEntrySet.lower(entry);
4698                 value = (Integer) entry.getValue();
4699                 if (value < 109) {
4700                     assertEquals(value + 1, lowerEntry.getValue());
4701                 } else {
4702                     assertNull(lowerEntry);
4703                 }
4704             }
4705         }
4706 
4707         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
4708         if (entrySet instanceof NavigableSet) {
4709             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4710                     .descendingSet();
4711             iterator = descendingSubMapEntrySet.iterator();
4712             while (iterator.hasNext()) {
4713                 entry = (Entry) iterator.next();
4714                 lowerEntry = (Entry) descendingSubMapEntrySet.lower(entry);
4715                 value = (Integer) entry.getValue();
4716                 if (value < 108) {
4717                     assertEquals(value + 1, lowerEntry.getValue());
4718                 } else {
4719                     assertNull(lowerEntry);
4720                 }
4721             }
4722         }
4723 
4724         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
4725         if (entrySet instanceof NavigableSet) {
4726             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4727                     .descendingSet();
4728             iterator = descendingSubMapEntrySet.iterator();
4729             while (iterator.hasNext()) {
4730                 entry = (Entry) iterator.next();
4731                 lowerEntry = (Entry) descendingSubMapEntrySet.lower(entry);
4732                 value = (Integer) entry.getValue();
4733                 if (value < 109) {
4734                     assertEquals(value + 1, lowerEntry.getValue());
4735                 } else {
4736                     assertNull(lowerEntry);
4737                 }
4738             }
4739         }
4740 
4741         String endKey = new Integer(2).toString();
4742         entrySet = tm.headMap(endKey, true).entrySet();
4743         if (entrySet instanceof NavigableSet) {
4744             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4745                     .descendingSet();
4746             iterator = descendingSubMapEntrySet.iterator();
4747             iterator.next();// 2
4748             iterator.next();// 199
4749             entry = (Entry) iterator.next();// 198
4750             lowerEntry = (Entry) descendingSubMapEntrySet.lower(entry);
4751             assertEquals(199, lowerEntry.getValue());
4752         }
4753     }
4754 
4755     public void test_DescendingSubMapEntrySet_higher() {
4756         Set entrySet, subSet;
4757         NavigableSet descendingSubMapEntrySet;
4758         Iterator iterator;
4759         Entry entry, higherEntry;
4760         int value;
4761 
4762         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
4763         if (entrySet instanceof NavigableSet) {
4764             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4765                     .descendingSet();
4766             iterator = descendingSubMapEntrySet.iterator();
4767             while (iterator.hasNext()) {
4768                 entry = (Entry) iterator.next();
4769                 higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4770                 value = (Integer) entry.getValue();
4771                 if (value > 101) {
4772                     assertEquals(value - 1, higherEntry.getValue());
4773                 } else {
4774                     assertNull(higherEntry);
4775                 }
4776             }
4777 
4778             Object afterEnd = this.subMap_default_afterEnd_109.entrySet()
4779                     .iterator().next();
4780             Object x = descendingSubMapEntrySet.higher(afterEnd);
4781             assertNotNull(x);
4782             assertEquals(108, ((Entry) x).getValue());
4783             Object beforeStart = this.subMap_default_beforeStart_100.entrySet()
4784                     .iterator().next();
4785             Object y = descendingSubMapEntrySet.higher(beforeStart);
4786             assertNull(y);
4787         }
4788 
4789         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
4790         if (entrySet instanceof NavigableSet) {
4791             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4792                     .descendingSet();
4793             iterator = descendingSubMapEntrySet.iterator();
4794             while (iterator.hasNext()) {
4795                 entry = (Entry) iterator.next();
4796                 higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4797                 value = (Integer) entry.getValue();
4798                 if (value > 101) {
4799                     assertEquals(value - 1, higherEntry.getValue());
4800                 } else {
4801                     assertNull(higherEntry);
4802                 }
4803             }
4804         }
4805 
4806         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
4807         if (entrySet instanceof NavigableSet) {
4808             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4809                     .descendingSet();
4810             iterator = descendingSubMapEntrySet.iterator();
4811             while (iterator.hasNext()) {
4812                 entry = (Entry) iterator.next();
4813                 higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4814                 value = (Integer) entry.getValue();
4815                 if (value > 100) {
4816                     assertEquals(value - 1, higherEntry.getValue());
4817                 } else {
4818                     assertNull(higherEntry);
4819                 }
4820             }
4821         }
4822 
4823         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
4824         if (entrySet instanceof NavigableSet) {
4825             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4826                     .descendingSet();
4827             iterator = descendingSubMapEntrySet.iterator();
4828             while (iterator.hasNext()) {
4829                 entry = (Entry) iterator.next();
4830                 higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4831                 value = (Integer) entry.getValue();
4832                 if (value > 100) {
4833                     assertEquals(value - 1, higherEntry.getValue());
4834                 } else {
4835                     assertNull(higherEntry);
4836                 }
4837             }
4838         }
4839 
4840         String endKey = new Integer(2).toString();
4841         entrySet = tm.headMap(endKey, true).entrySet();
4842         if (entrySet instanceof NavigableSet) {
4843             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4844                     .descendingSet();
4845             iterator = descendingSubMapEntrySet.iterator();
4846             iterator.next();// 2
4847             iterator.next();// 199
4848             entry = (Entry) iterator.next();// 198
4849             higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4850             assertEquals(197, higherEntry.getValue());
4851         }
4852 
4853         // With Comparator
4854         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
4855         if (entrySet instanceof NavigableSet) {
4856             descendingSubMapEntrySet = ((NavigableSet) entrySet)
4857                     .descendingSet();
4858             iterator = descendingSubMapEntrySet.iterator();
4859             while (iterator.hasNext()) {
4860                 entry = (Entry) iterator.next();
4861                 higherEntry = (Entry) descendingSubMapEntrySet.higher(entry);
4862                 value = (Integer) entry.getValue();
4863                 if (value > 101) {
4864                     assertEquals(value - 1, higherEntry.getValue());
4865                 } else {
4866                     assertNull(higherEntry);
4867                 }
4868             }
4869 
4870             Object afterEnd = this.subMap_default_afterEnd_109.entrySet()
4871                     .iterator().next();
4872             Object x = descendingSubMapEntrySet.higher(afterEnd);
4873             assertNotNull(x);
4874             assertEquals(108, ((Entry) x).getValue());
4875             Object beforeStart = this.subMap_default_beforeStart_100.entrySet()
4876                     .iterator().next();
4877             Object y = descendingSubMapEntrySet.higher(beforeStart);
4878             assertNull(y);
4879         }
4880     }
4881 
4882     public void test_DescendingSubMapEntrySet_ceiling() {
4883         Set entrySet;
4884         NavigableSet ascendingSubMapEntrySet, descendingSet;
4885         Entry entry;
4886         Entry[] entryArray;
4887 
4888         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
4889         if (entrySet instanceof NavigableSet) {
4890             ascendingSubMapEntrySet = (NavigableSet) entrySet;
4891             descendingSet = ascendingSubMapEntrySet.descendingSet();
4892             try {
4893                 descendingSet.ceiling(null);
4894                 fail("should throw NPE");
4895             } catch (NullPointerException e) {
4896                 // Expected
4897             }
4898 
4899             entryArray = (Entry[]) descendingSet
4900                     .toArray(new Entry[descendingSet.size()]);
4901             for (int i = 0, j = 108; i < entryArray.length; i++) {
4902                 entry = (Entry) descendingSet.ceiling(entryArray[i]);
4903                 assertEquals(j - i, entry.getValue());
4904             }
4905 
4906             // System.out.println(descendingSet);
4907             // System.out.println(tm);
4908             Object afterEnd = this.subMap_default_afterEnd_109.entrySet()
4909                     .iterator().next();
4910             // System.out.println("o:" + afterEnd);//110
4911             Object x = descendingSet.ceiling(afterEnd);
4912             assertNotNull(x);
4913             // System.out.println("x:" + x);
4914             assertEquals(108, ((Entry) x).getValue());
4915             Object beforeStart = this.subMap_default_beforeStart_100.entrySet()
4916                     .iterator().next();
4917             // System.out.println("before: " + beforeStart);//0
4918             Object y = descendingSet.ceiling(beforeStart);
4919             assertNull(y);
4920         }
4921 
4922         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
4923         if (entrySet instanceof NavigableSet) {
4924             ascendingSubMapEntrySet = (NavigableSet) entrySet;
4925             descendingSet = ascendingSubMapEntrySet.descendingSet();
4926             try {
4927                 descendingSet.ceiling(null);
4928                 fail("should throw NPE");
4929             } catch (NullPointerException e) {
4930                 // Expected
4931             }
4932 
4933             entryArray = (Entry[]) descendingSet
4934                     .toArray(new Entry[descendingSet.size()]);
4935             for (int i = 0, j = 109; i < entryArray.length; i++) {
4936                 entry = (Entry) descendingSet.ceiling(entryArray[i]);
4937                 assertEquals(j - i, entry.getValue());
4938             }
4939         }
4940 
4941         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
4942         if (entrySet instanceof NavigableSet) {
4943             ascendingSubMapEntrySet = (NavigableSet) entrySet;
4944             descendingSet = ascendingSubMapEntrySet.descendingSet();
4945             try {
4946                 descendingSet.ceiling(null);
4947                 fail("should throw NPE");
4948             } catch (NullPointerException e) {
4949                 // Expected
4950             }
4951 
4952             entryArray = (Entry[]) descendingSet
4953                     .toArray(new Entry[descendingSet.size()]);
4954             for (int i = 0, j = 108; i < entryArray.length; i++) {
4955                 entry = (Entry) descendingSet.ceiling(entryArray[i]);
4956                 assertEquals(j - i, entry.getValue());
4957             }
4958         }
4959 
4960         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
4961         if (entrySet instanceof NavigableSet) {
4962             descendingSet = ((NavigableSet) entrySet).descendingSet();
4963             try {
4964                 descendingSet.ceiling(null);
4965                 fail("should throw NPE");
4966             } catch (NullPointerException e) {
4967                 // Expected
4968             }
4969 
4970             entryArray = (Entry[]) descendingSet
4971                     .toArray(new Entry[descendingSet.size()]);
4972             for (int i = 0, j = 109; i < entryArray.length; i++) {
4973                 entry = (Entry) descendingSet.ceiling(entryArray[i]);
4974                 assertEquals(j - i, entry.getValue());
4975             }
4976         }
4977 
4978         String endKey = new Integer(2).toString();
4979         entrySet = tm.headMap(endKey, true).entrySet();
4980         if (entrySet instanceof NavigableSet) {
4981             descendingSet = ((NavigableSet) entrySet).descendingSet();
4982             try {
4983                 descendingSet.ceiling(null);
4984                 fail("should throw NPE");
4985             } catch (NullPointerException e) {
4986                 // Expected
4987             }
4988 
4989             Iterator iterator = descendingSet.iterator();
4990             Entry ceilingEntry;
4991             while (iterator.hasNext()) {
4992                 entry = (Entry) iterator.next();
4993                 ceilingEntry = (Entry) descendingSet.ceiling(entry);
4994                 assertEquals(entry, ceilingEntry);
4995             }
4996         }
4997 
4998     }
4999 
5000     public void test_DescendingSubMapEntrySet_floor() {
5001         Set entrySet;
5002         NavigableSet ascendingSubMapEntrySet, descendingSet;
5003         Entry entry;
5004         Entry[] entryArray;
5005 
5006         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
5007         if (entrySet instanceof NavigableSet) {
5008             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5009             descendingSet = ascendingSubMapEntrySet.descendingSet();
5010             try {
5011                 descendingSet.floor(null);
5012                 fail("should throw NPE");
5013             } catch (NullPointerException e) {
5014                 // Expected
5015             }
5016 
5017             entryArray = (Entry[]) descendingSet
5018                     .toArray(new Entry[descendingSet.size()]);
5019             for (int i = 0, j = 108; i < entryArray.length; i++) {
5020                 entry = (Entry) descendingSet.floor(entryArray[i]);
5021                 assertEquals(j - i, entry.getValue());
5022             }
5023 
5024             Object afterEnd = this.subMap_default_afterEnd_109.entrySet()
5025                     .iterator().next();
5026             Object x = descendingSet.floor(afterEnd);
5027             assertNull(x);
5028 
5029             Object beforeStart = this.subMap_default_beforeStart_100.entrySet()
5030                     .iterator().next();
5031             Object y = descendingSet.floor(beforeStart);
5032             assertNotNull(y);
5033             assertEquals(101, (((Entry) y).getValue()));
5034         }
5035 
5036         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
5037         if (entrySet instanceof NavigableSet) {
5038             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5039             descendingSet = ascendingSubMapEntrySet.descendingSet();
5040             try {
5041                 descendingSet.floor(null);
5042                 fail("should throw NPE");
5043             } catch (NullPointerException e) {
5044                 // Expected
5045             }
5046 
5047             entryArray = (Entry[]) descendingSet
5048                     .toArray(new Entry[descendingSet.size()]);
5049             for (int i = 0, j = 109; i < entryArray.length; i++) {
5050                 entry = (Entry) descendingSet.floor(entryArray[i]);
5051                 assertEquals(j - i, entry.getValue());
5052             }
5053         }
5054 
5055         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
5056         if (entrySet instanceof NavigableSet) {
5057             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5058             descendingSet = ascendingSubMapEntrySet.descendingSet();
5059             try {
5060                 descendingSet.floor(null);
5061                 fail("should throw NPE");
5062             } catch (NullPointerException e) {
5063                 // Expected
5064             }
5065 
5066             entryArray = (Entry[]) descendingSet
5067                     .toArray(new Entry[descendingSet.size()]);
5068             for (int i = 0, j = 108; i < entryArray.length; i++) {
5069                 entry = (Entry) descendingSet.floor(entryArray[i]);
5070                 assertEquals(j - i, entry.getValue());
5071             }
5072         }
5073 
5074         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
5075         if (entrySet instanceof NavigableSet) {
5076             descendingSet = ((NavigableSet) entrySet).descendingSet();
5077             try {
5078                 descendingSet.floor(null);
5079                 fail("should throw NPE");
5080             } catch (NullPointerException e) {
5081                 // Expected
5082             }
5083 
5084             entryArray = (Entry[]) descendingSet
5085                     .toArray(new Entry[descendingSet.size()]);
5086             for (int i = 0, j = 109; i < entryArray.length; i++) {
5087                 entry = (Entry) descendingSet.floor(entryArray[i]);
5088                 assertEquals(j - i, entry.getValue());
5089             }
5090         }
5091 
5092         String endKey = new Integer(2).toString();
5093         entrySet = tm.headMap(endKey, true).entrySet();
5094         if (entrySet instanceof NavigableSet) {
5095             descendingSet = ((NavigableSet) entrySet).descendingSet();
5096 
5097             Iterator iterator = descendingSet.iterator();
5098             Entry floorEntry;
5099             while (iterator.hasNext()) {
5100                 entry = (Entry) iterator.next();
5101                 floorEntry = (Entry) descendingSet.floor(entry);
5102                 assertEquals(entry, floorEntry);
5103             }
5104         }
5105 
5106         // With Comparator
5107         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
5108         if (entrySet instanceof NavigableSet) {
5109             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5110             descendingSet = ascendingSubMapEntrySet.descendingSet();
5111             try {
5112                 descendingSet.floor(null);
5113                 fail("should throw NPE");
5114             } catch (NullPointerException e) {
5115                 // Expected
5116             }
5117 
5118             entryArray = (Entry[]) descendingSet
5119                     .toArray(new Entry[descendingSet.size()]);
5120             for (int i = 0, j = 108; i < entryArray.length; i++) {
5121                 entry = (Entry) descendingSet.floor(entryArray[i]);
5122                 assertEquals(j - i, entry.getValue());
5123             }
5124         }
5125 
5126         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
5127         if (entrySet instanceof NavigableSet) {
5128             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5129             descendingSet = ascendingSubMapEntrySet.descendingSet();
5130             try {
5131                 descendingSet.floor(null);
5132                 fail("should throw NPE");
5133             } catch (NullPointerException e) {
5134                 // Expected
5135             }
5136 
5137             entryArray = (Entry[]) descendingSet
5138                     .toArray(new Entry[descendingSet.size()]);
5139             for (int i = 0, j = 109; i < entryArray.length; i++) {
5140                 entry = (Entry) descendingSet.floor(entryArray[i]);
5141                 assertEquals(j - i, entry.getValue());
5142             }
5143         }
5144 
5145         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
5146         if (entrySet instanceof NavigableSet) {
5147             ascendingSubMapEntrySet = (NavigableSet) entrySet;
5148             descendingSet = ascendingSubMapEntrySet.descendingSet();
5149             try {
5150                 descendingSet.floor(null);
5151                 fail("should throw NPE");
5152             } catch (NullPointerException e) {
5153                 // Expected
5154             }
5155 
5156             entryArray = (Entry[]) descendingSet
5157                     .toArray(new Entry[descendingSet.size()]);
5158             for (int i = 0, j = 108; i < entryArray.length; i++) {
5159                 entry = (Entry) descendingSet.floor(entryArray[i]);
5160                 assertEquals(j - i, entry.getValue());
5161             }
5162         }
5163 
5164         entrySet = subMap_startIncluded_endIncluded_comparator.entrySet();
5165         if (entrySet instanceof NavigableSet) {
5166             descendingSet = ((NavigableSet) entrySet).descendingSet();
5167             try {
5168                 descendingSet.floor(null);
5169                 fail("should throw NPE");
5170             } catch (NullPointerException e) {
5171                 // Expected
5172             }
5173 
5174             entryArray = (Entry[]) descendingSet
5175                     .toArray(new Entry[descendingSet.size()]);
5176             for (int i = 0, j = 109; i < entryArray.length; i++) {
5177                 entry = (Entry) descendingSet.floor(entryArray[i]);
5178                 assertEquals(j - i, entry.getValue());
5179             }
5180         }
5181     }
5182 
5183     public void test_DescendingSubMapKeySet_comparator() {
5184         NavigableSet keySet, descendingKeySet;
5185         Comparator comparator;
5186         String[] keyArray;
5187         Integer value1, value2;
5188 
5189         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
5190         assertNull(keySet.comparator());
5191         descendingKeySet = keySet.descendingSet();
5192         comparator = descendingKeySet.comparator();
5193         assertNotNull(comparator);
5194         keyArray = (String[]) descendingKeySet
5195                 .toArray(new String[descendingKeySet.size()]);
5196         for (int i = 1; i < keyArray.length; i++) {
5197             value1 = Integer.valueOf(keyArray[i - 1]);
5198             value2 = Integer.valueOf(keyArray[i]);
5199             assertTrue(value1 > value2);
5200             assertTrue(comparator.compare(value1, value2) < 0);
5201         }
5202 
5203         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
5204         assertNull(keySet.comparator());
5205         descendingKeySet = keySet.descendingSet();
5206         comparator = descendingKeySet.comparator();
5207         assertNotNull(comparator);
5208         keyArray = (String[]) descendingKeySet
5209                 .toArray(new String[descendingKeySet.size()]);
5210         for (int i = 1; i < keyArray.length; i++) {
5211             value1 = Integer.valueOf(keyArray[i - 1]);
5212             value2 = Integer.valueOf(keyArray[i]);
5213             assertTrue(value1 > value2);
5214             assertTrue(comparator.compare(value1, value2) < 0);
5215         }
5216 
5217         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
5218         assertNull(keySet.comparator());
5219         descendingKeySet = keySet.descendingSet();
5220         comparator = descendingKeySet.comparator();
5221         assertNotNull(comparator);
5222         keyArray = (String[]) descendingKeySet
5223                 .toArray(new String[descendingKeySet.size()]);
5224         for (int i = 1; i < keyArray.length; i++) {
5225             value1 = Integer.valueOf(keyArray[i - 1]);
5226             value2 = Integer.valueOf(keyArray[i]);
5227             assertTrue(value1 > value2);
5228             assertTrue(comparator.compare(value1, value2) < 0);
5229         }
5230 
5231         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
5232         assertNull(keySet.comparator());
5233         descendingKeySet = keySet.descendingSet();
5234         comparator = descendingKeySet.comparator();
5235         assertNotNull(comparator);
5236         keyArray = (String[]) descendingKeySet
5237                 .toArray(new String[descendingKeySet.size()]);
5238         for (int i = 1; i < keyArray.length; i++) {
5239             value1 = Integer.valueOf(keyArray[i - 1]);
5240             value2 = Integer.valueOf(keyArray[i]);
5241             assertTrue(value1 > value2);
5242             assertTrue(comparator.compare(value1, value2) < 0);
5243         }
5244 
5245         String endKey = new Integer(2).toString();
5246         keySet = tm.headMap(endKey, true).navigableKeySet();
5247         assertNull(keySet.comparator());
5248         descendingKeySet = keySet.descendingSet();
5249         assertNotNull(descendingKeySet.comparator());
5250     }
5251 
5252     public void test_AscendingSubMapKeySet_first() {
5253         NavigableSet keySet;
5254         String firstKey1 = new Integer(100).toString();
5255         String firstKey2 = new Integer(101).toString();
5256 
5257         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
5258         assertEquals(firstKey2, keySet.first());
5259 
5260         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
5261         assertEquals(firstKey2, keySet.first());
5262 
5263         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
5264         assertEquals(firstKey1, keySet.first());
5265 
5266         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
5267         assertEquals(firstKey1, keySet.first());
5268     }
5269 
5270     public void test_DescendingSubMapKeySet_pollFirst_startExcluded_endExcluded() {
5271         NavigableSet keySet = navigableMap_startExcluded_endExcluded
5272                 .navigableKeySet();
5273         NavigableSet descendingKeySet = keySet.descendingSet();
5274         Iterator iterator = descendingKeySet.iterator();
5275         assertEquals(8, keySet.size());
5276         for (int value = 101; value < 109; value++) {
5277             assertEquals(new Integer(value).toString(), keySet.pollFirst());
5278         }
5279         assertEquals(0, keySet.size());
5280         assertNull(keySet.pollLast());
5281     }
5282 
5283     public void test_DescendingSubMapKeySet_pollFirst_startExcluded_endIncluded() {
5284         NavigableSet keySet = navigableMap_startExcluded_endIncluded
5285                 .navigableKeySet();
5286         NavigableSet descendingKeySet = keySet.descendingSet();
5287         Iterator iterator = descendingKeySet.iterator();
5288         assertEquals(9, keySet.size());
5289         for (int value = 101; value < 110; value++) {
5290             assertEquals(new Integer(value).toString(), keySet.pollFirst());
5291         }
5292         assertEquals(0, keySet.size());
5293         assertNull(keySet.pollLast());
5294     }
5295 
5296     public void test_DescendingSubMapKeySet_pollFirst_startIncluded_endExcluded() {
5297         NavigableSet keySet = navigableMap_startIncluded_endExcluded
5298                 .navigableKeySet();
5299         NavigableSet descendingKeySet = keySet.descendingSet();
5300         Iterator iterator = descendingKeySet.iterator();
5301         assertEquals(9, keySet.size());
5302         for (int value = 100; value < 109; value++) {
5303             assertEquals(new Integer(value).toString(), keySet.pollFirst());
5304         }
5305         assertEquals(0, keySet.size());
5306         assertNull(keySet.pollLast());
5307     }
5308 
5309     public void test_DescendingSubMapKeySet_pollFirst_startIncluded_endIncluded() {
5310         NavigableSet keySet = navigableMap_startIncluded_endIncluded
5311                 .navigableKeySet();
5312         NavigableSet descendingKeySet = keySet.descendingSet();
5313         Iterator iterator = descendingKeySet.iterator();
5314         assertEquals(10, keySet.size());
5315         for (int value = 100; value < 110; value++) {
5316             assertEquals(new Integer(value).toString(), keySet.pollFirst());
5317         }
5318         assertEquals(0, keySet.size());
5319         assertNull(keySet.pollLast());
5320     }
5321 
5322     public void test_DescendingSubMapKeySet_pollFirst() {
5323         String endKey = new Integer(2).toString();
5324         NavigableSet keySet = tm.headMap(endKey, true).navigableKeySet();
5325         NavigableSet descendingKeySet = keySet.descendingSet();
5326         assertEquals(endKey, descendingKeySet.pollFirst());
5327     }
5328 
5329     public void test_DescendingSubMapKeySet_pollLast_startExcluded_endExcluded() {
5330         NavigableSet keySet = navigableMap_startExcluded_endExcluded
5331                 .navigableKeySet();
5332         NavigableSet descendingKeySet = keySet.descendingSet();
5333         Iterator iterator = descendingKeySet.iterator();
5334         assertEquals(8, keySet.size());
5335         for (int value = 108; value > 100; value--) {
5336             assertEquals(new Integer(value).toString(), keySet.pollLast());
5337         }
5338         assertEquals(0, keySet.size());
5339         assertNull(keySet.pollLast());
5340     }
5341 
5342     public void test_DescendingSubMapKeySet_pollLast_startExcluded_endIncluded() {
5343         NavigableSet keySet = navigableMap_startExcluded_endIncluded
5344                 .navigableKeySet();
5345         NavigableSet descendingKeySet = keySet.descendingSet();
5346         Iterator iterator = descendingKeySet.iterator();
5347         assertEquals(9, keySet.size());
5348         for (int value = 109; value > 100; value--) {
5349             assertEquals(new Integer(value).toString(), keySet.pollLast());
5350         }
5351         assertEquals(0, keySet.size());
5352         assertNull(keySet.pollLast());
5353     }
5354 
5355     public void test_DescendingSubMapKeySet_pollLast_startIncluded_endExcluded() {
5356         NavigableSet keySet = navigableMap_startIncluded_endExcluded
5357                 .navigableKeySet();
5358         NavigableSet descendingKeySet = keySet.descendingSet();
5359         Iterator iterator = descendingKeySet.iterator();
5360         assertEquals(9, keySet.size());
5361         for (int value = 108; value > 99; value--) {
5362             assertEquals(new Integer(value).toString(), keySet.pollLast());
5363         }
5364         assertEquals(0, keySet.size());
5365         assertNull(keySet.pollLast());
5366     }
5367 
5368     public void test_DescendingSubMapKeySet_pollLast_startIncluded_endIncluded() {
5369         NavigableSet keySet = navigableMap_startIncluded_endIncluded
5370                 .navigableKeySet();
5371         NavigableSet descendingKeySet = keySet.descendingSet();
5372         Iterator iterator = descendingKeySet.iterator();
5373         assertEquals(10, keySet.size());
5374         for (int value = 109; value > 99; value--) {
5375             assertEquals(new Integer(value).toString(), keySet.pollLast());
5376         }
5377         assertEquals(0, keySet.size());
5378         assertNull(keySet.pollLast());
5379     }
5380 
5381     public void test_DescendingSubMapKeySet_pollLast() {
5382         String endKey = new Integer(2).toString();
5383         NavigableSet keySet = tm.headMap(endKey, true).navigableKeySet();
5384         NavigableSet descendingKeySet = keySet.descendingSet();
5385         assertEquals(new Integer(0).toString(), descendingKeySet.pollLast());
5386     }
5387 
5388     public void test_DescendingSubMapKeySet_headSet() {
5389         NavigableSet keySet, descendingKeySet;
5390         SortedSet headSet;
5391         String endKey, key;
5392         Iterator iterator;
5393         int index;
5394 
5395         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
5396         descendingKeySet = keySet.descendingSet();
5397         endKey = new Integer(99).toString();
5398         try {
5399             descendingKeySet.headSet(endKey);
5400             fail("should throw IllegalArgumentException");
5401         } catch (IllegalArgumentException e) {
5402             // Expected
5403         }
5404         try {
5405             descendingKeySet.headSet(endKey, false);
5406             fail("should throw IllegalArgumentException");
5407         } catch (IllegalArgumentException e) {
5408             // Expected
5409         }
5410         try {
5411             descendingKeySet.headSet(endKey, true);
5412             fail("should throw IllegalArgumentException");
5413         } catch (IllegalArgumentException e) {
5414             // Expected
5415         }
5416 
5417         endKey = new Integer(100).toString();
5418         headSet = descendingKeySet.headSet(endKey);
5419         iterator = headSet.iterator();
5420         for (index = 108; iterator.hasNext(); index--) {
5421             key = (String) iterator.next();
5422             assertEquals(new Integer(index).toString(), key);
5423         }
5424         assertEquals(100, index);
5425 
5426         headSet = descendingKeySet.headSet(endKey, false);
5427         iterator = headSet.iterator();
5428         for (index = 108; iterator.hasNext(); index--) {
5429             key = (String) iterator.next();
5430             assertEquals(new Integer(index).toString(), key);
5431         }
5432         assertEquals(100, index);
5433 
5434         try {
5435             descendingKeySet.headSet(endKey, true);
5436             fail("should throw IllegalArgumentException");
5437         } catch (IllegalArgumentException e) {
5438             // Expected
5439         }
5440 
5441         endKey = new Integer(101).toString();
5442         headSet = descendingKeySet.headSet(endKey);
5443         iterator = headSet.iterator();
5444         for (index = 108; iterator.hasNext(); index--) {
5445             key = (String) iterator.next();
5446             assertEquals(new Integer(index).toString(), key);
5447         }
5448         assertEquals(101, index);
5449 
5450         headSet = descendingKeySet.headSet(endKey, false);
5451         iterator = headSet.iterator();
5452         for (index = 108; iterator.hasNext(); index--) {
5453             key = (String) iterator.next();
5454             assertEquals(new Integer(index).toString(), key);
5455         }
5456         assertEquals(101, index);
5457 
5458         headSet = descendingKeySet.headSet(endKey, true);
5459         iterator = headSet.iterator();
5460         for (index = 108; iterator.hasNext(); index--) {
5461             key = (String) iterator.next();
5462             assertEquals(new Integer(index).toString(), key);
5463         }
5464         assertEquals(100, index);
5465 
5466         for (int i = 102; i < 109; i++) {
5467             endKey = new Integer(i).toString();
5468             headSet = descendingKeySet.headSet(endKey);
5469             iterator = headSet.iterator();
5470             int j;
5471             for (j = 108; iterator.hasNext(); j--) {
5472                 key = (String) iterator.next();
5473                 assertEquals(new Integer(j).toString(), key);
5474             }
5475             assertEquals(i, j);
5476 
5477             headSet = descendingKeySet.headSet(endKey, false);
5478             iterator = headSet.iterator();
5479             for (j = 108; iterator.hasNext(); j--) {
5480                 key = (String) iterator.next();
5481                 assertEquals(new Integer(j).toString(), key);
5482             }
5483             assertEquals(i, j);
5484 
5485             headSet = descendingKeySet.headSet(endKey, true);
5486             iterator = headSet.iterator();
5487             for (j = 108; iterator.hasNext(); j--) {
5488                 key = (String) iterator.next();
5489                 assertEquals(new Integer(j).toString(), key);
5490             }
5491             assertEquals(i - 1, j);
5492         }
5493 
5494         endKey = new Integer(109).toString();
5495         try {
5496             headSet = descendingKeySet.headSet(endKey);
5497             fail("should throw IllegalArgumentException");
5498         } catch (IllegalArgumentException expected) {
5499             // Expected
5500         }
5501 
5502         try {
5503             descendingKeySet.headSet(endKey, false);
5504             fail("should throw IllegalArgumentException");
5505         } catch (IllegalArgumentException e) {
5506             // Expected
5507         }
5508 
5509         try {
5510             descendingKeySet.headSet(endKey, true);
5511             fail("should throw IllegalArgumentException");
5512         } catch (IllegalArgumentException e) {
5513             // Expected
5514         }
5515 
5516         endKey = new Integer(110).toString();
5517         try {
5518             descendingKeySet.headSet(endKey);
5519             fail("should throw IllegalArgumentException");
5520         } catch (IllegalArgumentException e) {
5521             // Expected
5522         }
5523         try {
5524             descendingKeySet.headSet(endKey, true);
5525             fail("should throw IllegalArgumentException");
5526         } catch (IllegalArgumentException e) {
5527             // Expected
5528         }
5529         try {
5530             descendingKeySet.headSet(endKey, false);
5531             fail("should throw IllegalArgumentException");
5532         } catch (IllegalArgumentException e) {
5533             // Expected
5534         }
5535 
5536         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
5537         descendingKeySet = keySet.descendingSet();
5538         endKey = new Integer(99).toString();
5539         try {
5540             descendingKeySet.headSet(endKey);
5541             fail("should throw IllegalArgumentException");
5542         } catch (IllegalArgumentException e) {
5543             // Expected
5544         }
5545         try {
5546             descendingKeySet.headSet(endKey, false);
5547             fail("should throw IllegalArgumentException");
5548         } catch (IllegalArgumentException e) {
5549             // Expected
5550         }
5551         try {
5552             descendingKeySet.headSet(endKey, true);
5553             fail("should throw IllegalArgumentException");
5554         } catch (IllegalArgumentException e) {
5555             // Expected
5556         }
5557 
5558         endKey = new Integer(100).toString();
5559         headSet = descendingKeySet.headSet(endKey);
5560         iterator = headSet.iterator();
5561         for (index = 109; iterator.hasNext(); index--) {
5562             key = (String) iterator.next();
5563             assertEquals(new Integer(index).toString(), key);
5564         }
5565         assertEquals(100, index);
5566 
5567         headSet = descendingKeySet.headSet(endKey, false);
5568         iterator = headSet.iterator();
5569         for (index = 109; iterator.hasNext(); index--) {
5570             key = (String) iterator.next();
5571             assertEquals(new Integer(index).toString(), key);
5572         }
5573         assertEquals(100, index);
5574 
5575         try {
5576             descendingKeySet.headSet(endKey, true);
5577             fail("should throw IllegalArgumentException");
5578         } catch (IllegalArgumentException e) {
5579             // Expected
5580         }
5581 
5582         endKey = new Integer(101).toString();
5583         headSet = descendingKeySet.headSet(endKey);
5584         iterator = headSet.iterator();
5585         for (index = 109; iterator.hasNext(); index--) {
5586             key = (String) iterator.next();
5587             assertEquals(new Integer(index).toString(), key);
5588         }
5589         assertEquals(101, index);
5590 
5591         headSet = descendingKeySet.headSet(endKey, false);
5592         iterator = headSet.iterator();
5593         for (index = 109; iterator.hasNext(); index--) {
5594             key = (String) iterator.next();
5595             assertEquals(new Integer(index).toString(), key);
5596         }
5597         assertEquals(101, index);
5598 
5599         headSet = descendingKeySet.headSet(endKey, true);
5600         iterator = headSet.iterator();
5601         for (index = 109; iterator.hasNext(); index--) {
5602             key = (String) iterator.next();
5603             assertEquals(new Integer(index).toString(), key);
5604         }
5605         assertEquals(100, index);
5606 
5607         for (int i = 102; i < 109; i++) {
5608             endKey = new Integer(i).toString();
5609             headSet = descendingKeySet.headSet(endKey);
5610             iterator = headSet.iterator();
5611             int j;
5612             for (j = 109; iterator.hasNext(); j--) {
5613                 key = (String) iterator.next();
5614                 assertEquals(new Integer(j).toString(), key);
5615             }
5616             assertEquals(i, j);
5617 
5618             headSet = descendingKeySet.headSet(endKey, false);
5619             iterator = headSet.iterator();
5620             for (j = 109; iterator.hasNext(); j--) {
5621                 key = (String) iterator.next();
5622                 assertEquals(new Integer(j).toString(), key);
5623             }
5624             assertEquals(i, j);
5625 
5626             headSet = descendingKeySet.headSet(endKey, true);
5627             iterator = headSet.iterator();
5628             for (j = 109; iterator.hasNext(); j--) {
5629                 key = (String) iterator.next();
5630                 assertEquals(new Integer(j).toString(), key);
5631             }
5632             assertEquals(i - 1, j);
5633         }
5634 
5635         endKey = new Integer(109).toString();
5636         headSet = descendingKeySet.headSet(endKey);
5637         iterator = headSet.iterator();
5638         for (index = 109; iterator.hasNext(); index--) {
5639             key = (String) iterator.next();
5640             assertEquals(new Integer(index).toString(), key);
5641         }
5642         assertEquals(109, index);
5643 
5644         headSet = descendingKeySet.headSet(endKey, false);
5645         iterator = headSet.iterator();
5646         for (index = 109; iterator.hasNext(); index--) {
5647             key = (String) iterator.next();
5648             assertEquals(new Integer(index).toString(), key);
5649         }
5650         assertEquals(109, index);
5651 
5652         headSet = descendingKeySet.headSet(endKey, true);
5653         iterator = headSet.iterator();
5654         for (index = 109; iterator.hasNext(); index--) {
5655             key = (String) iterator.next();
5656             assertEquals(new Integer(index).toString(), key);
5657         }
5658         assertEquals(108, index);
5659 
5660         endKey = new Integer(110).toString();
5661         try {
5662             descendingKeySet.headSet(endKey);
5663             fail("should throw IllegalArgumentException");
5664         } catch (IllegalArgumentException e) {
5665             // Expected
5666         }
5667         try {
5668             descendingKeySet.headSet(endKey, true);
5669             fail("should throw IllegalArgumentException");
5670         } catch (IllegalArgumentException e) {
5671             // Expected
5672         }
5673         try {
5674             descendingKeySet.headSet(endKey, false);
5675             fail("should throw IllegalArgumentException");
5676         } catch (IllegalArgumentException e) {
5677             // Expected
5678         }
5679 
5680         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
5681         descendingKeySet = keySet.descendingSet();
5682         endKey = new Integer(99).toString();
5683         try {
5684             descendingKeySet.headSet(endKey);
5685             fail("should throw IllegalArgumentException");
5686         } catch (IllegalArgumentException e) {
5687             // Expected
5688         }
5689         try {
5690             descendingKeySet.headSet(endKey, false);
5691             fail("should throw IllegalArgumentException");
5692         } catch (IllegalArgumentException e) {
5693             // Expected
5694         }
5695         try {
5696             descendingKeySet.headSet(endKey, true);
5697             fail("should throw IllegalArgumentException");
5698         } catch (IllegalArgumentException e) {
5699             // Expected
5700         }
5701 
5702         endKey = new Integer(100).toString();
5703         headSet = descendingKeySet.headSet(endKey);
5704         iterator = headSet.iterator();
5705         for (index = 108; iterator.hasNext(); index--) {
5706             key = (String) iterator.next();
5707             assertEquals(new Integer(index).toString(), key);
5708         }
5709         assertEquals(100, index);
5710 
5711         headSet = descendingKeySet.headSet(endKey, false);
5712         iterator = headSet.iterator();
5713         for (index = 108; iterator.hasNext(); index--) {
5714             key = (String) iterator.next();
5715             assertEquals(new Integer(index).toString(), key);
5716         }
5717         assertEquals(100, index);
5718 
5719         headSet = descendingKeySet.headSet(endKey, true);
5720         iterator = headSet.iterator();
5721         for (index = 108; iterator.hasNext(); index--) {
5722             key = (String) iterator.next();
5723             assertEquals(new Integer(index).toString(), key);
5724         }
5725         assertEquals(99, index);
5726 
5727         endKey = new Integer(101).toString();
5728         headSet = descendingKeySet.headSet(endKey);
5729         iterator = headSet.iterator();
5730         for (index = 108; iterator.hasNext(); index--) {
5731             key = (String) iterator.next();
5732             assertEquals(new Integer(index).toString(), key);
5733         }
5734         assertEquals(101, index);
5735 
5736         headSet = descendingKeySet.headSet(endKey, false);
5737         iterator = headSet.iterator();
5738         for (index = 108; iterator.hasNext(); index--) {
5739             key = (String) iterator.next();
5740             assertEquals(new Integer(index).toString(), key);
5741         }
5742         assertEquals(101, index);
5743 
5744         headSet = descendingKeySet.headSet(endKey, true);
5745         iterator = headSet.iterator();
5746         for (index = 108; iterator.hasNext(); index--) {
5747             key = (String) iterator.next();
5748             assertEquals(new Integer(index).toString(), key);
5749         }
5750         assertEquals(100, index);
5751 
5752         for (int i = 102; i < 109; i++) {
5753             endKey = new Integer(i).toString();
5754             headSet = descendingKeySet.headSet(endKey);
5755             iterator = headSet.iterator();
5756             int j;
5757             for (j = 108; iterator.hasNext(); j--) {
5758                 key = (String) iterator.next();
5759                 assertEquals(new Integer(j).toString(), key);
5760             }
5761             assertEquals(i, j);
5762 
5763             headSet = descendingKeySet.headSet(endKey, false);
5764             iterator = headSet.iterator();
5765             for (j = 108; iterator.hasNext(); j--) {
5766                 key = (String) iterator.next();
5767                 assertEquals(new Integer(j).toString(), key);
5768             }
5769             assertEquals(i, j);
5770 
5771             headSet = descendingKeySet.headSet(endKey, true);
5772             iterator = headSet.iterator();
5773             for (j = 108; iterator.hasNext(); j--) {
5774                 key = (String) iterator.next();
5775                 assertEquals(new Integer(j).toString(), key);
5776             }
5777             assertEquals(i - 1, j);
5778         }
5779 
5780         endKey = new Integer(109).toString();
5781 
5782         try {
5783             descendingKeySet.headSet(endKey);
5784             fail("should throw IllegalArgumentException");
5785         } catch (IllegalArgumentException e) {
5786             // Expected
5787         }
5788 
5789         try {
5790             descendingKeySet.headSet(endKey, false);
5791             fail("should throw IllegalArgumentException");
5792         } catch (IllegalArgumentException e) {
5793             // Expected
5794         }
5795 
5796         try {
5797             descendingKeySet.headSet(endKey, true);
5798             fail("should throw IllegalArgumentException");
5799         } catch (IllegalArgumentException e) {
5800             // Expected
5801         }
5802 
5803         endKey = new Integer(110).toString();
5804         try {
5805             descendingKeySet.headSet(endKey);
5806             fail("should throw IllegalArgumentException");
5807         } catch (IllegalArgumentException e) {
5808             // Expected
5809         }
5810         try {
5811             descendingKeySet.headSet(endKey, true);
5812             fail("should throw IllegalArgumentException");
5813         } catch (IllegalArgumentException e) {
5814             // Expected
5815         }
5816         try {
5817             descendingKeySet.headSet(endKey, false);
5818             fail("should throw IllegalArgumentException");
5819         } catch (IllegalArgumentException e) {
5820             // Expected
5821         }
5822 
5823         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
5824         descendingKeySet = keySet.descendingSet();
5825         endKey = new Integer(99).toString();
5826         try {
5827             descendingKeySet.headSet(endKey);
5828             fail("should throw IllegalArgumentException");
5829         } catch (IllegalArgumentException e) {
5830             // Expected
5831         }
5832         try {
5833             descendingKeySet.headSet(endKey, false);
5834             fail("should throw IllegalArgumentException");
5835         } catch (IllegalArgumentException e) {
5836             // Expected
5837         }
5838         try {
5839             descendingKeySet.headSet(endKey, true);
5840             fail("should throw IllegalArgumentException");
5841         } catch (IllegalArgumentException e) {
5842             // Expected
5843         }
5844 
5845         endKey = new Integer(100).toString();
5846         headSet = descendingKeySet.headSet(endKey);
5847         iterator = headSet.iterator();
5848         for (index = 109; iterator.hasNext(); index--) {
5849             key = (String) iterator.next();
5850             assertEquals(new Integer(index).toString(), key);
5851         }
5852         assertEquals(100, index);
5853 
5854         headSet = descendingKeySet.headSet(endKey, false);
5855         iterator = headSet.iterator();
5856         for (index = 109; iterator.hasNext(); index--) {
5857             key = (String) iterator.next();
5858             assertEquals(new Integer(index).toString(), key);
5859         }
5860         assertEquals(100, index);
5861 
5862         headSet = descendingKeySet.headSet(endKey, true);
5863         iterator = headSet.iterator();
5864         for (index = 109; iterator.hasNext(); index--) {
5865             key = (String) iterator.next();
5866             assertEquals(new Integer(index).toString(), key);
5867         }
5868         assertEquals(99, index);
5869 
5870         endKey = new Integer(101).toString();
5871         headSet = descendingKeySet.headSet(endKey);
5872         iterator = headSet.iterator();
5873         for (index = 109; iterator.hasNext(); index--) {
5874             key = (String) iterator.next();
5875             assertEquals(new Integer(index).toString(), key);
5876         }
5877         assertEquals(101, index);
5878 
5879         headSet = descendingKeySet.headSet(endKey, false);
5880         iterator = headSet.iterator();
5881         for (index = 109; iterator.hasNext(); index--) {
5882             key = (String) iterator.next();
5883             assertEquals(new Integer(index).toString(), key);
5884         }
5885         assertEquals(101, index);
5886 
5887         headSet = descendingKeySet.headSet(endKey, true);
5888         iterator = headSet.iterator();
5889         for (index = 109; iterator.hasNext(); index--) {
5890             key = (String) iterator.next();
5891             assertEquals(new Integer(index).toString(), key);
5892         }
5893         assertEquals(100, index);
5894 
5895         for (int i = 102; i < 109; i++) {
5896             endKey = new Integer(i).toString();
5897             headSet = descendingKeySet.headSet(endKey);
5898             iterator = headSet.iterator();
5899             int j;
5900             for (j = 109; iterator.hasNext(); j--) {
5901                 key = (String) iterator.next();
5902                 assertEquals(new Integer(j).toString(), key);
5903             }
5904             assertEquals(i, j);
5905 
5906             headSet = descendingKeySet.headSet(endKey, false);
5907             iterator = headSet.iterator();
5908             for (j = 109; iterator.hasNext(); j--) {
5909                 key = (String) iterator.next();
5910                 assertEquals(new Integer(j).toString(), key);
5911             }
5912             assertEquals(i, j);
5913 
5914             headSet = descendingKeySet.headSet(endKey, true);
5915             iterator = headSet.iterator();
5916             for (j = 109; iterator.hasNext(); j--) {
5917                 key = (String) iterator.next();
5918                 assertEquals(new Integer(j).toString(), key);
5919             }
5920             assertEquals(i - 1, j);
5921         }
5922 
5923         endKey = new Integer(109).toString();
5924         headSet = descendingKeySet.headSet(endKey);
5925         iterator = headSet.iterator();
5926         for (index = 109; iterator.hasNext(); index--) {
5927             key = (String) iterator.next();
5928             assertEquals(new Integer(index).toString(), key);
5929         }
5930         assertEquals(109, index);
5931 
5932         headSet = descendingKeySet.headSet(endKey, false);
5933         iterator = headSet.iterator();
5934         for (index = 109; iterator.hasNext(); index--) {
5935             key = (String) iterator.next();
5936             assertEquals(new Integer(index).toString(), key);
5937         }
5938         assertEquals(109, index);
5939 
5940         headSet = descendingKeySet.headSet(endKey, true);
5941         iterator = headSet.iterator();
5942         for (index = 109; iterator.hasNext(); index--) {
5943             key = (String) iterator.next();
5944             assertEquals(new Integer(index).toString(), key);
5945         }
5946         assertEquals(108, index);
5947 
5948         endKey = new Integer(110).toString();
5949         try {
5950             descendingKeySet.headSet(endKey);
5951             fail("should throw IllegalArgumentException");
5952         } catch (IllegalArgumentException e) {
5953             // Expected
5954         }
5955         try {
5956             descendingKeySet.headSet(endKey, true);
5957             fail("should throw IllegalArgumentException");
5958         } catch (IllegalArgumentException e) {
5959             // Expected
5960         }
5961         try {
5962             descendingKeySet.headSet(endKey, false);
5963             fail("should throw IllegalArgumentException");
5964         } catch (IllegalArgumentException e) {
5965             // Expected
5966         }
5967 
5968         key = new Integer(2).toString();
5969         keySet = tm.headMap(key, true).navigableKeySet();
5970         descendingKeySet = keySet.descendingSet();
5971         iterator = descendingKeySet.iterator();
5972         iterator.next();
5973         endKey = (String) iterator.next();
5974 
5975         headSet = descendingKeySet.headSet(endKey);
5976         assertEquals(1, headSet.size());
5977 
5978         headSet = descendingKeySet.headSet(endKey, false);
5979         assertEquals(1, headSet.size());
5980 
5981         headSet = descendingKeySet.headSet(endKey, true);
5982         assertEquals(2, headSet.size());
5983 
5984         key = new Integer(2).toString();
5985         keySet = tm.tailMap(key, true).navigableKeySet();
5986         descendingKeySet = keySet.descendingSet();
5987         iterator = descendingKeySet.iterator();
5988         iterator.next();
5989         endKey = (String) iterator.next();
5990         headSet = descendingKeySet.headSet(endKey);
5991         assertEquals(1, headSet.size());
5992         iterator = headSet.iterator();
5993         assertEquals(999, Integer.parseInt((String) iterator.next()));
5994     }
5995 
5996     public void test_DescendingSubMapKeySet_tailSet() {
5997         NavigableSet keySet, descendingKeySet;
5998         SortedSet tailSet;
5999         String startKey, key;
6000         Iterator iterator;
6001         int index;
6002 
6003         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
6004         descendingKeySet = keySet.descendingSet();
6005         startKey = new Integer(99).toString();
6006         try {
6007             descendingKeySet.tailSet(startKey);
6008             fail("should throw IllegalArgumentException");
6009         } catch (IllegalArgumentException e) {
6010             // Expected
6011         }
6012 
6013         try {
6014             descendingKeySet.tailSet(startKey, true);
6015             fail("should throw IllegalArgumentException");
6016         } catch (IllegalArgumentException e) {
6017             // Expected
6018         }
6019 
6020         try {
6021             descendingKeySet.tailSet(startKey, false);
6022             fail("should throw IllegalArgumentException");
6023         } catch (IllegalArgumentException e) {
6024             // Expected
6025         }
6026 
6027         startKey = new Integer(100).toString();
6028         try {
6029             descendingKeySet.tailSet(startKey);
6030             fail("should throw IllegalArgumentException");
6031         } catch (IllegalArgumentException e) {
6032             // Expected
6033         }
6034         try {
6035             descendingKeySet.tailSet(startKey, true);
6036             fail("should throw IllegalArgumentException");
6037         } catch (IllegalArgumentException e) {
6038             // Expected
6039         }
6040 
6041         try {
6042             descendingKeySet.tailSet(startKey, false);
6043             fail("should throw IllegalArgumentException");
6044         } catch (IllegalArgumentException e) {
6045             // Expected
6046         }
6047 
6048         startKey = new Integer(101).toString();
6049         tailSet = descendingKeySet.tailSet(startKey);
6050         iterator = tailSet.iterator();
6051         for (index = 101; iterator.hasNext(); index--) {
6052             key = (String) iterator.next();
6053             assertEquals(new Integer(index).toString(), key);
6054         }
6055         assertEquals(100, index);
6056 
6057         tailSet = descendingKeySet.tailSet(startKey, true);
6058         iterator = tailSet.iterator();
6059         for (index = 101; iterator.hasNext(); index--) {
6060             key = (String) iterator.next();
6061             assertEquals(new Integer(index).toString(), key);
6062         }
6063         assertEquals(100, index);
6064 
6065         tailSet = descendingKeySet.tailSet(startKey, false);
6066         iterator = tailSet.iterator();
6067         for (index = 101; iterator.hasNext(); index--) {
6068             key = (String) iterator.next();
6069             assertEquals(new Integer(index).toString(), key);
6070         }
6071         assertEquals(101, index);
6072 
6073         for (int i = 102; i < 109; i++) {
6074             startKey = new Integer(i).toString();
6075 
6076             tailSet = descendingKeySet.tailSet(startKey);
6077             iterator = tailSet.iterator();
6078             int j;
6079             for (j = i; iterator.hasNext(); j--) {
6080                 key = (String) iterator.next();
6081                 assertEquals(new Integer(j).toString(), key);
6082             }
6083             assertEquals(100, j);
6084 
6085             tailSet = descendingKeySet.tailSet(startKey, true);
6086             iterator = tailSet.iterator();
6087             for (j = i; iterator.hasNext(); j--) {
6088                 key = (String) iterator.next();
6089                 assertEquals(new Integer(j).toString(), key);
6090             }
6091             assertEquals(100, j);
6092 
6093             tailSet = descendingKeySet.tailSet(startKey, false);
6094             iterator = tailSet.iterator();
6095             for (j = i; iterator.hasNext(); j--) {
6096                 key = (String) iterator.next();
6097                 assertEquals(new Integer(j - 1).toString(), key);
6098             }
6099             assertEquals(101, j);
6100         }
6101 
6102         startKey = new Integer(109).toString();
6103         try {
6104             descendingKeySet.tailSet(startKey);
6105             fail("should throw IllegalArgumentException");
6106         } catch (IllegalArgumentException e) {
6107             // Expected
6108         }
6109         try {
6110             descendingKeySet.tailSet(startKey, true);
6111             fail("should throw IllegalArgumentException");
6112         } catch (IllegalArgumentException e) {
6113             // Expected
6114         }
6115         tailSet = descendingKeySet.tailSet(startKey, false);
6116         iterator = tailSet.iterator();
6117         for (index = 109; iterator.hasNext(); index--) {
6118             key = (String) iterator.next();
6119             assertEquals(new Integer(index - 1).toString(), key);
6120         }
6121         assertEquals(101, index);
6122 
6123         startKey = new Integer(110).toString();
6124         try {
6125             descendingKeySet.tailSet(startKey);
6126             fail("should throw IllegalArgumentException");
6127         } catch (IllegalArgumentException e) {
6128             // Expected
6129         }
6130         try {
6131             descendingKeySet.tailSet(startKey, true);
6132             fail("should throw IllegalArgumentException");
6133         } catch (IllegalArgumentException e) {
6134             // Expected
6135         }
6136         try {
6137             descendingKeySet.tailSet(startKey, false);
6138             fail("should throw IllegalArgumentException");
6139         } catch (IllegalArgumentException e) {
6140             // Expected
6141         }
6142 
6143         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
6144         descendingKeySet = keySet.descendingSet();
6145         startKey = new Integer(99).toString();
6146         try {
6147             descendingKeySet.tailSet(startKey);
6148             fail("should throw IllegalArgumentException");
6149         } catch (IllegalArgumentException e) {
6150             // Expected
6151         }
6152 
6153         try {
6154             descendingKeySet.tailSet(startKey, true);
6155             fail("should throw IllegalArgumentException");
6156         } catch (IllegalArgumentException e) {
6157             // Expected
6158         }
6159 
6160         try {
6161             descendingKeySet.tailSet(startKey, false);
6162             fail("should throw IllegalArgumentException");
6163         } catch (IllegalArgumentException e) {
6164             // Expected
6165         }
6166 
6167         startKey = new Integer(100).toString();
6168         try {
6169             descendingKeySet.tailSet(startKey);
6170             fail("should throw IllegalArgumentException");
6171         } catch (IllegalArgumentException e) {
6172             // Expected
6173         }
6174         try {
6175             descendingKeySet.tailSet(startKey, true);
6176             fail("should throw IllegalArgumentException");
6177         } catch (IllegalArgumentException e) {
6178             // Expected
6179         }
6180         try {
6181             descendingKeySet.tailSet(startKey, false);
6182             fail("should throw IllegalArgumentException");
6183         } catch (IllegalArgumentException e) {
6184             // Expected
6185         }
6186 
6187         startKey = new Integer(101).toString();
6188         tailSet = descendingKeySet.tailSet(startKey);
6189         iterator = tailSet.iterator();
6190         for (index = 101; iterator.hasNext(); index--) {
6191             key = (String) iterator.next();
6192             assertEquals(new Integer(index).toString(), key);
6193         }
6194         assertEquals(100, index);
6195 
6196         tailSet = descendingKeySet.tailSet(startKey, true);
6197         iterator = tailSet.iterator();
6198         for (index = 101; iterator.hasNext(); index--) {
6199             key = (String) iterator.next();
6200             assertEquals(new Integer(index).toString(), key);
6201         }
6202         assertEquals(100, index);
6203 
6204         tailSet = descendingKeySet.tailSet(startKey, false);
6205         iterator = tailSet.iterator();
6206         for (index = 101; iterator.hasNext(); index--) {
6207             key = (String) iterator.next();
6208             assertEquals(new Integer(index).toString(), key);
6209         }
6210         assertEquals(101, index);
6211 
6212         for (int i = 102; i < 109; i++) {
6213             startKey = new Integer(i).toString();
6214 
6215             tailSet = descendingKeySet.tailSet(startKey);
6216             iterator = tailSet.iterator();
6217             int j;
6218             for (j = i; iterator.hasNext(); j--) {
6219                 key = (String) iterator.next();
6220                 assertEquals(new Integer(j).toString(), key);
6221             }
6222             assertEquals(100, j);
6223 
6224             tailSet = descendingKeySet.tailSet(startKey, true);
6225             iterator = tailSet.iterator();
6226             for (j = i; iterator.hasNext(); j--) {
6227                 key = (String) iterator.next();
6228                 assertEquals(new Integer(j).toString(), key);
6229             }
6230             assertEquals(100, j);
6231 
6232             tailSet = descendingKeySet.tailSet(startKey, false);
6233             iterator = tailSet.iterator();
6234             for (j = i; iterator.hasNext(); j--) {
6235                 key = (String) iterator.next();
6236                 assertEquals(new Integer(j - 1).toString(), key);
6237             }
6238             assertEquals(101, j);
6239         }
6240 
6241         startKey = new Integer(109).toString();
6242         tailSet = descendingKeySet.tailSet(startKey);
6243         iterator = tailSet.iterator();
6244         for (index = 109; iterator.hasNext(); index--) {
6245             key = (String) iterator.next();
6246             assertEquals(new Integer(index).toString(), key);
6247         }
6248         assertEquals(100, index);
6249 
6250         tailSet = descendingKeySet.tailSet(startKey, true);
6251         iterator = tailSet.iterator();
6252         for (index = 109; iterator.hasNext(); index--) {
6253             key = (String) iterator.next();
6254             assertEquals(new Integer(index).toString(), key);
6255         }
6256         assertEquals(100, index);
6257 
6258         tailSet = descendingKeySet.tailSet(startKey, false);
6259         iterator = tailSet.iterator();
6260         for (index = 109; iterator.hasNext(); index--) {
6261             key = (String) iterator.next();
6262             assertEquals(new Integer(index - 1).toString(), key);
6263         }
6264         assertEquals(101, index);
6265 
6266         startKey = new Integer(110).toString();
6267         try {
6268             descendingKeySet.tailSet(startKey);
6269             fail("should throw IllegalArgumentException");
6270         } catch (IllegalArgumentException e) {
6271             // Expected
6272         }
6273         try {
6274             descendingKeySet.tailSet(startKey, true);
6275             fail("should throw IllegalArgumentException");
6276         } catch (IllegalArgumentException e) {
6277             // Expected
6278         }
6279         try {
6280             descendingKeySet.tailSet(startKey, false);
6281             fail("should throw IllegalArgumentException");
6282         } catch (IllegalArgumentException e) {
6283             // Expected
6284         }
6285 
6286         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
6287         descendingKeySet = keySet.descendingSet();
6288         startKey = new Integer(99).toString();
6289         try {
6290             descendingKeySet.tailSet(startKey);
6291             fail("should throw IllegalArgumentException");
6292         } catch (IllegalArgumentException e) {
6293             // Expected
6294         }
6295         try {
6296             descendingKeySet.tailSet(startKey, true);
6297             fail("should throw IllegalArgumentException");
6298         } catch (IllegalArgumentException e) {
6299             // Expected
6300         }
6301         try {
6302             descendingKeySet.tailSet(startKey, false);
6303             fail("should throw IllegalArgumentException");
6304         } catch (IllegalArgumentException e) {
6305             // Expected
6306         }
6307 
6308         startKey = new Integer(100).toString();
6309         tailSet = descendingKeySet.tailSet(startKey);
6310         assertEquals(1, tailSet.size());
6311         iterator = tailSet.iterator();
6312         assertEquals(startKey, iterator.next());
6313 
6314         tailSet = descendingKeySet.tailSet(startKey, true);
6315         assertEquals(1, tailSet.size());
6316         iterator = tailSet.iterator();
6317         assertEquals(startKey, iterator.next());
6318 
6319         tailSet = descendingKeySet.tailSet(startKey, false);
6320         assertEquals(0, tailSet.size());
6321 
6322         startKey = new Integer(101).toString();
6323         tailSet = descendingKeySet.tailSet(startKey);
6324         iterator = tailSet.iterator();
6325         for (index = 101; iterator.hasNext(); index--) {
6326             key = (String) iterator.next();
6327             assertEquals(new Integer(index).toString(), key);
6328         }
6329         assertEquals(99, index);
6330 
6331         tailSet = descendingKeySet.tailSet(startKey, true);
6332         iterator = tailSet.iterator();
6333         for (index = 101; iterator.hasNext(); index--) {
6334             key = (String) iterator.next();
6335             assertEquals(new Integer(index).toString(), key);
6336         }
6337         assertEquals(99, index);
6338 
6339         tailSet = descendingKeySet.tailSet(startKey, false);
6340         iterator = tailSet.iterator();
6341         for (index = 101; iterator.hasNext(); index--) {
6342             key = (String) iterator.next();
6343             assertEquals(new Integer(index - 1).toString(), key);
6344         }
6345         assertEquals(100, index);
6346 
6347         for (int i = 102; i < 109; i++) {
6348             startKey = new Integer(i).toString();
6349 
6350             tailSet = descendingKeySet.tailSet(startKey);
6351             iterator = tailSet.iterator();
6352             int j;
6353             for (j = i; iterator.hasNext(); j--) {
6354                 key = (String) iterator.next();
6355                 assertEquals(new Integer(j).toString(), key);
6356             }
6357             assertEquals(99, j);
6358 
6359             tailSet = descendingKeySet.tailSet(startKey, true);
6360             iterator = tailSet.iterator();
6361             for (j = i; iterator.hasNext(); j--) {
6362                 key = (String) iterator.next();
6363                 assertEquals(new Integer(j).toString(), key);
6364             }
6365             assertEquals(99, j);
6366 
6367             tailSet = descendingKeySet.tailSet(startKey, false);
6368             iterator = tailSet.iterator();
6369             for (j = i; iterator.hasNext(); j--) {
6370                 key = (String) iterator.next();
6371                 assertEquals(new Integer(j - 1).toString(), key);
6372             }
6373             assertEquals(100, j);
6374         }
6375 
6376         startKey = new Integer(109).toString();
6377         try {
6378             descendingKeySet.tailSet(startKey);
6379             fail("should throw IllegalArgumentException");
6380         } catch (IllegalArgumentException e) {
6381             // Expected
6382         }
6383         try {
6384             descendingKeySet.tailSet(startKey, true);
6385             fail("should throw IllegalArgumentException");
6386         } catch (IllegalArgumentException e) {
6387             // Expected
6388         }
6389         tailSet = descendingKeySet.tailSet(startKey, false);
6390         iterator = tailSet.iterator();
6391         for (index = 109; iterator.hasNext(); index--) {
6392             key = (String) iterator.next();
6393             assertEquals(new Integer(index - 1).toString(), key);
6394         }
6395         assertEquals(100, index);
6396 
6397         startKey = new Integer(110).toString();
6398         try {
6399             descendingKeySet.tailSet(startKey);
6400             fail("should throw IllegalArgumentException");
6401         } catch (IllegalArgumentException e) {
6402             // Expected
6403         }
6404         try {
6405             descendingKeySet.tailSet(startKey, true);
6406             fail("should throw IllegalArgumentException");
6407         } catch (IllegalArgumentException e) {
6408             // Expected
6409         }
6410         try {
6411             descendingKeySet.tailSet(startKey, false);
6412             fail("should throw IllegalArgumentException");
6413         } catch (IllegalArgumentException e) {
6414             // Expected
6415         }
6416 
6417         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
6418         descendingKeySet = keySet.descendingSet();
6419         startKey = new Integer(99).toString();
6420         try {
6421             descendingKeySet.tailSet(startKey);
6422             fail("should throw IllegalArgumentException");
6423         } catch (IllegalArgumentException e) {
6424             // Expected
6425         }
6426         try {
6427             descendingKeySet.tailSet(startKey, true);
6428             fail("should throw IllegalArgumentException");
6429         } catch (IllegalArgumentException e) {
6430             // Expected
6431         }
6432         try {
6433             descendingKeySet.tailSet(startKey, false);
6434             fail("should throw IllegalArgumentException");
6435         } catch (IllegalArgumentException e) {
6436             // Expected
6437         }
6438 
6439         startKey = new Integer(100).toString();
6440         tailSet = descendingKeySet.tailSet(startKey);
6441         assertEquals(1, tailSet.size());
6442         iterator = tailSet.iterator();
6443         assertEquals(startKey, iterator.next());
6444 
6445         tailSet = descendingKeySet.tailSet(startKey, true);
6446         assertEquals(1, tailSet.size());
6447         iterator = tailSet.iterator();
6448         assertEquals(startKey, iterator.next());
6449 
6450         tailSet = descendingKeySet.tailSet(startKey, false);
6451         assertEquals(0, tailSet.size());
6452 
6453         startKey = new Integer(101).toString();
6454         tailSet = descendingKeySet.tailSet(startKey);
6455         iterator = tailSet.iterator();
6456         for (index = 101; iterator.hasNext(); index--) {
6457             key = (String) iterator.next();
6458             assertEquals(new Integer(index).toString(), key);
6459         }
6460         assertEquals(99, index);
6461 
6462         tailSet = descendingKeySet.tailSet(startKey, true);
6463         iterator = tailSet.iterator();
6464         for (index = 101; iterator.hasNext(); index--) {
6465             key = (String) iterator.next();
6466             assertEquals(new Integer(index).toString(), key);
6467         }
6468         assertEquals(99, index);
6469 
6470         tailSet = descendingKeySet.tailSet(startKey, false);
6471         iterator = tailSet.iterator();
6472         for (index = 101; iterator.hasNext(); index--) {
6473             key = (String) iterator.next();
6474             assertEquals(new Integer(index - 1).toString(), key);
6475         }
6476         assertEquals(100, index);
6477 
6478         for (int i = 102; i < 109; i++) {
6479             startKey = new Integer(i).toString();
6480 
6481             tailSet = descendingKeySet.tailSet(startKey);
6482             iterator = tailSet.iterator();
6483             int j;
6484             for (j = i; iterator.hasNext(); j--) {
6485                 key = (String) iterator.next();
6486                 assertEquals(new Integer(j).toString(), key);
6487             }
6488             assertEquals(99, j);
6489 
6490             tailSet = descendingKeySet.tailSet(startKey, true);
6491             iterator = tailSet.iterator();
6492             for (j = i; iterator.hasNext(); j--) {
6493                 key = (String) iterator.next();
6494                 assertEquals(new Integer(j).toString(), key);
6495             }
6496             assertEquals(99, j);
6497 
6498             tailSet = descendingKeySet.tailSet(startKey, false);
6499             iterator = tailSet.iterator();
6500             for (j = i; iterator.hasNext(); j--) {
6501                 key = (String) iterator.next();
6502                 assertEquals(new Integer(j - 1).toString(), key);
6503             }
6504             assertEquals(100, j);
6505         }
6506 
6507         startKey = new Integer(109).toString();
6508         tailSet = descendingKeySet.tailSet(startKey);
6509         iterator = tailSet.iterator();
6510         for (index = 109; iterator.hasNext(); index--) {
6511             key = (String) iterator.next();
6512             assertEquals(new Integer(index).toString(), key);
6513         }
6514         assertEquals(99, index);
6515 
6516         tailSet = descendingKeySet.tailSet(startKey, true);
6517         iterator = tailSet.iterator();
6518         for (index = 109; iterator.hasNext(); index--) {
6519             key = (String) iterator.next();
6520             assertEquals(new Integer(index).toString(), key);
6521         }
6522         assertEquals(99, index);
6523 
6524         tailSet = descendingKeySet.tailSet(startKey, false);
6525         iterator = tailSet.iterator();
6526         for (index = 109; iterator.hasNext(); index--) {
6527             key = (String) iterator.next();
6528             assertEquals(new Integer(index - 1).toString(), key);
6529         }
6530         assertEquals(100, index);
6531 
6532         startKey = new Integer(110).toString();
6533         try {
6534             descendingKeySet.tailSet(startKey);
6535             fail("should throw IllegalArgumentException");
6536         } catch (IllegalArgumentException e) {
6537             // Expected
6538         }
6539         try {
6540             descendingKeySet.tailSet(startKey, true);
6541             fail("should throw IllegalArgumentException");
6542         } catch (IllegalArgumentException e) {
6543             // Expected
6544         }
6545         try {
6546             descendingKeySet.tailSet(startKey, false);
6547             fail("should throw IllegalArgumentException");
6548         } catch (IllegalArgumentException e) {
6549             // Expected
6550         }
6551 
6552         key = new Integer(2).toString();
6553         keySet = tm.headMap(key, true).navigableKeySet();
6554         descendingKeySet = keySet.descendingSet();
6555         iterator = descendingKeySet.iterator();
6556         iterator.next();
6557         startKey = (String) iterator.next();
6558 
6559         tailSet = descendingKeySet.tailSet(startKey);
6560         assertEquals(112, tailSet.size());
6561         Iterator tailIterator = tailSet.iterator();
6562         assertEquals(new Integer(199).toString(), tailIterator.next());
6563 
6564         tailSet = descendingKeySet.tailSet(startKey, true);
6565         assertEquals(112, tailSet.size());
6566         tailIterator = tailSet.iterator();
6567         assertEquals(new Integer(199).toString(), tailIterator.next());
6568 
6569         tailSet = descendingKeySet.tailSet(startKey, false);
6570         assertEquals(111, tailSet.size());
6571         tailIterator = tailSet.iterator();
6572         assertEquals(new Integer(198).toString(), tailIterator.next());
6573     }
6574 
6575     public void test_DescendingSubMapKeySet_subSet() {
6576         NavigableSet keySet, descendingKeySet;
6577         SortedSet subSet;
6578         String startKey, endKey, key;
6579         Iterator startIterator, endIterator, subSetIterator;
6580 
6581         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
6582         descendingKeySet = keySet.descendingSet();
6583         startIterator = descendingKeySet.iterator();
6584         while (startIterator.hasNext()) {
6585             startKey = (String) startIterator.next();
6586             endIterator = descendingKeySet.iterator();
6587             while (endIterator.hasNext()) {
6588                 endKey = (String) endIterator.next();
6589                 int startIndex = Integer.valueOf(startKey);
6590                 int endIndex = Integer.valueOf(endKey);
6591                 if (startIndex < endIndex) {
6592                     try {
6593                         descendingKeySet.subSet(startKey, endKey);
6594                         fail("should throw IllegalArgumentException");
6595                     } catch (IllegalArgumentException e) {
6596                         // Expected
6597                     }
6598 
6599                     try {
6600                         descendingKeySet.subSet(startKey, false, endKey, false);
6601                         fail("shoudl throw IllegalArgumentException");
6602                     } catch (IllegalArgumentException e) {
6603                         // Expected
6604                     }
6605 
6606                     try {
6607                         descendingKeySet.subSet(startKey, false, endKey, true);
6608                         fail("shoudl throw IllegalArgumentException");
6609                     } catch (IllegalArgumentException e) {
6610                         // Expected
6611                     }
6612 
6613                     try {
6614                         descendingKeySet.subSet(startKey, true, endKey, false);
6615                         fail("shoudl throw IllegalArgumentException");
6616                     } catch (IllegalArgumentException e) {
6617                         // Expected
6618                     }
6619 
6620                     try {
6621                         descendingKeySet.subSet(startKey, true, endKey, true);
6622                         fail("shoudl throw IllegalArgumentException");
6623                     } catch (IllegalArgumentException e) {
6624                         // Expected
6625                     }
6626                 } else {
6627                     subSet = descendingKeySet.subSet(startKey, endKey);
6628                     subSetIterator = subSet.iterator();
6629                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6630                         assertEquals(new Integer(index).toString(),
6631                                 subSetIterator.next());
6632                     }
6633 
6634                     subSet = descendingKeySet.subSet(startKey, false, endKey,
6635                             false);
6636                     subSetIterator = subSet.iterator();
6637                     for (int index = startIndex - 1; subSetIterator.hasNext(); index--) {
6638                         assertEquals(new Integer(index).toString(),
6639                                 subSetIterator.next());
6640                     }
6641 
6642                     subSet = descendingKeySet.subSet(startKey, false, endKey,
6643                             true);
6644                     subSetIterator = subSet.iterator();
6645                     for (int index = startIndex - 1; subSetIterator.hasNext(); index--) {
6646                         assertEquals(new Integer(index).toString(),
6647                                 subSetIterator.next());
6648                     }
6649 
6650                     subSet = descendingKeySet.subSet(startKey, true, endKey,
6651                             false);
6652                     subSetIterator = subSet.iterator();
6653                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6654                         assertEquals(new Integer(index).toString(),
6655                                 subSetIterator.next());
6656                     }
6657 
6658                     subSet = descendingKeySet.subSet(startKey, true, endKey,
6659                             true);
6660                     subSetIterator = subSet.iterator();
6661                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6662                         assertEquals(new Integer(index).toString(),
6663                                 subSetIterator.next());
6664                     }
6665                 }
6666             }
6667         }
6668 
6669         endKey = new Integer(2).toString();
6670         keySet = tm.headMap(endKey, true).navigableKeySet();
6671         descendingKeySet = keySet.descendingSet();
6672         Iterator iterator = descendingKeySet.iterator();
6673 
6674         startKey = (String) iterator.next();
6675         iterator.next();
6676         endKey = (String) iterator.next();
6677 
6678         subSet = descendingKeySet.subSet(startKey, endKey);
6679         assertEquals(2, subSet.size());
6680         subSetIterator = subSet.iterator();
6681         assertEquals(startKey, subSetIterator.next());
6682         subSetIterator.next();
6683         try {
6684             subSetIterator.next();
6685             fail("should throw NoSuchElementException");
6686         } catch (NoSuchElementException e) {
6687             // Expected
6688         }
6689 
6690         subSet = descendingKeySet.subSet(startKey, false, endKey, false);
6691         assertEquals(1, subSet.size());
6692         subSetIterator = subSet.iterator();
6693         subSetIterator.next();
6694         try {
6695             subSetIterator.next();
6696             fail("should throw NoSuchElementException");
6697         } catch (NoSuchElementException e) {
6698             // Expected
6699         }
6700 
6701         subSet = descendingKeySet.subSet(startKey, false, endKey, true);
6702         assertEquals(2, subSet.size());
6703         subSetIterator = subSet.iterator();
6704         subSetIterator.next();
6705         assertEquals(endKey, subSetIterator.next());
6706         try {
6707             subSetIterator.next();
6708             fail("should throw NoSuchElementException");
6709         } catch (NoSuchElementException e) {
6710             // Expected
6711         }
6712 
6713         subSet = descendingKeySet.subSet(startKey, true, endKey, false);
6714         assertEquals(2, subSet.size());
6715         subSetIterator = subSet.iterator();
6716         assertEquals(startKey, subSetIterator.next());
6717         subSetIterator.next();
6718         try {
6719             subSetIterator.next();
6720             fail("should throw NoSuchElementException");
6721         } catch (NoSuchElementException e) {
6722             // Expected
6723         }
6724 
6725         subSet = descendingKeySet.subSet(startKey, true, endKey, true);
6726         assertEquals(3, subSet.size());
6727         subSetIterator = subSet.iterator();
6728         assertEquals(startKey, subSetIterator.next());
6729         subSetIterator.next();
6730         assertEquals(endKey, subSetIterator.next());
6731         try {
6732             subSetIterator.next();
6733             fail("should throw NoSuchElementException");
6734         } catch (NoSuchElementException e) {
6735             // Expected
6736         }
6737 
6738         // With Comparator
6739         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
6740                 .navigableKeySet();
6741         descendingKeySet = keySet.descendingSet();
6742         startIterator = descendingKeySet.iterator();
6743         while (startIterator.hasNext()) {
6744             startKey = (String) startIterator.next();
6745             endIterator = descendingKeySet.iterator();
6746             while (endIterator.hasNext()) {
6747                 endKey = (String) endIterator.next();
6748                 int startIndex = Integer.valueOf(startKey);
6749                 int endIndex = Integer.valueOf(endKey);
6750                 if (startIndex < endIndex) {
6751                     try {
6752                         descendingKeySet.subSet(startKey, endKey);
6753                         fail("should throw IllegalArgumentException");
6754                     } catch (IllegalArgumentException e) {
6755                         // Expected
6756                     }
6757 
6758                     try {
6759                         descendingKeySet.subSet(startKey, false, endKey, false);
6760                         fail("shoudl throw IllegalArgumentException");
6761                     } catch (IllegalArgumentException e) {
6762                         // Expected
6763                     }
6764 
6765                     try {
6766                         descendingKeySet.subSet(startKey, false, endKey, true);
6767                         fail("shoudl throw IllegalArgumentException");
6768                     } catch (IllegalArgumentException e) {
6769                         // Expected
6770                     }
6771 
6772                     try {
6773                         descendingKeySet.subSet(startKey, true, endKey, false);
6774                         fail("shoudl throw IllegalArgumentException");
6775                     } catch (IllegalArgumentException e) {
6776                         // Expected
6777                     }
6778 
6779                     try {
6780                         descendingKeySet.subSet(startKey, true, endKey, true);
6781                         fail("shoudl throw IllegalArgumentException");
6782                     } catch (IllegalArgumentException e) {
6783                         // Expected
6784                     }
6785                 } else {
6786                     subSet = descendingKeySet.subSet(startKey, endKey);
6787                     subSetIterator = subSet.iterator();
6788                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6789                         assertEquals(new Integer(index).toString(),
6790                                 subSetIterator.next());
6791                     }
6792 
6793                     subSet = descendingKeySet.subSet(startKey, false, endKey,
6794                             false);
6795                     subSetIterator = subSet.iterator();
6796                     for (int index = startIndex - 1; subSetIterator.hasNext(); index--) {
6797                         assertEquals(new Integer(index).toString(),
6798                                 subSetIterator.next());
6799                     }
6800 
6801                     subSet = descendingKeySet.subSet(startKey, false, endKey,
6802                             true);
6803                     subSetIterator = subSet.iterator();
6804                     for (int index = startIndex - 1; subSetIterator.hasNext(); index--) {
6805                         assertEquals(new Integer(index).toString(),
6806                                 subSetIterator.next());
6807                     }
6808 
6809                     subSet = descendingKeySet.subSet(startKey, true, endKey,
6810                             false);
6811                     subSetIterator = subSet.iterator();
6812                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6813                         assertEquals(new Integer(index).toString(),
6814                                 subSetIterator.next());
6815                     }
6816 
6817                     subSet = descendingKeySet.subSet(startKey, true, endKey,
6818                             true);
6819                     subSetIterator = subSet.iterator();
6820                     for (int index = startIndex; subSetIterator.hasNext(); index--) {
6821                         assertEquals(new Integer(index).toString(),
6822                                 subSetIterator.next());
6823                     }
6824                 }
6825             }
6826         }
6827     }
6828 
6829     public void test_DescendingSubMapKeySet_descendingSet() {
6830         NavigableSet keySet, descendingSet, descendingDescendingSet;
6831         int value;
6832         Iterator iterator;
6833 
6834         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
6835         descendingSet = keySet.descendingSet();
6836         descendingDescendingSet = descendingSet.descendingSet();
6837         iterator = descendingDescendingSet.iterator();
6838         assertTrue(iterator.hasNext());
6839         for (value = 101; iterator.hasNext(); value++) {
6840             assertEquals(new Integer(value).toString(), iterator.next());
6841         }
6842         assertEquals(109, value);
6843         try {
6844             iterator.next();
6845             fail("should throw NoSuchElementException");
6846         } catch (NoSuchElementException e) {
6847             // Expected
6848         }
6849 
6850         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
6851         descendingSet = keySet.descendingSet();
6852         descendingDescendingSet = descendingSet.descendingSet();
6853         iterator = descendingDescendingSet.iterator();
6854         assertTrue(iterator.hasNext());
6855         for (value = 101; iterator.hasNext(); value++) {
6856             assertEquals(new Integer(value).toString(), iterator.next());
6857         }
6858         assertEquals(110, value);
6859         try {
6860             iterator.next();
6861             fail("should throw NoSuchElementException");
6862         } catch (NoSuchElementException e) {
6863             // Expected
6864         }
6865 
6866         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
6867         descendingSet = keySet.descendingSet();
6868         descendingDescendingSet = descendingSet.descendingSet();
6869         iterator = descendingDescendingSet.iterator();
6870         assertTrue(iterator.hasNext());
6871         for (value = 100; iterator.hasNext(); value++) {
6872             assertEquals(new Integer(value).toString(), iterator.next());
6873         }
6874         assertEquals(109, value);
6875         try {
6876             iterator.next();
6877             fail("should throw NoSuchElementException");
6878         } catch (NoSuchElementException e) {
6879             // Expected
6880         }
6881 
6882         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
6883         descendingSet = keySet.descendingSet();
6884         descendingDescendingSet = descendingSet.descendingSet();
6885         iterator = descendingDescendingSet.iterator();
6886         assertTrue(iterator.hasNext());
6887         for (value = 100; iterator.hasNext(); value++) {
6888             assertEquals(new Integer(value).toString(), iterator.next());
6889         }
6890         assertEquals(110, value);
6891         try {
6892             iterator.next();
6893             fail("should throw NoSuchElementException");
6894         } catch (NoSuchElementException e) {
6895             // Expected
6896         }
6897 
6898         String endKey = new Integer(2).toString();
6899         keySet = tm.headMap(endKey, true).navigableKeySet();
6900         descendingSet = keySet.descendingSet();
6901         descendingDescendingSet = descendingSet.descendingSet();
6902         assertEquals(keySet, descendingDescendingSet);
6903 
6904         String startKey = new Integer(2).toString();
6905         keySet = tm.tailMap(startKey, true).navigableKeySet();
6906         descendingSet = keySet.descendingSet();
6907         descendingDescendingSet = descendingSet.descendingSet();
6908         assertEquals(keySet, descendingDescendingSet);
6909     }
6910 
6911     public void test_DescendingSubMapKeySet_descendingIterator() {
6912         NavigableSet keySet, descendingSet;
6913         int value;
6914         Iterator iterator, descendingIterator;
6915 
6916         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
6917         descendingSet = keySet.descendingSet();
6918         descendingIterator = descendingSet.descendingIterator();
6919         assertTrue(descendingIterator.hasNext());
6920         for (value = 101; descendingIterator.hasNext(); value++) {
6921             assertEquals(new Integer(value).toString(), descendingIterator
6922                     .next());
6923         }
6924         assertEquals(109, value);
6925         try {
6926             descendingIterator.next();
6927             fail("should throw NoSuchElementException");
6928         } catch (NoSuchElementException e) {
6929             // Expected
6930         }
6931 
6932         descendingSet = descendingSet
6933                 .headSet(new Integer(105).toString(), true);
6934         descendingIterator = descendingSet.descendingIterator();
6935         for (value = 105; descendingIterator.hasNext(); value++) {
6936             assertEquals(new Integer(value).toString(), descendingIterator
6937                     .next());
6938         }
6939 
6940         descendingSet = keySet.descendingSet();
6941         descendingSet = descendingSet
6942                 .tailSet(new Integer(105).toString(), true);
6943         descendingIterator = descendingSet.descendingIterator();
6944         for (value = 101; descendingIterator.hasNext(); value++) {
6945             assertEquals(new Integer(value).toString(), descendingIterator
6946                     .next());
6947         }
6948 
6949         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
6950         descendingSet = keySet.descendingSet();
6951         descendingIterator = descendingSet.descendingIterator();
6952         assertTrue(descendingIterator.hasNext());
6953         for (value = 101; descendingIterator.hasNext(); value++) {
6954             assertEquals(new Integer(value).toString(), descendingIterator
6955                     .next());
6956         }
6957         assertEquals(110, value);
6958         try {
6959             descendingIterator.next();
6960             fail("should throw NoSuchElementException");
6961         } catch (NoSuchElementException e) {
6962             // Expected
6963         }
6964 
6965         descendingSet = descendingSet
6966                 .headSet(new Integer(105).toString(), true);
6967         descendingIterator = descendingSet.descendingIterator();
6968         for (value = 105; descendingIterator.hasNext(); value++) {
6969             assertEquals(new Integer(value).toString(), descendingIterator
6970                     .next());
6971         }
6972 
6973         descendingSet = keySet.descendingSet();
6974         descendingSet = descendingSet
6975                 .tailSet(new Integer(105).toString(), true);
6976         descendingIterator = descendingSet.descendingIterator();
6977         for (value = 101; descendingIterator.hasNext(); value++) {
6978             assertEquals(new Integer(value).toString(), descendingIterator
6979                     .next());
6980         }
6981 
6982         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
6983         descendingSet = keySet.descendingSet();
6984         descendingIterator = descendingSet.descendingIterator();
6985         assertTrue(descendingIterator.hasNext());
6986         for (value = 100; descendingIterator.hasNext(); value++) {
6987             assertEquals(new Integer(value).toString(), descendingIterator
6988                     .next());
6989         }
6990         assertEquals(109, value);
6991         try {
6992             descendingIterator.next();
6993             fail("should throw NoSuchElementException");
6994         } catch (NoSuchElementException e) {
6995             // Expected
6996         }
6997 
6998         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
6999         descendingSet = keySet.descendingSet();
7000         descendingIterator = descendingSet.descendingIterator();
7001         assertTrue(descendingIterator.hasNext());
7002         for (value = 100; descendingIterator.hasNext(); value++) {
7003             assertEquals(new Integer(value).toString(), descendingIterator
7004                     .next());
7005         }
7006         assertEquals(110, value);
7007         try {
7008             descendingIterator.next();
7009             fail("should throw NoSuchElementException");
7010         } catch (NoSuchElementException e) {
7011             // Expected
7012         }
7013 
7014         String endKey = new Integer(2).toString();
7015         keySet = tm.headMap(endKey, true).navigableKeySet();
7016         iterator = keySet.iterator();
7017 
7018         descendingSet = keySet.descendingSet();
7019         descendingIterator = descendingSet.descendingIterator();
7020 
7021         while (iterator.hasNext()) {
7022             assertEquals(iterator.next(), descendingIterator.next());
7023         }
7024 
7025         String startKey = new Integer(2).toString();
7026         keySet = tm.tailMap(startKey, true).navigableKeySet();
7027         iterator = keySet.iterator();
7028         descendingSet = keySet.descendingSet();
7029         descendingIterator = descendingSet.descendingIterator();
7030 
7031         while (iterator.hasNext()) {
7032             assertEquals(iterator.next(), descendingIterator.next());
7033         }
7034     }
7035 
7036     public void test_DescendingSubMapKeySet_lower() {
7037         NavigableSet keySet, descendingKeySet;
7038         Iterator iterator;
7039         String key, lowerKey;
7040         int value, lowerValue;
7041 
7042         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7043         descendingKeySet = keySet.descendingSet();
7044         iterator = descendingKeySet.iterator();
7045         while (iterator.hasNext()) {
7046             key = (String) iterator.next();
7047             value = Integer.valueOf(key);
7048             lowerKey = (String) descendingKeySet.lower(key);
7049             if (value < 108) {
7050                 lowerValue = Integer.valueOf(lowerKey);
7051                 assertEquals(value + 1, lowerValue);
7052             } else {
7053                 assertNull(lowerKey);
7054             }
7055         }
7056 
7057         key = new Integer(0).toString();
7058         lowerKey = (String) descendingKeySet.lower(key);
7059         assertEquals(101, Integer.parseInt(lowerKey));
7060 
7061         key = new Integer(2).toString();
7062         lowerKey = (String) descendingKeySet.lower(key);
7063         assertNull(lowerKey);
7064 
7065         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7066         descendingKeySet = keySet.descendingSet();
7067         iterator = descendingKeySet.iterator();
7068         while (iterator.hasNext()) {
7069             key = (String) iterator.next();
7070             value = Integer.valueOf(key);
7071             lowerKey = (String) descendingKeySet.lower(key);
7072             if (value < 109) {
7073                 lowerValue = Integer.valueOf(lowerKey);
7074                 assertEquals(value + 1, lowerValue);
7075             } else {
7076                 assertNull(lowerKey);
7077             }
7078         }
7079 
7080         key = new Integer(0).toString();
7081         lowerKey = (String) descendingKeySet.lower(key);
7082         assertEquals(101, Integer.parseInt(lowerKey));
7083 
7084         key = new Integer(2).toString();
7085         lowerKey = (String) descendingKeySet.lower(key);
7086         assertNull(lowerKey);
7087 
7088         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7089         descendingKeySet = keySet.descendingSet();
7090         iterator = descendingKeySet.iterator();
7091         while (iterator.hasNext()) {
7092             key = (String) iterator.next();
7093             value = Integer.valueOf(key);
7094             lowerKey = (String) descendingKeySet.lower(key);
7095             if (value < 108) {
7096                 lowerValue = Integer.valueOf(lowerKey);
7097                 assertEquals(value + 1, lowerValue);
7098             } else {
7099                 assertNull(lowerKey);
7100             }
7101         }
7102 
7103         key = new Integer(0).toString();
7104         lowerKey = (String) descendingKeySet.lower(key);
7105         assertEquals(100, Integer.parseInt(lowerKey));
7106 
7107         key = new Integer(2).toString();
7108         lowerKey = (String) descendingKeySet.lower(key);
7109         assertNull(lowerKey);
7110 
7111         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7112         descendingKeySet = keySet.descendingSet();
7113         iterator = descendingKeySet.iterator();
7114         while (iterator.hasNext()) {
7115             key = (String) iterator.next();
7116             value = Integer.valueOf(key);
7117             lowerKey = (String) descendingKeySet.lower(key);
7118             if (value < 109) {
7119                 lowerValue = Integer.valueOf(lowerKey);
7120                 assertEquals(value + 1, lowerValue);
7121             } else {
7122                 assertNull(lowerKey);
7123             }
7124         }
7125 
7126         key = new Integer(0).toString();
7127         lowerKey = (String) descendingKeySet.lower(key);
7128         assertEquals(100, Integer.parseInt(lowerKey));
7129 
7130         key = new Integer(2).toString();
7131         lowerKey = (String) descendingKeySet.lower(key);
7132         assertNull(lowerKey);
7133 
7134         key = new Integer(2).toString();
7135         keySet = tm.headMap(key, true).navigableKeySet();
7136         descendingKeySet = keySet.descendingSet();
7137         iterator = descendingKeySet.iterator();
7138         iterator.next();
7139         iterator.next();
7140         key = (String) iterator.next();
7141         lowerKey = (String) descendingKeySet.lower(key);
7142         assertEquals(new Integer(199).toString(), lowerKey);
7143         try {
7144             descendingKeySet.lower(null);
7145             fail("should throw NPE");
7146         } catch (NullPointerException e) {
7147             // Expected
7148         }
7149 
7150         key = new Integer(0).toString();
7151         String endKey = key;
7152 
7153         keySet = tm.headMap(endKey, true).navigableKeySet();
7154         descendingKeySet = keySet.descendingSet();
7155         assertNull(descendingKeySet.lower(endKey));
7156 
7157         key = new Integer(0).toString();
7158         keySet = tm.headMap(endKey, false).navigableKeySet();
7159         descendingKeySet = keySet.descendingSet();
7160         assertNull(descendingKeySet.lower(endKey));
7161 
7162         endKey = new Integer(999).toString();
7163         keySet = tm.headMap(endKey, true).navigableKeySet();
7164         descendingKeySet = keySet.descendingSet();
7165         assertNull(descendingKeySet.lower(endKey));
7166         assertEquals(new Integer(1).toString(), descendingKeySet.lower(key));
7167 
7168         endKey = new Integer(999).toString();
7169         keySet = tm.headMap(endKey, false).navigableKeySet();
7170         descendingKeySet = keySet.descendingSet();
7171         assertNull(descendingKeySet.lower(endKey));
7172         assertEquals(new Integer(1).toString(), descendingKeySet.lower(key));
7173 
7174         // With Comparator
7175         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
7176                 .navigableKeySet();
7177         descendingKeySet = keySet.descendingSet();
7178         iterator = descendingKeySet.iterator();
7179         while (iterator.hasNext()) {
7180             key = (String) iterator.next();
7181             value = Integer.valueOf(key);
7182             lowerKey = (String) descendingKeySet.lower(key);
7183             if (value < 108) {
7184                 lowerValue = Integer.valueOf(lowerKey);
7185                 assertEquals(value + 1, lowerValue);
7186             } else {
7187                 assertNull(lowerKey);
7188             }
7189         }
7190 
7191         key = new Integer(0).toString();
7192         lowerKey = (String) descendingKeySet.lower(key);
7193         assertEquals(101, Integer.parseInt(lowerKey));
7194 
7195         key = new Integer(2).toString();
7196         lowerKey = (String) descendingKeySet.lower(key);
7197         assertNull(lowerKey);
7198 
7199         keySet = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
7200                 .navigableKeySet();
7201         descendingKeySet = keySet.descendingSet();
7202         iterator = descendingKeySet.iterator();
7203         while (iterator.hasNext()) {
7204             key = (String) iterator.next();
7205             value = Integer.valueOf(key);
7206             lowerKey = (String) descendingKeySet.lower(key);
7207             if (value < 109) {
7208                 lowerValue = Integer.valueOf(lowerKey);
7209                 assertEquals(value + 1, lowerValue);
7210             } else {
7211                 assertNull(lowerKey);
7212             }
7213         }
7214 
7215         key = new Integer(0).toString();
7216         lowerKey = (String) descendingKeySet.lower(key);
7217         assertEquals(101, Integer.parseInt(lowerKey));
7218 
7219         key = new Integer(2).toString();
7220         lowerKey = (String) descendingKeySet.lower(key);
7221         assertNull(lowerKey);
7222 
7223         keySet = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
7224                 .navigableKeySet();
7225         descendingKeySet = keySet.descendingSet();
7226         iterator = descendingKeySet.iterator();
7227         while (iterator.hasNext()) {
7228             key = (String) iterator.next();
7229             value = Integer.valueOf(key);
7230             lowerKey = (String) descendingKeySet.lower(key);
7231             if (value < 108) {
7232                 lowerValue = Integer.valueOf(lowerKey);
7233                 assertEquals(value + 1, lowerValue);
7234             } else {
7235                 assertNull(lowerKey);
7236             }
7237         }
7238 
7239         key = new Integer(0).toString();
7240         lowerKey = (String) descendingKeySet.lower(key);
7241         assertEquals(100, Integer.parseInt(lowerKey));
7242 
7243         key = new Integer(2).toString();
7244         lowerKey = (String) descendingKeySet.lower(key);
7245         assertNull(lowerKey);
7246 
7247         keySet = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
7248                 .navigableKeySet();
7249         descendingKeySet = keySet.descendingSet();
7250         iterator = descendingKeySet.iterator();
7251         while (iterator.hasNext()) {
7252             key = (String) iterator.next();
7253             value = Integer.valueOf(key);
7254             lowerKey = (String) descendingKeySet.lower(key);
7255             if (value < 109) {
7256                 lowerValue = Integer.valueOf(lowerKey);
7257                 assertEquals(value + 1, lowerValue);
7258             } else {
7259                 assertNull(lowerKey);
7260             }
7261         }
7262     }
7263 
7264     public void test_DescendingSubMapKeySet_higher() {
7265         NavigableSet keySet, descendingKeySet;
7266         Iterator iterator;
7267         String key, higherKey;
7268         int value, higherValue;
7269 
7270         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7271         descendingKeySet = keySet.descendingSet();
7272         iterator = descendingKeySet.iterator();
7273         while (iterator.hasNext()) {
7274             key = (String) iterator.next();
7275             value = Integer.valueOf(key);
7276             higherKey = (String) descendingKeySet.higher(key);
7277             if (value > 101) {
7278                 higherValue = Integer.valueOf(higherKey);
7279                 assertEquals(value - 1, higherValue);
7280             } else {
7281                 assertNull(higherKey);
7282             }
7283         }
7284 
7285         key = new Integer(99999).toString();
7286         higherKey = (String) descendingKeySet.higher(key);
7287         assertEquals("108", higherKey);
7288 
7289         key = new Integer(-1).toString();
7290         higherKey = (String) descendingKeySet.higher(key);
7291         assertNull(higherKey);
7292 
7293         key = new Integer(100).toString();
7294         higherKey = (String) descendingKeySet.higher(key);
7295         assertNull(higherKey);
7296 
7297         key = new Integer(0).toString();
7298         higherKey = (String) descendingKeySet.higher(key);
7299         assertNull(higherKey);
7300 
7301         key = new Integer(2).toString();
7302         higherKey = (String) descendingKeySet.higher(key);
7303         assertEquals(108, Integer.parseInt(higherKey));
7304 
7305         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7306         descendingKeySet = keySet.descendingSet();
7307         iterator = descendingKeySet.iterator();
7308         while (iterator.hasNext()) {
7309             key = (String) iterator.next();
7310             value = Integer.valueOf(key);
7311             higherKey = (String) descendingKeySet.higher(key);
7312             if (value > 101) {
7313                 higherValue = Integer.valueOf(higherKey);
7314                 assertEquals(value - 1, higherValue);
7315             } else {
7316                 assertNull(higherKey);
7317             }
7318         }
7319 
7320         key = new Integer(99999).toString();
7321         higherKey = (String) descendingKeySet.higher(key);
7322         assertEquals("109", higherKey);
7323 
7324         key = new Integer(-1).toString();
7325         higherKey = (String) descendingKeySet.higher(key);
7326         assertNull(higherKey);
7327 
7328         key = new Integer(100).toString();
7329         higherKey = (String) descendingKeySet.higher(key);
7330         assertNull(higherKey);
7331 
7332         key = new Integer(2).toString();
7333         higherKey = (String) descendingKeySet.higher(key);
7334         assertEquals(109, Integer.parseInt(higherKey));
7335 
7336         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7337         descendingKeySet = keySet.descendingSet();
7338         iterator = descendingKeySet.iterator();
7339         while (iterator.hasNext()) {
7340             key = (String) iterator.next();
7341             value = Integer.valueOf(key);
7342             higherKey = (String) descendingKeySet.higher(key);
7343             if (value > 100) {
7344                 higherValue = Integer.valueOf(higherKey);
7345                 assertEquals(value - 1, higherValue);
7346             } else {
7347                 assertNull(higherKey);
7348             }
7349         }
7350 
7351         key = new Integer(99999).toString();
7352         higherKey = (String) descendingKeySet.higher(key);
7353         assertEquals("108", higherKey);
7354 
7355         key = new Integer(-1).toString();
7356         higherKey = (String) descendingKeySet.higher(key);
7357         assertNull(higherKey);
7358 
7359         key = new Integer(100).toString();
7360         higherKey = (String) descendingKeySet.higher(key);
7361         assertNull(higherKey);
7362 
7363         key = new Integer(2).toString();
7364         higherKey = (String) descendingKeySet.higher(key);
7365         assertEquals(108, Integer.parseInt(higherKey));
7366 
7367         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7368         descendingKeySet = keySet.descendingSet();
7369         iterator = descendingKeySet.iterator();
7370         while (iterator.hasNext()) {
7371             key = (String) iterator.next();
7372             value = Integer.valueOf(key);
7373             higherKey = (String) descendingKeySet.higher(key);
7374             if (value > 100) {
7375                 higherValue = Integer.valueOf(higherKey);
7376                 assertEquals(value - 1, higherValue);
7377             } else {
7378                 assertNull(higherKey);
7379             }
7380         }
7381 
7382         key = new Integer(99999).toString();
7383         higherKey = (String) descendingKeySet.higher(key);
7384         assertEquals("109", higherKey);
7385 
7386         key = new Integer(-1).toString();
7387         higherKey = (String) descendingKeySet.higher(key);
7388         assertNull(higherKey);
7389 
7390         key = new Integer(100).toString();
7391         higherKey = (String) descendingKeySet.higher(key);
7392         assertNull(higherKey);
7393 
7394         key = new Integer(2).toString();
7395         higherKey = (String) descendingKeySet.higher(key);
7396         assertEquals(109, Integer.parseInt(higherKey));
7397 
7398         key = new Integer(2).toString();
7399         keySet = tm.headMap(key, true).navigableKeySet();
7400         descendingKeySet = keySet.descendingSet();
7401         iterator = descendingKeySet.iterator();
7402         key = (String) iterator.next();
7403         higherKey = (String) descendingKeySet.higher(key);
7404         assertEquals(new Integer(199).toString(), higherKey);
7405         try {
7406             descendingKeySet.higher(null);
7407             fail("should throw NPE");
7408         } catch (NullPointerException e) {
7409             // Expected
7410         }
7411 
7412         key = new Integer(0).toString();
7413         String endKey = key;
7414 
7415         keySet = tm.headMap(endKey, true).navigableKeySet();
7416         descendingKeySet = keySet.descendingSet();
7417         assertNull(descendingKeySet.higher(endKey));
7418 
7419         key = new Integer(0).toString();
7420         keySet = tm.headMap(endKey, false).navigableKeySet();
7421         descendingKeySet = keySet.descendingSet();
7422         assertNull(descendingKeySet.higher(endKey));
7423 
7424         endKey = new Integer(999).toString();
7425         keySet = tm.headMap(endKey, true).navigableKeySet();
7426         descendingKeySet = keySet.descendingSet();
7427         assertEquals(new Integer(998).toString(), descendingKeySet
7428                 .higher(endKey));
7429         assertNull(descendingKeySet.higher(key));
7430 
7431         endKey = new Integer(999).toString();
7432         keySet = tm.headMap(endKey, false).navigableKeySet();
7433         descendingKeySet = keySet.descendingSet();
7434         assertEquals(new Integer(998).toString(), descendingKeySet
7435                 .higher(endKey));
7436         assertNull(descendingKeySet.higher(key));
7437 
7438         // With Comparator
7439         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
7440                 .navigableKeySet();
7441         descendingKeySet = keySet.descendingSet();
7442         iterator = descendingKeySet.iterator();
7443         while (iterator.hasNext()) {
7444             key = (String) iterator.next();
7445             value = Integer.valueOf(key);
7446             higherKey = (String) descendingKeySet.higher(key);
7447             if (value > 101) {
7448                 higherValue = Integer.valueOf(higherKey);
7449                 assertEquals(value - 1, higherValue);
7450             } else {
7451                 assertNull(higherKey);
7452             }
7453         }
7454 
7455         key = new Integer(99999).toString();
7456         higherKey = (String) descendingKeySet.higher(key);
7457         assertEquals("108", higherKey);
7458 
7459         key = new Integer(-1).toString();
7460         higherKey = (String) descendingKeySet.higher(key);
7461         assertNull(higherKey);
7462 
7463         key = new Integer(100).toString();
7464         higherKey = (String) descendingKeySet.higher(key);
7465         assertNull(higherKey);
7466 
7467         key = new Integer(0).toString();
7468         higherKey = (String) descendingKeySet.higher(key);
7469         assertNull(higherKey);
7470 
7471         key = new Integer(2).toString();
7472         higherKey = (String) descendingKeySet.higher(key);
7473         assertEquals(108, Integer.parseInt(higherKey));
7474 
7475         keySet = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
7476                 .navigableKeySet();
7477         descendingKeySet = keySet.descendingSet();
7478         iterator = descendingKeySet.iterator();
7479         while (iterator.hasNext()) {
7480             key = (String) iterator.next();
7481             value = Integer.valueOf(key);
7482             higherKey = (String) descendingKeySet.higher(key);
7483             if (value > 101) {
7484                 higherValue = Integer.valueOf(higherKey);
7485                 assertEquals(value - 1, higherValue);
7486             } else {
7487                 assertNull(higherKey);
7488             }
7489         }
7490 
7491         key = new Integer(99999).toString();
7492         higherKey = (String) descendingKeySet.higher(key);
7493         assertEquals("109", higherKey);
7494 
7495         key = new Integer(-1).toString();
7496         higherKey = (String) descendingKeySet.higher(key);
7497         assertNull(higherKey);
7498 
7499         key = new Integer(100).toString();
7500         higherKey = (String) descendingKeySet.higher(key);
7501         assertNull(higherKey);
7502 
7503         key = new Integer(2).toString();
7504         higherKey = (String) descendingKeySet.higher(key);
7505         assertEquals(109, Integer.parseInt(higherKey));
7506 
7507         keySet = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
7508                 .navigableKeySet();
7509         descendingKeySet = keySet.descendingSet();
7510         iterator = descendingKeySet.iterator();
7511         while (iterator.hasNext()) {
7512             key = (String) iterator.next();
7513             value = Integer.valueOf(key);
7514             higherKey = (String) descendingKeySet.higher(key);
7515             if (value > 100) {
7516                 higherValue = Integer.valueOf(higherKey);
7517                 assertEquals(value - 1, higherValue);
7518             } else {
7519                 assertNull(higherKey);
7520             }
7521         }
7522 
7523         key = new Integer(99999).toString();
7524         higherKey = (String) descendingKeySet.higher(key);
7525         assertEquals("108", higherKey);
7526 
7527         key = new Integer(-1).toString();
7528         higherKey = (String) descendingKeySet.higher(key);
7529         assertNull(higherKey);
7530 
7531         key = new Integer(100).toString();
7532         higherKey = (String) descendingKeySet.higher(key);
7533         assertNull(higherKey);
7534 
7535         key = new Integer(2).toString();
7536         higherKey = (String) descendingKeySet.higher(key);
7537         assertEquals(108, Integer.parseInt(higherKey));
7538 
7539         keySet = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
7540                 .navigableKeySet();
7541         descendingKeySet = keySet.descendingSet();
7542         iterator = descendingKeySet.iterator();
7543         while (iterator.hasNext()) {
7544             key = (String) iterator.next();
7545             value = Integer.valueOf(key);
7546             higherKey = (String) descendingKeySet.higher(key);
7547             if (value > 100) {
7548                 higherValue = Integer.valueOf(higherKey);
7549                 assertEquals(value - 1, higherValue);
7550             } else {
7551                 assertNull(higherKey);
7552             }
7553         }
7554 
7555         key = new Integer(99999).toString();
7556         higherKey = (String) descendingKeySet.higher(key);
7557         assertEquals("109", higherKey);
7558 
7559         key = new Integer(-1).toString();
7560         higherKey = (String) descendingKeySet.higher(key);
7561         assertNull(higherKey);
7562 
7563         key = new Integer(100).toString();
7564         higherKey = (String) descendingKeySet.higher(key);
7565         assertNull(higherKey);
7566 
7567         key = new Integer(2).toString();
7568         higherKey = (String) descendingKeySet.higher(key);
7569         assertEquals(109, Integer.parseInt(higherKey));
7570 
7571         key = new Integer(2).toString();
7572         keySet = tm.headMap(key, true).navigableKeySet();
7573         descendingKeySet = keySet.descendingSet();
7574         iterator = descendingKeySet.iterator();
7575         key = (String) iterator.next();
7576         higherKey = (String) descendingKeySet.higher(key);
7577         assertEquals(new Integer(199).toString(), higherKey);
7578         try {
7579             descendingKeySet.higher(null);
7580             fail("should throw NPE");
7581         } catch (NullPointerException e) {
7582             // Expected
7583         }
7584 
7585         key = new Integer(0).toString();
7586         endKey = key;
7587 
7588         keySet = tm.headMap(endKey, true).navigableKeySet();
7589         descendingKeySet = keySet.descendingSet();
7590         assertNull(descendingKeySet.higher(endKey));
7591 
7592         key = new Integer(0).toString();
7593         keySet = tm.headMap(endKey, false).navigableKeySet();
7594         descendingKeySet = keySet.descendingSet();
7595         assertNull(descendingKeySet.higher(endKey));
7596 
7597         endKey = new Integer(999).toString();
7598         keySet = tm.headMap(endKey, true).navigableKeySet();
7599         descendingKeySet = keySet.descendingSet();
7600         assertEquals(new Integer(998).toString(), descendingKeySet
7601                 .higher(endKey));
7602         assertNull(descendingKeySet.higher(key));
7603 
7604         endKey = new Integer(999).toString();
7605         keySet = tm.headMap(endKey, false).navigableKeySet();
7606         descendingKeySet = keySet.descendingSet();
7607         assertEquals(new Integer(998).toString(), descendingKeySet
7608                 .higher(endKey));
7609         assertNull(descendingKeySet.higher(key));
7610     }
7611 
7612     public void test_DescendingSubMapKeySet_ceiling() {
7613         NavigableSet keySet, descendingKeySet;
7614         String[] keyArray;
7615         String key, ceilingKey;
7616 
7617         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7618         descendingKeySet = keySet.descendingSet();
7619         keyArray = (String[]) descendingKeySet
7620                 .toArray(new String[descendingKeySet.size()]);
7621         for (int i = 0, j = 108; i < keyArray.length; i++) {
7622             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7623             assertEquals(new Integer(j - i).toString(), ceilingKey);
7624         }
7625 
7626         key = new Integer(2).toString();
7627         ceilingKey = (String) descendingKeySet.ceiling(key);
7628         assertEquals(108, Integer.parseInt(ceilingKey));
7629 
7630         key = new Integer(0).toString();
7631         ceilingKey = (String) descendingKeySet.ceiling(key);
7632         assertNull(ceilingKey);
7633 
7634         key = new Integer(-1).toString();
7635         ceilingKey = (String) descendingKeySet.ceiling(key);
7636         assertNull(ceilingKey);
7637 
7638         key = new Integer(99999).toString();
7639         ceilingKey = (String) descendingKeySet.ceiling(key);
7640         assertEquals(108, Integer.parseInt(ceilingKey));
7641 
7642         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7643         descendingKeySet = keySet.descendingSet();
7644         keyArray = (String[]) descendingKeySet
7645                 .toArray(new String[descendingKeySet.size()]);
7646         for (int i = 0, j = 109; i < keyArray.length; i++) {
7647             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7648             assertEquals(new Integer(j - i).toString(), ceilingKey);
7649         }
7650 
7651         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7652         descendingKeySet = keySet.descendingSet();
7653         keyArray = (String[]) descendingKeySet
7654                 .toArray(new String[descendingKeySet.size()]);
7655         for (int i = 0, j = 108; i < keyArray.length; i++) {
7656             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7657             assertEquals(new Integer(j - i).toString(), ceilingKey);
7658         }
7659 
7660         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7661         descendingKeySet = keySet.descendingSet();
7662         keyArray = (String[]) descendingKeySet
7663                 .toArray(new String[descendingKeySet.size()]);
7664         for (int i = 0, j = 109; i < keyArray.length; i++) {
7665             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7666             assertEquals(new Integer(j - i).toString(), ceilingKey);
7667         }
7668 
7669         key = new Integer(2).toString();
7670         keySet = tm.headMap(key, true).navigableKeySet();
7671         descendingKeySet = keySet.descendingSet();
7672         Iterator iterator = descendingKeySet.iterator();
7673         assertEquals(key, descendingKeySet.ceiling(iterator.next()));
7674         try {
7675             descendingKeySet.ceiling(null);
7676             fail("should throw NPE");
7677         } catch (NullPointerException e) {
7678             // Expected
7679         }
7680 
7681         key = new Integer(0).toString();
7682         String endKey = key;
7683 
7684         keySet = tm.headMap(endKey, true).navigableKeySet();
7685         descendingKeySet = keySet.descendingSet();
7686         assertEquals(key, descendingKeySet.ceiling(endKey));
7687 
7688         key = new Integer(0).toString();
7689         keySet = tm.headMap(endKey, false).navigableKeySet();
7690         descendingKeySet = keySet.descendingSet();
7691         assertNull(descendingKeySet.ceiling(endKey));
7692 
7693         endKey = new Integer(999).toString();
7694         keySet = tm.headMap(endKey, true).navigableKeySet();
7695         descendingKeySet = keySet.descendingSet();
7696         assertEquals(new Integer(999).toString(), descendingKeySet
7697                 .ceiling(endKey));
7698         assertEquals(key, descendingKeySet.ceiling(key));
7699 
7700         endKey = new Integer(999).toString();
7701         keySet = tm.headMap(endKey, false).navigableKeySet();
7702         descendingKeySet = keySet.descendingSet();
7703         assertEquals(new Integer(998).toString(), descendingKeySet
7704                 .ceiling(endKey));
7705         assertEquals(key, descendingKeySet.ceiling(key));
7706 
7707         // With Comparator
7708         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
7709                 .navigableKeySet();
7710         descendingKeySet = keySet.descendingSet();
7711         keyArray = (String[]) descendingKeySet
7712                 .toArray(new String[descendingKeySet.size()]);
7713         for (int i = 0, j = 108; i < keyArray.length; i++) {
7714             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7715             assertEquals(new Integer(j - i).toString(), ceilingKey);
7716         }
7717 
7718         key = new Integer(2).toString();
7719         ceilingKey = (String) descendingKeySet.ceiling(key);
7720         assertEquals(108, Integer.parseInt(ceilingKey));
7721 
7722         key = new Integer(0).toString();
7723         ceilingKey = (String) descendingKeySet.ceiling(key);
7724         assertNull(ceilingKey);
7725 
7726         keySet = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
7727                 .navigableKeySet();
7728         descendingKeySet = keySet.descendingSet();
7729         keyArray = (String[]) descendingKeySet
7730                 .toArray(new String[descendingKeySet.size()]);
7731         for (int i = 0, j = 109; i < keyArray.length; i++) {
7732             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7733             assertEquals(new Integer(j - i).toString(), ceilingKey);
7734         }
7735 
7736         keySet = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
7737                 .navigableKeySet();
7738         descendingKeySet = keySet.descendingSet();
7739         keyArray = (String[]) descendingKeySet
7740                 .toArray(new String[descendingKeySet.size()]);
7741         for (int i = 0, j = 108; i < keyArray.length; i++) {
7742             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7743             assertEquals(new Integer(j - i).toString(), ceilingKey);
7744         }
7745 
7746         keySet = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
7747                 .navigableKeySet();
7748         descendingKeySet = keySet.descendingSet();
7749         keyArray = (String[]) descendingKeySet
7750                 .toArray(new String[descendingKeySet.size()]);
7751         for (int i = 0, j = 109; i < keyArray.length; i++) {
7752             ceilingKey = (String) descendingKeySet.ceiling(keyArray[i]);
7753             assertEquals(new Integer(j - i).toString(), ceilingKey);
7754         }
7755     }
7756 
7757     public void test_DescendingSubMapKeySet_floor() {
7758         NavigableSet keySet, descendingKeySet;
7759         String[] keyArray;
7760         String floorKey;
7761 
7762         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7763         descendingKeySet = keySet.descendingSet();
7764         keyArray = (String[]) descendingKeySet
7765                 .toArray(new String[descendingKeySet.size()]);
7766         for (int i = 0, j = 108; i < keyArray.length; i++) {
7767             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7768             assertEquals(new Integer(j - i).toString(), floorKey);
7769         }
7770 
7771         String key = new Integer(0).toString();
7772         floorKey = (String) descendingKeySet.floor(key);
7773         assertEquals(101, Integer.parseInt(floorKey));
7774 
7775         key = new Integer(2).toString();
7776         floorKey = (String) descendingKeySet.floor(key);
7777         assertNull(floorKey);
7778 
7779         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7780         descendingKeySet = keySet.descendingSet();
7781         keyArray = (String[]) descendingKeySet
7782                 .toArray(new String[descendingKeySet.size()]);
7783         for (int i = 0, j = 109; i < keyArray.length; i++) {
7784             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7785             assertEquals(new Integer(j - i).toString(), floorKey);
7786         }
7787 
7788         key = new Integer(0).toString();
7789         floorKey = (String) descendingKeySet.floor(key);
7790         assertEquals(101, Integer.parseInt(floorKey));
7791 
7792         key = new Integer(2).toString();
7793         floorKey = (String) descendingKeySet.floor(key);
7794         assertNull(floorKey);
7795 
7796         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7797         descendingKeySet = keySet.descendingSet();
7798         keyArray = (String[]) descendingKeySet
7799                 .toArray(new String[descendingKeySet.size()]);
7800         for (int i = 0, j = 108; i < keyArray.length; i++) {
7801             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7802             assertEquals(new Integer(j - i).toString(), floorKey);
7803         }
7804 
7805         key = new Integer(0).toString();
7806         floorKey = (String) descendingKeySet.floor(key);
7807         assertEquals(100, Integer.parseInt(floorKey));
7808 
7809         key = new Integer(2).toString();
7810         floorKey = (String) descendingKeySet.floor(key);
7811         assertNull(floorKey);
7812 
7813         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7814         descendingKeySet = keySet.descendingSet();
7815         keyArray = (String[]) descendingKeySet
7816                 .toArray(new String[descendingKeySet.size()]);
7817         for (int i = 0, j = 109; i < keyArray.length; i++) {
7818             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7819             assertEquals(new Integer(j - i).toString(), floorKey);
7820         }
7821 
7822         key = new Integer(0).toString();
7823         floorKey = (String) descendingKeySet.floor(key);
7824         assertEquals(100, Integer.parseInt(floorKey));
7825 
7826         key = new Integer(2).toString();
7827         floorKey = (String) descendingKeySet.floor(key);
7828         assertNull(floorKey);
7829 
7830         key = new Integer(2).toString();
7831         keySet = tm.headMap(key, true).navigableKeySet();
7832         descendingKeySet = keySet.descendingSet();
7833         Iterator iterator = descendingKeySet.iterator();
7834         assertEquals(key, descendingKeySet.floor(iterator.next()));
7835         try {
7836             descendingKeySet.floor(null);
7837             fail("should throw NPE");
7838         } catch (NullPointerException e) {
7839             // Expected
7840         }
7841 
7842         key = new Integer(0).toString();
7843         String endKey = key;
7844 
7845         keySet = tm.headMap(endKey, true).navigableKeySet();
7846         descendingKeySet = keySet.descendingSet();
7847         assertEquals(key, descendingKeySet.floor(endKey));
7848 
7849         key = new Integer(0).toString();
7850         keySet = tm.headMap(endKey, false).navigableKeySet();
7851         descendingKeySet = keySet.descendingSet();
7852         assertNull(descendingKeySet.floor(endKey));
7853 
7854         endKey = new Integer(999).toString();
7855         keySet = tm.headMap(endKey, true).navigableKeySet();
7856         descendingKeySet = keySet.descendingSet();
7857         assertEquals(new Integer(999).toString(), descendingKeySet
7858                 .floor(endKey));
7859         assertEquals(key, descendingKeySet.floor(key));
7860 
7861         endKey = new Integer(999).toString();
7862         keySet = tm.headMap(endKey, false).navigableKeySet();
7863         descendingKeySet = keySet.descendingSet();
7864         assertNull(descendingKeySet.floor(endKey));
7865         assertEquals(key, descendingKeySet.floor(key));
7866 
7867         // With Comparator
7868         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
7869                 .navigableKeySet();
7870         descendingKeySet = keySet.descendingSet();
7871         keyArray = (String[]) descendingKeySet
7872                 .toArray(new String[descendingKeySet.size()]);
7873         for (int i = 0, j = 108; i < keyArray.length; i++) {
7874             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7875             assertEquals(new Integer(j - i).toString(), floorKey);
7876         }
7877 
7878         key = new Integer(0).toString();
7879         floorKey = (String) descendingKeySet.floor(key);
7880         assertEquals(101, Integer.parseInt(floorKey));
7881 
7882         key = new Integer(2).toString();
7883         floorKey = (String) descendingKeySet.floor(key);
7884         assertNull(floorKey);
7885 
7886         keySet = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
7887                 .navigableKeySet();
7888         descendingKeySet = keySet.descendingSet();
7889         keyArray = (String[]) descendingKeySet
7890                 .toArray(new String[descendingKeySet.size()]);
7891         for (int i = 0, j = 109; i < keyArray.length; i++) {
7892             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7893             assertEquals(new Integer(j - i).toString(), floorKey);
7894         }
7895 
7896         key = new Integer(0).toString();
7897         floorKey = (String) descendingKeySet.floor(key);
7898         assertEquals(101, Integer.parseInt(floorKey));
7899 
7900         key = new Integer(2).toString();
7901         floorKey = (String) descendingKeySet.floor(key);
7902         assertNull(floorKey);
7903 
7904         keySet = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
7905                 .navigableKeySet();
7906         descendingKeySet = keySet.descendingSet();
7907         keyArray = (String[]) descendingKeySet
7908                 .toArray(new String[descendingKeySet.size()]);
7909         for (int i = 0, j = 108; i < keyArray.length; i++) {
7910             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7911             assertEquals(new Integer(j - i).toString(), floorKey);
7912         }
7913 
7914         key = new Integer(0).toString();
7915         floorKey = (String) descendingKeySet.floor(key);
7916         assertEquals(100, Integer.parseInt(floorKey));
7917 
7918         key = new Integer(2).toString();
7919         floorKey = (String) descendingKeySet.floor(key);
7920         assertNull(floorKey);
7921 
7922         keySet = ((NavigableMap) subMap_startIncluded_endIncluded)
7923                 .navigableKeySet();
7924         descendingKeySet = keySet.descendingSet();
7925         keyArray = (String[]) descendingKeySet
7926                 .toArray(new String[descendingKeySet.size()]);
7927         for (int i = 0, j = 109; i < keyArray.length; i++) {
7928             floorKey = (String) descendingKeySet.floor(keyArray[i]);
7929             assertEquals(new Integer(j - i).toString(), floorKey);
7930         }
7931 
7932         key = new Integer(0).toString();
7933         floorKey = (String) descendingKeySet.floor(key);
7934         assertEquals(100, Integer.parseInt(floorKey));
7935 
7936         key = new Integer(2).toString();
7937         floorKey = (String) descendingKeySet.floor(key);
7938         assertNull(floorKey);
7939     }
7940 
7941     public void test_AscendingSubMapKeySet_last() {
7942         NavigableSet keySet;
7943         String firstKey1 = new Integer(108).toString();
7944         String firstKey2 = new Integer(109).toString();
7945 
7946         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7947         assertEquals(firstKey1, keySet.last());
7948 
7949         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7950         assertEquals(firstKey2, keySet.last());
7951 
7952         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7953         assertEquals(firstKey1, keySet.last());
7954 
7955         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7956         assertEquals(firstKey2, keySet.last());
7957     }
7958 
7959     public void test_AscendingSubMapKeySet_comparator() {
7960         NavigableSet keySet;
7961         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
7962         assertNull(keySet.comparator());
7963 
7964         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
7965         assertNull(keySet.comparator());
7966 
7967         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
7968         assertNull(keySet.comparator());
7969 
7970         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
7971         assertNull(keySet.comparator());
7972 
7973         String endKey = new Integer(2).toString();
7974         keySet = tm.headMap(endKey, true).navigableKeySet();
7975         assertNull(keySet.comparator());
7976     }
7977 
7978     public void test_AscendingSubMapKeySet_pollFirst_startExcluded_endExcluded() {
7979         NavigableSet keySet = navigableMap_startExcluded_endExcluded
7980                 .navigableKeySet();
7981         Iterator iterator = keySet.iterator();
7982         assertEquals(8, keySet.size());
7983         for (int value = 101; value < 109; value++) {
7984             assertEquals(new Integer(value).toString(), keySet.pollFirst());
7985         }
7986         assertEquals(0, keySet.size());
7987         assertNull(keySet.pollFirst());
7988     }
7989 
7990     public void test_AscendingSubMapKeySet_pollFirst_startExcluded_endIncluded() {
7991         NavigableSet keySet = navigableMap_startExcluded_endIncluded
7992                 .navigableKeySet();
7993         Iterator iterator = keySet.iterator();
7994         assertEquals(9, keySet.size());
7995         for (int value = 101; value < 110; value++) {
7996             assertEquals(new Integer(value).toString(), keySet.pollFirst());
7997         }
7998         assertEquals(0, keySet.size());
7999         assertNull(keySet.pollFirst());
8000     }
8001 
8002     public void test_AscendingSubMapKeySet_pollFirst_startIncluded_endExcluded() {
8003         NavigableSet keySet = navigableMap_startIncluded_endExcluded
8004                 .navigableKeySet();
8005         Iterator iterator = keySet.iterator();
8006         assertEquals(9, keySet.size());
8007         for (int value = 100; value < 109; value++) {
8008             assertEquals(new Integer(value).toString(), keySet.pollFirst());
8009         }
8010         assertEquals(0, keySet.size());
8011         assertNull(keySet.pollFirst());
8012     }
8013 
8014     public void test_AscendingSubMapKeySet_pollFirst_startIncluded_endIncluded() {
8015         NavigableSet keySet = navigableMap_startIncluded_endIncluded
8016                 .navigableKeySet();
8017         Iterator iterator = keySet.iterator();
8018         assertEquals(10, keySet.size());
8019         for (int value = 100; value < 110; value++) {
8020             assertEquals(new Integer(value).toString(), keySet.pollFirst());
8021         }
8022         assertEquals(0, keySet.size());
8023         assertNull(keySet.pollFirst());
8024     }
8025 
8026     public void test_AscendingSubMapKeySet_pollFirst() {
8027         String endKey = new Integer(2).toString();
8028         NavigableSet keySet = tm.headMap(endKey, true).navigableKeySet();
8029         assertEquals(new Integer(0).toString(), keySet.pollFirst());
8030 
8031         keySet = tm.tailMap(endKey, true).navigableKeySet();
8032         assertEquals(new Integer(2).toString(), keySet.pollFirst());
8033     }
8034 
8035     public void test_AscendingSubMapKeySet_pollLast_startExcluded_endExcluded() {
8036         NavigableSet keySet = navigableMap_startExcluded_endExcluded
8037                 .navigableKeySet();
8038         Iterator iterator = keySet.iterator();
8039         assertEquals(8, keySet.size());
8040         for (int value = 108; value > 100; value--) {
8041             assertEquals(new Integer(value).toString(), keySet.pollLast());
8042         }
8043         assertEquals(0, keySet.size());
8044         assertNull(keySet.pollLast());
8045     }
8046 
8047     public void test_AscendingSubMapKeySet_pollLast_startExcluded_endIncluded() {
8048         NavigableSet keySet = navigableMap_startExcluded_endIncluded
8049                 .navigableKeySet();
8050         Iterator iterator = keySet.iterator();
8051         assertEquals(9, keySet.size());
8052         for (int value = 109; value > 100; value--) {
8053             assertEquals(new Integer(value).toString(), keySet.pollLast());
8054         }
8055         assertEquals(0, keySet.size());
8056         assertNull(keySet.pollLast());
8057     }
8058 
8059     public void test_AscendingSubMapKeySet_pollLast_startIncluded_endExcluded() {
8060         NavigableSet keySet = navigableMap_startIncluded_endExcluded
8061                 .navigableKeySet();
8062         Iterator iterator = keySet.iterator();
8063         assertEquals(9, keySet.size());
8064         for (int value = 108; value > 99; value--) {
8065             assertEquals(new Integer(value).toString(), keySet.pollLast());
8066         }
8067         assertEquals(0, keySet.size());
8068         assertNull(keySet.pollLast());
8069     }
8070 
8071     public void test_AscendingSubMapKeySet_pollLast_startIncluded_endIncluded() {
8072         NavigableSet keySet = navigableMap_startIncluded_endIncluded
8073                 .navigableKeySet();
8074         Iterator iterator = keySet.iterator();
8075         assertEquals(10, keySet.size());
8076         for (int value = 109; value > 99; value--) {
8077             assertEquals(new Integer(value).toString(), keySet.pollLast());
8078         }
8079         assertEquals(0, keySet.size());
8080         assertNull(keySet.pollLast());
8081     }
8082 
8083     public void test_AscendingSubMapKeySet_pollLast() {
8084         String endKey = new Integer(2).toString();
8085         NavigableSet keySet = tm.headMap(endKey, true).navigableKeySet();
8086         assertEquals(new Integer(2).toString(), keySet.pollLast());
8087 
8088         keySet = tm.tailMap(endKey, true).navigableKeySet();
8089         assertEquals(new Integer(999).toString(), keySet.pollLast());
8090     }
8091 
8092     public void test_AscendingSubMapKeySet_descendingIterator() {
8093         NavigableSet keySet;
8094         Iterator iterator;
8095 
8096         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
8097         iterator = keySet.descendingIterator();
8098         for (int value = 108; value > 100; value--) {
8099             assertTrue(iterator.hasNext());
8100             assertEquals(new Integer(value).toString(), iterator.next());
8101         }
8102         assertFalse(iterator.hasNext());
8103         try {
8104             iterator.next();
8105             fail("should throw NoSuchElementException");
8106         } catch (NoSuchElementException e) {
8107             // Expected
8108         }
8109 
8110         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
8111         iterator = keySet.descendingIterator();
8112         for (int value = 109; value > 100; value--) {
8113             assertTrue(iterator.hasNext());
8114             assertEquals(new Integer(value).toString(), iterator.next());
8115         }
8116         assertFalse(iterator.hasNext());
8117         try {
8118             iterator.next();
8119             fail("should throw NoSuchElementException");
8120         } catch (NoSuchElementException e) {
8121             // Expected
8122         }
8123 
8124         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
8125         iterator = keySet.descendingIterator();
8126         for (int value = 108; value > 99; value--) {
8127             assertTrue(iterator.hasNext());
8128             assertEquals(new Integer(value).toString(), iterator.next());
8129         }
8130         assertFalse(iterator.hasNext());
8131         try {
8132             iterator.next();
8133             fail("should throw NoSuchElementException");
8134         } catch (NoSuchElementException e) {
8135             // Expected
8136         }
8137 
8138         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
8139         iterator = keySet.descendingIterator();
8140         for (int value = 109; value > 99; value--) {
8141             assertTrue(iterator.hasNext());
8142             assertEquals(new Integer(value).toString(), iterator.next());
8143         }
8144         assertFalse(iterator.hasNext());
8145         try {
8146             iterator.next();
8147             fail("should throw NoSuchElementException");
8148         } catch (NoSuchElementException e) {
8149             // Expected
8150         }
8151 
8152         String endKey = new Integer(2).toString();
8153         keySet = tm.headMap(endKey, true).navigableKeySet();
8154         iterator = keySet.descendingIterator();
8155         assertEquals(new Integer(2).toString(), iterator.next());
8156         assertEquals(new Integer(199).toString(), iterator.next());
8157     }
8158 
8159     public void test_AscendingSubMapKeySet_descendingSet() {
8160         NavigableSet keySet, descendingSet;
8161         Iterator iterator;
8162 
8163         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet()
8164                 .descendingSet();
8165         descendingSet = keySet.descendingSet();
8166         iterator = descendingSet.iterator();
8167         for (int value = 101; value < 109; value++) {
8168             assertTrue(iterator.hasNext());
8169             assertEquals(new Integer(value).toString(), iterator.next());
8170         }
8171         assertFalse(iterator.hasNext());
8172         try {
8173             iterator.next();
8174             fail("should throw NoSuchElementException");
8175         } catch (NoSuchElementException e) {
8176             // Expected
8177         }
8178 
8179         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet()
8180                 .descendingSet();
8181         descendingSet = keySet.descendingSet();
8182         iterator = descendingSet.iterator();
8183         for (int value = 101; value < 110; value++) {
8184             assertTrue(iterator.hasNext());
8185             assertEquals(new Integer(value).toString(), iterator.next());
8186         }
8187         assertFalse(iterator.hasNext());
8188         try {
8189             iterator.next();
8190             fail("should throw NoSuchElementException");
8191         } catch (NoSuchElementException e) {
8192             // Expected
8193         }
8194 
8195         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet()
8196                 .descendingSet();
8197         descendingSet = keySet.descendingSet();
8198         iterator = descendingSet.iterator();
8199         for (int value = 100; value < 109; value++) {
8200             assertTrue(iterator.hasNext());
8201             assertEquals(new Integer(value).toString(), iterator.next());
8202         }
8203         assertFalse(iterator.hasNext());
8204         try {
8205             iterator.next();
8206             fail("should throw NoSuchElementException");
8207         } catch (NoSuchElementException e) {
8208             // Expected
8209         }
8210 
8211         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet()
8212                 .descendingSet();
8213         descendingSet = keySet.descendingSet();
8214         iterator = descendingSet.iterator();
8215         for (int value = 100; value < 110; value++) {
8216             assertTrue(iterator.hasNext());
8217             assertEquals(new Integer(value).toString(), iterator.next());
8218         }
8219         assertFalse(iterator.hasNext());
8220         try {
8221             iterator.next();
8222             fail("should throw NoSuchElementException");
8223         } catch (NoSuchElementException e) {
8224             // Expected
8225         }
8226 
8227         String endKey = new Integer(1).toString();
8228         keySet = tm.headMap(endKey, true).navigableKeySet();
8229         descendingSet = keySet.descendingSet();
8230         iterator = descendingSet.iterator();
8231         assertEquals(new Integer(1).toString(), iterator.next());
8232         assertEquals(new Integer(0).toString(), iterator.next());
8233     }
8234 
8235     public void test_AscendingSubMapKeySet_headSet() {
8236         NavigableSet keySet;
8237         SortedSet headSet;
8238         String endKey, key;
8239         Iterator iterator;
8240 
8241         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
8242         endKey = new Integer(99).toString();
8243         try {
8244             keySet.headSet(endKey);
8245             fail("should throw IllegalArgumentException");
8246         } catch (IllegalArgumentException e) {
8247             // Expected
8248         }
8249         try {
8250             keySet.headSet(endKey, false);
8251             fail("should throw IllegalArgumentException");
8252         } catch (IllegalArgumentException e) {
8253             // Expected
8254         }
8255         try {
8256             keySet.headSet(endKey, true);
8257             fail("should throw IllegalArgumentException");
8258         } catch (IllegalArgumentException e) {
8259             // Expected
8260         }
8261 
8262         endKey = new Integer(100).toString();
8263         try {
8264             keySet.headSet(endKey, false);
8265             fail("should throw IllegalArgumentException");
8266         } catch (IllegalArgumentException e) {
8267             // Expected
8268         }
8269 
8270         try {
8271             keySet.headSet(endKey);
8272             fail("should throw IllegalArgumentException");
8273         } catch (IllegalArgumentException e) {
8274             // Expected
8275         }
8276 
8277         try {
8278             keySet.headSet(endKey, true);
8279             fail("should throw IllegalArgumentException");
8280         } catch (IllegalArgumentException e) {
8281             // Expected
8282         }
8283 
8284         endKey = new Integer(101).toString();
8285         assertEquals(0, keySet.headSet(endKey).size());
8286         assertEquals(0, keySet.headSet(endKey, false).size());
8287         assertEquals(1, keySet.headSet(endKey, true).size());
8288 
8289         for (int i = 102; i < 109; i++) {
8290             endKey = new Integer(i).toString();
8291             headSet = keySet.headSet(endKey);
8292             iterator = headSet.iterator();
8293             int j;
8294             for (j = 101; iterator.hasNext(); j++) {
8295                 key = (String) iterator.next();
8296                 assertEquals(new Integer(j).toString(), key);
8297             }
8298             assertEquals(i, j);
8299 
8300             headSet = keySet.headSet(endKey, false);
8301             iterator = headSet.iterator();
8302             for (j = 101; iterator.hasNext(); j++) {
8303                 key = (String) iterator.next();
8304                 assertEquals(new Integer(j).toString(), key);
8305             }
8306             assertEquals(i, j);
8307 
8308             headSet = keySet.headSet(endKey, true);
8309             iterator = headSet.iterator();
8310             for (j = 101; iterator.hasNext(); j++) {
8311                 key = (String) iterator.next();
8312                 assertEquals(new Integer(j).toString(), key);
8313             }
8314             assertEquals(i + 1, j);
8315         }
8316 
8317         endKey = new Integer(109).toString();
8318         headSet = keySet.headSet(endKey);
8319         iterator = headSet.iterator();
8320         int index;
8321         for (index = 101; iterator.hasNext(); index++) {
8322             key = (String) iterator.next();
8323             assertEquals(new Integer(index).toString(), key);
8324         }
8325         assertEquals(109, index);
8326 
8327         headSet = keySet.headSet(endKey, false);
8328         iterator = headSet.iterator();
8329         for (index = 101; iterator.hasNext(); index++) {
8330             key = (String) iterator.next();
8331             assertEquals(new Integer(index).toString(), key);
8332         }
8333         assertEquals(109, index);
8334 
8335         try {
8336             keySet.headSet(endKey, true);
8337             fail("should throw IllegalArgumentException");
8338         } catch (IllegalArgumentException e) {
8339             // Expected
8340         }
8341 
8342         endKey = new Integer(110).toString();
8343         try {
8344             keySet.headSet(endKey);
8345             fail("should throw IllegalArgumentException");
8346         } catch (IllegalArgumentException e) {
8347             // Expected
8348         }
8349         try {
8350             keySet.headSet(endKey, true);
8351             fail("should throw IllegalArgumentException");
8352         } catch (IllegalArgumentException e) {
8353             // Expected
8354         }
8355         try {
8356             keySet.headSet(endKey, false);
8357             fail("should throw IllegalArgumentException");
8358         } catch (IllegalArgumentException e) {
8359             // Expected
8360         }
8361 
8362         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
8363         endKey = new Integer(99).toString();
8364         try {
8365             keySet.headSet(endKey);
8366             fail("should throw IllegalArgumentException");
8367         } catch (IllegalArgumentException e) {
8368             // Expected
8369         }
8370         try {
8371             keySet.headSet(endKey, true);
8372             fail("should throw IllegalArgumentException");
8373         } catch (IllegalArgumentException e) {
8374             // Expected
8375         }
8376         try {
8377             keySet.headSet(endKey, false);
8378             fail("should throw IllegalArgumentException");
8379         } catch (IllegalArgumentException e) {
8380             // Expected
8381         }
8382 
8383         endKey = new Integer(100).toString();
8384         try {
8385             keySet.headSet(endKey);
8386             fail("should throw IllegalArgumentException");
8387         } catch (IllegalArgumentException e) {
8388             // Expected
8389         }
8390 
8391         try {
8392             keySet.headSet(endKey, false);
8393             fail("should throw IllegalArgumentException");
8394         } catch (IllegalArgumentException e) {
8395             // Expected
8396         }
8397 
8398         try {
8399             keySet.headSet(endKey, true);
8400             fail("should throw IllegalArgumentException");
8401         } catch (IllegalArgumentException e) {
8402             // Expected
8403         }
8404 
8405         endKey = new Integer(101).toString();
8406         assertEquals(0, keySet.headSet(endKey).size());
8407         assertEquals(0, keySet.headSet(endKey).size());
8408         assertEquals(1, keySet.headSet(endKey, true).size());
8409 
8410         for (int i = 102; i < 109; i++) {
8411             endKey = new Integer(i).toString();
8412 
8413             headSet = keySet.headSet(endKey);
8414             iterator = headSet.iterator();
8415             int j;
8416             for (j = 101; iterator.hasNext(); j++) {
8417                 key = (String) iterator.next();
8418                 assertEquals(new Integer(j).toString(), key);
8419             }
8420             assertEquals(i, j);
8421 
8422             headSet = keySet.headSet(endKey, false);
8423             iterator = headSet.iterator();
8424             for (j = 101; iterator.hasNext(); j++) {
8425                 key = (String) iterator.next();
8426                 assertEquals(new Integer(j).toString(), key);
8427             }
8428             assertEquals(i, j);
8429 
8430             headSet = keySet.headSet(endKey, true);
8431             iterator = headSet.iterator();
8432             for (j = 101; iterator.hasNext(); j++) {
8433                 key = (String) iterator.next();
8434                 assertEquals(new Integer(j).toString(), key);
8435             }
8436             assertEquals(i + 1, j);
8437         }
8438 
8439         endKey = new Integer(109).toString();
8440         headSet = keySet.headSet(endKey);
8441         iterator = headSet.iterator();
8442         for (index = 101; iterator.hasNext(); index++) {
8443             key = (String) iterator.next();
8444             assertEquals(new Integer(index).toString(), key);
8445         }
8446         assertEquals(109, index);
8447 
8448         headSet = keySet.headSet(endKey, false);
8449         iterator = headSet.iterator();
8450         for (index = 101; iterator.hasNext(); index++) {
8451             key = (String) iterator.next();
8452             assertEquals(new Integer(index).toString(), key);
8453         }
8454         assertEquals(109, index);
8455 
8456         headSet = keySet.headSet(endKey, true);
8457         iterator = headSet.iterator();
8458         for (index = 101; iterator.hasNext(); index++) {
8459             key = (String) iterator.next();
8460             assertEquals(new Integer(index).toString(), key);
8461         }
8462         assertEquals(110, index);
8463 
8464         endKey = new Integer(110).toString();
8465         try {
8466             keySet.headSet(endKey);
8467             fail("should throw IllegalArgumentException");
8468         } catch (IllegalArgumentException e) {
8469             // Expected
8470         }
8471         try {
8472             keySet.headSet(endKey, false);
8473             fail("should throw IllegalArgumentException");
8474         } catch (IllegalArgumentException e) {
8475             // Expected
8476         }
8477         try {
8478             keySet.headSet(endKey, true);
8479             fail("should throw IllegalArgumentException");
8480         } catch (IllegalArgumentException e) {
8481             // Expected
8482         }
8483 
8484         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
8485         endKey = new Integer(99).toString();
8486         try {
8487             keySet.headSet(endKey);
8488             fail("should throw IllegalArgumentException");
8489         } catch (IllegalArgumentException e) {
8490             // Expected
8491         }
8492         try {
8493             keySet.headSet(endKey, false);
8494             fail("should throw IllegalArgumentException");
8495         } catch (IllegalArgumentException e) {
8496             // Expected
8497         }
8498         try {
8499             keySet.headSet(endKey, true);
8500             fail("should throw IllegalArgumentException");
8501         } catch (IllegalArgumentException e) {
8502             // Expected
8503         }
8504 
8505         endKey = new Integer(100).toString();
8506         assertEquals(0, keySet.headSet(endKey).size());
8507         assertEquals(0, keySet.headSet(endKey, false).size());
8508         assertEquals(1, keySet.headSet(endKey, true).size());
8509 
8510         endKey = new Integer(101).toString();
8511         headSet = keySet.headSet(endKey);
8512         iterator = headSet.iterator();
8513         for (index = 100; iterator.hasNext(); index++) {
8514             key = (String) iterator.next();
8515             assertEquals(new Integer(index).toString(), key);
8516         }
8517         assertEquals(101, index);
8518 
8519         headSet = keySet.headSet(endKey, false);
8520         iterator = headSet.iterator();
8521         for (index = 100; iterator.hasNext(); index++) {
8522             key = (String) iterator.next();
8523             assertEquals(new Integer(index).toString(), key);
8524         }
8525         assertEquals(101, index);
8526 
8527         headSet = keySet.headSet(endKey, true);
8528         iterator = headSet.iterator();
8529         for (index = 100; iterator.hasNext(); index++) {
8530             key = (String) iterator.next();
8531             assertEquals(new Integer(index).toString(), key);
8532         }
8533         assertEquals(102, index);
8534 
8535         for (int i = 102; i < 109; i++) {
8536             endKey = new Integer(i).toString();
8537 
8538             headSet = keySet.headSet(endKey);
8539             iterator = headSet.iterator();
8540             int j;
8541             for (j = 100; iterator.hasNext(); j++) {
8542                 key = (String) iterator.next();
8543                 assertEquals(new Integer(j).toString(), key);
8544             }
8545             assertEquals(i, j);
8546 
8547             headSet = keySet.headSet(endKey, false);
8548             iterator = headSet.iterator();
8549             for (j = 100; iterator.hasNext(); j++) {
8550                 key = (String) iterator.next();
8551                 assertEquals(new Integer(j).toString(), key);
8552             }
8553             assertEquals(i, j);
8554 
8555             headSet = keySet.headSet(endKey, true);
8556             iterator = headSet.iterator();
8557             for (j = 100; iterator.hasNext(); j++) {
8558                 key = (String) iterator.next();
8559                 assertEquals(new Integer(j).toString(), key);
8560             }
8561             assertEquals(i + 1, j);
8562         }
8563 
8564         endKey = new Integer(109).toString();
8565         headSet = keySet.headSet(endKey);
8566         iterator = headSet.iterator();
8567         for (index = 100; iterator.hasNext(); index++) {
8568             key = (String) iterator.next();
8569             assertEquals(new Integer(index).toString(), key);
8570         }
8571         assertEquals(109, index);
8572 
8573         headSet = keySet.headSet(endKey, false);
8574         iterator = headSet.iterator();
8575         for (index = 100; iterator.hasNext(); index++) {
8576             key = (String) iterator.next();
8577             assertEquals(new Integer(index).toString(), key);
8578         }
8579         assertEquals(109, index);
8580 
8581         try {
8582             keySet.headSet(endKey, true);
8583             fail("should throw IllegalArgumentException");
8584         } catch (IllegalArgumentException e) {
8585             // Expected
8586         }
8587 
8588         endKey = new Integer(110).toString();
8589         try {
8590             keySet.headSet(endKey);
8591             fail("should throw IllegalArgumentException");
8592         } catch (IllegalArgumentException e) {
8593             // Expected
8594         }
8595 
8596         try {
8597             keySet.headSet(endKey, false);
8598             fail("should throw IllegalArgumentException");
8599         } catch (IllegalArgumentException e) {
8600             // Expected
8601         }
8602 
8603         try {
8604             keySet.headSet(endKey, true);
8605             fail("should throw IllegalArgumentException");
8606         } catch (IllegalArgumentException e) {
8607             // Expected
8608         }
8609 
8610         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
8611         endKey = new Integer(99).toString();
8612         try {
8613             keySet.headSet(endKey);
8614             fail("should throw IllegalArgumentException");
8615         } catch (IllegalArgumentException e) {
8616             // Expected
8617         }
8618         try {
8619             keySet.headSet(endKey, false);
8620             fail("should throw IllegalArgumentException");
8621         } catch (IllegalArgumentException e) {
8622             // Expected
8623         }
8624         try {
8625             keySet.headSet(endKey, true);
8626             fail("should throw IllegalArgumentException");
8627         } catch (IllegalArgumentException e) {
8628             // Expected
8629         }
8630 
8631         endKey = new Integer(100).toString();
8632         assertEquals(0, keySet.headSet(endKey).size());
8633         assertEquals(0, keySet.headSet(endKey, false).size());
8634         assertEquals(1, keySet.headSet(endKey, true).size());
8635 
8636         endKey = new Integer(101).toString();
8637         headSet = keySet.headSet(endKey);
8638         iterator = headSet.iterator();
8639         for (index = 100; iterator.hasNext(); index++) {
8640             key = (String) iterator.next();
8641             assertEquals(new Integer(index).toString(), key);
8642         }
8643         assertEquals(101, index);
8644 
8645         headSet = keySet.headSet(endKey, false);
8646         iterator = headSet.iterator();
8647         for (index = 100; iterator.hasNext(); index++) {
8648             key = (String) iterator.next();
8649             assertEquals(new Integer(index).toString(), key);
8650         }
8651         assertEquals(101, index);
8652 
8653         headSet = keySet.headSet(endKey, true);
8654         iterator = headSet.iterator();
8655         for (index = 100; iterator.hasNext(); index++) {
8656             key = (String) iterator.next();
8657             assertEquals(new Integer(index).toString(), key);
8658         }
8659         assertEquals(102, index);
8660 
8661         for (int i = 102; i < 109; i++) {
8662             endKey = new Integer(i).toString();
8663 
8664             headSet = keySet.headSet(endKey);
8665             iterator = headSet.iterator();
8666             int j;
8667             for (j = 100; iterator.hasNext(); j++) {
8668                 key = (String) iterator.next();
8669                 assertEquals(new Integer(j).toString(), key);
8670             }
8671             assertEquals(i, j);
8672 
8673             headSet = keySet.headSet(endKey, false);
8674             iterator = headSet.iterator();
8675             for (j = 100; iterator.hasNext(); j++) {
8676                 key = (String) iterator.next();
8677                 assertEquals(new Integer(j).toString(), key);
8678             }
8679             assertEquals(i, j);
8680 
8681             headSet = keySet.headSet(endKey, true);
8682             iterator = headSet.iterator();
8683             for (j = 100; iterator.hasNext(); j++) {
8684                 key = (String) iterator.next();
8685                 assertEquals(new Integer(j).toString(), key);
8686             }
8687             assertEquals(i + 1, j);
8688         }
8689 
8690         endKey = new Integer(109).toString();
8691         headSet = keySet.headSet(endKey);
8692         iterator = headSet.iterator();
8693         for (index = 100; iterator.hasNext(); index++) {
8694             key = (String) iterator.next();
8695             assertEquals(new Integer(index).toString(), key);
8696         }
8697         assertEquals(109, index);
8698 
8699         headSet = keySet.headSet(endKey, false);
8700         iterator = headSet.iterator();
8701         for (index = 100; iterator.hasNext(); index++) {
8702             key = (String) iterator.next();
8703             assertEquals(new Integer(index).toString(), key);
8704         }
8705         assertEquals(109, index);
8706 
8707         headSet = keySet.headSet(endKey, true);
8708         iterator = headSet.iterator();
8709         for (index = 100; iterator.hasNext(); index++) {
8710             key = (String) iterator.next();
8711             assertEquals(new Integer(index).toString(), key);
8712         }
8713         assertEquals(110, index);
8714 
8715         endKey = new Integer(110).toString();
8716         try {
8717             keySet.headSet(endKey);
8718             fail("should throw IllegalArgumentException");
8719         } catch (IllegalArgumentException e) {
8720             // Expected
8721         }
8722         try {
8723             keySet.headSet(endKey, false);
8724             fail("should throw IllegalArgumentException");
8725         } catch (IllegalArgumentException e) {
8726             // Expected
8727         }
8728         try {
8729             keySet.headSet(endKey, true);
8730             fail("should throw IllegalArgumentException");
8731         } catch (IllegalArgumentException e) {
8732             // Expected
8733         }
8734 
8735         key = new Integer(1).toString();
8736         keySet = tm.headMap(key, true).navigableKeySet();
8737         iterator = keySet.iterator();
8738         iterator.next();
8739         endKey = (String) iterator.next();
8740         headSet = keySet.headSet(endKey, false);
8741         assertEquals(1, headSet.size());
8742         Iterator headSetIterator = headSet.iterator();
8743         assertEquals(new Integer(0).toString(), headSetIterator.next());
8744         assertFalse(headSetIterator.hasNext());
8745         try {
8746             headSetIterator.next();
8747             fail("should throw NoSuchElementException");
8748         } catch (NoSuchElementException e) {
8749             // Expected
8750         }
8751         try {
8752             keySet.headSet(null, false);
8753             fail("should throw NPE");
8754         } catch (NullPointerException e) {
8755             // Expected
8756         }
8757 
8758         headSet = keySet.headSet(endKey, true);
8759         assertEquals(2, headSet.size());
8760         headSetIterator = headSet.iterator();
8761         assertEquals(new Integer(0).toString(), headSetIterator.next());
8762         assertEquals(new Integer(1).toString(), headSetIterator.next());
8763         assertFalse(headSetIterator.hasNext());
8764         try {
8765             headSetIterator.next();
8766             fail("should throw NoSuchElementException");
8767         } catch (NoSuchElementException e) {
8768             // Expected
8769         }
8770         try {
8771             keySet.headSet(null, false);
8772             fail("should throw NPE");
8773         } catch (NullPointerException e) {
8774             // Expected
8775         }
8776 
8777         // With Comparator
8778         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
8779                 .navigableKeySet();
8780         endKey = new Integer(99).toString();
8781         try {
8782             keySet.headSet(endKey);
8783             fail("should throw IllegalArgumentException");
8784         } catch (IllegalArgumentException e) {
8785             // Expected
8786         }
8787         try {
8788             keySet.headSet(endKey, false);
8789             fail("should throw IllegalArgumentException");
8790         } catch (IllegalArgumentException e) {
8791             // Expected
8792         }
8793         try {
8794             keySet.headSet(endKey, true);
8795             fail("should throw IllegalArgumentException");
8796         } catch (IllegalArgumentException e) {
8797             // Expected
8798         }
8799 
8800         endKey = new Integer(100).toString();
8801         try {
8802             keySet.headSet(endKey).size();
8803             fail("should throw IllegalArgumentException");
8804         } catch (IllegalArgumentException e) {
8805             // Expected
8806         }
8807 
8808         try {
8809             keySet.headSet(endKey, false).size();
8810             fail("should throw IllegalArgumentException");
8811         } catch (IllegalArgumentException e) {
8812             // Expected
8813         }
8814 
8815         try {
8816             keySet.headSet(endKey, true).size();
8817             fail("should throw IllegalArgumentException");
8818         } catch (IllegalArgumentException e) {
8819             // Expected
8820         }
8821 
8822         endKey = new Integer(101).toString();
8823         assertEquals(0, keySet.headSet(endKey).size());
8824         assertEquals(0, keySet.headSet(endKey, false).size());
8825         assertEquals(1, keySet.headSet(endKey, true).size());
8826 
8827         for (int i = 102; i < 109; i++) {
8828             endKey = new Integer(i).toString();
8829             headSet = keySet.headSet(endKey);
8830             iterator = headSet.iterator();
8831             int j;
8832             for (j = 101; iterator.hasNext(); j++) {
8833                 key = (String) iterator.next();
8834                 assertEquals(new Integer(j).toString(), key);
8835             }
8836             assertEquals(i, j);
8837 
8838             headSet = keySet.headSet(endKey, false);
8839             iterator = headSet.iterator();
8840             for (j = 101; iterator.hasNext(); j++) {
8841                 key = (String) iterator.next();
8842                 assertEquals(new Integer(j).toString(), key);
8843             }
8844             assertEquals(i, j);
8845 
8846             headSet = keySet.headSet(endKey, true);
8847             iterator = headSet.iterator();
8848             for (j = 101; iterator.hasNext(); j++) {
8849                 key = (String) iterator.next();
8850                 assertEquals(new Integer(j).toString(), key);
8851             }
8852             assertEquals(i + 1, j);
8853         }
8854 
8855         endKey = new Integer(109).toString();
8856         headSet = keySet.headSet(endKey);
8857         iterator = headSet.iterator();
8858         for (index = 101; iterator.hasNext(); index++) {
8859             key = (String) iterator.next();
8860             assertEquals(new Integer(index).toString(), key);
8861         }
8862         assertEquals(109, index);
8863 
8864         headSet = keySet.headSet(endKey, false);
8865         iterator = headSet.iterator();
8866         for (index = 101; iterator.hasNext(); index++) {
8867             key = (String) iterator.next();
8868             assertEquals(new Integer(index).toString(), key);
8869         }
8870         assertEquals(109, index);
8871 
8872         try {
8873             keySet.headSet(endKey, true);
8874             fail("should throw IllegalArgumentException");
8875         } catch (IllegalArgumentException e) {
8876             // Expected
8877         }
8878 
8879         endKey = new Integer(110).toString();
8880         try {
8881             keySet.headSet(endKey);
8882             fail("should throw IllegalArgumentException");
8883         } catch (IllegalArgumentException e) {
8884             // Expected
8885         }
8886         try {
8887             keySet.headSet(endKey, true);
8888             fail("should throw IllegalArgumentException");
8889         } catch (IllegalArgumentException e) {
8890             // Expected
8891         }
8892         try {
8893             keySet.headSet(endKey, false);
8894             fail("should throw IllegalArgumentException");
8895         } catch (IllegalArgumentException e) {
8896             // Expected
8897         }
8898 
8899         keySet = ((NavigableMap) subMap_startExcluded_endIncluded_comparator)
8900                 .navigableKeySet();
8901         endKey = new Integer(99).toString();
8902         try {
8903             keySet.headSet(endKey);
8904             fail("should throw IllegalArgumentException");
8905         } catch (IllegalArgumentException e) {
8906             // Expected
8907         }
8908         try {
8909             keySet.headSet(endKey, true);
8910             fail("should throw IllegalArgumentException");
8911         } catch (IllegalArgumentException e) {
8912             // Expected
8913         }
8914         try {
8915             keySet.headSet(endKey, false);
8916             fail("should throw IllegalArgumentException");
8917         } catch (IllegalArgumentException e) {
8918             // Expected
8919         }
8920 
8921         endKey = new Integer(100).toString();
8922         try {
8923             keySet.headSet(endKey);
8924             fail("should throw IllegalArgumentException");
8925         } catch (IllegalArgumentException e) {
8926             // Expected
8927         }
8928 
8929         try {
8930             keySet.headSet(endKey, false);
8931             fail("should throw IllegalArgumentException");
8932         } catch (IllegalArgumentException e) {
8933             // Expected
8934         }
8935 
8936         try {
8937             keySet.headSet(endKey, true);
8938             fail("should throw IllegalArgumentException");
8939         } catch (IllegalArgumentException e) {
8940             // Expected
8941         }
8942 
8943         endKey = new Integer(101).toString();
8944         assertEquals(0, keySet.headSet(endKey).size());
8945         assertEquals(0, keySet.headSet(endKey).size());
8946         assertEquals(1, keySet.headSet(endKey, true).size());
8947 
8948         for (int i = 102; i < 109; i++) {
8949             endKey = new Integer(i).toString();
8950 
8951             headSet = keySet.headSet(endKey);
8952             iterator = headSet.iterator();
8953             int j;
8954             for (j = 101; iterator.hasNext(); j++) {
8955                 key = (String) iterator.next();
8956                 assertEquals(new Integer(j).toString(), key);
8957             }
8958             assertEquals(i, j);
8959 
8960             headSet = keySet.headSet(endKey, false);
8961             iterator = headSet.iterator();
8962             for (j = 101; iterator.hasNext(); j++) {
8963                 key = (String) iterator.next();
8964                 assertEquals(new Integer(j).toString(), key);
8965             }
8966             assertEquals(i, j);
8967 
8968             headSet = keySet.headSet(endKey, true);
8969             iterator = headSet.iterator();
8970             for (j = 101; iterator.hasNext(); j++) {
8971                 key = (String) iterator.next();
8972                 assertEquals(new Integer(j).toString(), key);
8973             }
8974             assertEquals(i + 1, j);
8975         }
8976 
8977         endKey = new Integer(109).toString();
8978         headSet = keySet.headSet(endKey);
8979         iterator = headSet.iterator();
8980         for (index = 101; iterator.hasNext(); index++) {
8981             key = (String) iterator.next();
8982             assertEquals(new Integer(index).toString(), key);
8983         }
8984         assertEquals(109, index);
8985 
8986         headSet = keySet.headSet(endKey, false);
8987         iterator = headSet.iterator();
8988         for (index = 101; iterator.hasNext(); index++) {
8989             key = (String) iterator.next();
8990             assertEquals(new Integer(index).toString(), key);
8991         }
8992         assertEquals(109, index);
8993 
8994         headSet = keySet.headSet(endKey, true);
8995         iterator = headSet.iterator();
8996         for (index = 101; iterator.hasNext(); index++) {
8997             key = (String) iterator.next();
8998             assertEquals(new Integer(index).toString(), key);
8999         }
9000         assertEquals(110, index);
9001 
9002         endKey = new Integer(110).toString();
9003         try {
9004             keySet.headSet(endKey);
9005             fail("should throw IllegalArgumentException");
9006         } catch (IllegalArgumentException e) {
9007             // Expected
9008         }
9009         try {
9010             keySet.headSet(endKey, false);
9011             fail("should throw IllegalArgumentException");
9012         } catch (IllegalArgumentException e) {
9013             // Expected
9014         }
9015         try {
9016             keySet.headSet(endKey, true);
9017             fail("should throw IllegalArgumentException");
9018         } catch (IllegalArgumentException e) {
9019             // Expected
9020         }
9021 
9022         keySet = ((NavigableMap) subMap_startIncluded_endExcluded_comparator)
9023                 .navigableKeySet();
9024         endKey = new Integer(99).toString();
9025         try {
9026             keySet.headSet(endKey);
9027             fail("should throw IllegalArgumentException");
9028         } catch (IllegalArgumentException e) {
9029             // Expected
9030         }
9031         try {
9032             keySet.headSet(endKey, false);
9033             fail("should throw IllegalArgumentException");
9034         } catch (IllegalArgumentException e) {
9035             // Expected
9036         }
9037         try {
9038             keySet.headSet(endKey, true);
9039             fail("should throw IllegalArgumentException");
9040         } catch (IllegalArgumentException e) {
9041             // Expected
9042         }
9043 
9044         endKey = new Integer(100).toString();
9045         assertEquals(0, keySet.headSet(endKey).size());
9046         assertEquals(0, keySet.headSet(endKey, false).size());
9047         assertEquals(1, keySet.headSet(endKey, true).size());
9048 
9049         endKey = new Integer(101).toString();
9050         headSet = keySet.headSet(endKey);
9051         iterator = headSet.iterator();
9052         for (index = 100; iterator.hasNext(); index++) {
9053             key = (String) iterator.next();
9054             assertEquals(new Integer(index).toString(), key);
9055         }
9056         assertEquals(101, index);
9057 
9058         headSet = keySet.headSet(endKey, false);
9059         iterator = headSet.iterator();
9060         for (index = 100; iterator.hasNext(); index++) {
9061             key = (String) iterator.next();
9062             assertEquals(new Integer(index).toString(), key);
9063         }
9064         assertEquals(101, index);
9065 
9066         headSet = keySet.headSet(endKey, true);
9067         iterator = headSet.iterator();
9068         for (index = 100; iterator.hasNext(); index++) {
9069             key = (String) iterator.next();
9070             assertEquals(new Integer(index).toString(), key);
9071         }
9072         assertEquals(102, index);
9073 
9074         for (int i = 102; i < 109; i++) {
9075             endKey = new Integer(i).toString();
9076 
9077             headSet = keySet.headSet(endKey);
9078             iterator = headSet.iterator();
9079             int j;
9080             for (j = 100; iterator.hasNext(); j++) {
9081                 key = (String) iterator.next();
9082                 assertEquals(new Integer(j).toString(), key);
9083             }
9084             assertEquals(i, j);
9085 
9086             headSet = keySet.headSet(endKey, false);
9087             iterator = headSet.iterator();
9088             for (j = 100; iterator.hasNext(); j++) {
9089                 key = (String) iterator.next();
9090                 assertEquals(new Integer(j).toString(), key);
9091             }
9092             assertEquals(i, j);
9093 
9094             headSet = keySet.headSet(endKey, true);
9095             iterator = headSet.iterator();
9096             for (j = 100; iterator.hasNext(); j++) {
9097                 key = (String) iterator.next();
9098                 assertEquals(new Integer(j).toString(), key);
9099             }
9100             assertEquals(i + 1, j);
9101         }
9102 
9103         endKey = new Integer(109).toString();
9104         headSet = keySet.headSet(endKey);
9105         iterator = headSet.iterator();
9106         for (index = 100; iterator.hasNext(); index++) {
9107             key = (String) iterator.next();
9108             assertEquals(new Integer(index).toString(), key);
9109         }
9110         assertEquals(109, index);
9111 
9112         headSet = keySet.headSet(endKey, false);
9113         iterator = headSet.iterator();
9114         for (index = 100; iterator.hasNext(); index++) {
9115             key = (String) iterator.next();
9116             assertEquals(new Integer(index).toString(), key);
9117         }
9118         assertEquals(109, index);
9119 
9120         try {
9121             keySet.headSet(endKey, true);
9122             fail("should throw IllegalArgumentException");
9123         } catch (IllegalArgumentException e) {
9124             // Expected
9125         }
9126 
9127         endKey = new Integer(110).toString();
9128         try {
9129             keySet.headSet(endKey);
9130             fail("should throw IllegalArgumentException");
9131         } catch (IllegalArgumentException e) {
9132             // Expected
9133         }
9134 
9135         try {
9136             keySet.headSet(endKey, false);
9137             fail("should throw IllegalArgumentException");
9138         } catch (IllegalArgumentException e) {
9139             // Expected
9140         }
9141 
9142         try {
9143             keySet.headSet(endKey, true);
9144             fail("should throw IllegalArgumentException");
9145         } catch (IllegalArgumentException e) {
9146             // Expected
9147         }
9148 
9149         keySet = ((NavigableMap) subMap_startIncluded_endIncluded_comparator)
9150                 .navigableKeySet();
9151         endKey = new Integer(99).toString();
9152         try {
9153             keySet.headSet(endKey);
9154             fail("should throw IllegalArgumentException");
9155         } catch (IllegalArgumentException e) {
9156             // Expected
9157         }
9158         try {
9159             keySet.headSet(endKey, false);
9160             fail("should throw IllegalArgumentException");
9161         } catch (IllegalArgumentException e) {
9162             // Expected
9163         }
9164         try {
9165             keySet.headSet(endKey, true);
9166             fail("should throw IllegalArgumentException");
9167         } catch (IllegalArgumentException e) {
9168             // Expected
9169         }
9170 
9171         endKey = new Integer(100).toString();
9172         assertEquals(0, keySet.headSet(endKey).size());
9173         assertEquals(0, keySet.headSet(endKey, false).size());
9174         assertEquals(1, keySet.headSet(endKey, true).size());
9175 
9176         endKey = new Integer(101).toString();
9177         headSet = keySet.headSet(endKey);
9178         iterator = headSet.iterator();
9179         for (index = 100; iterator.hasNext(); index++) {
9180             key = (String) iterator.next();
9181             assertEquals(new Integer(index).toString(), key);
9182         }
9183         assertEquals(101, index);
9184 
9185         headSet = keySet.headSet(endKey, false);
9186         iterator = headSet.iterator();
9187         for (index = 100; iterator.hasNext(); index++) {
9188             key = (String) iterator.next();
9189             assertEquals(new Integer(index).toString(), key);
9190         }
9191         assertEquals(101, index);
9192 
9193         headSet = keySet.headSet(endKey, true);
9194         iterator = headSet.iterator();
9195         for (index = 100; iterator.hasNext(); index++) {
9196             key = (String) iterator.next();
9197             assertEquals(new Integer(index).toString(), key);
9198         }
9199         assertEquals(102, index);
9200 
9201         for (int i = 102; i < 109; i++) {
9202             endKey = new Integer(i).toString();
9203 
9204             headSet = keySet.headSet(endKey);
9205             iterator = headSet.iterator();
9206             int j;
9207             for (j = 100; iterator.hasNext(); j++) {
9208                 key = (String) iterator.next();
9209                 assertEquals(new Integer(j).toString(), key);
9210             }
9211             assertEquals(i, j);
9212 
9213             headSet = keySet.headSet(endKey, false);
9214             iterator = headSet.iterator();
9215             for (j = 100; iterator.hasNext(); j++) {
9216                 key = (String) iterator.next();
9217                 assertEquals(new Integer(j).toString(), key);
9218             }
9219             assertEquals(i, j);
9220 
9221             headSet = keySet.headSet(endKey, true);
9222             iterator = headSet.iterator();
9223             for (j = 100; iterator.hasNext(); j++) {
9224                 key = (String) iterator.next();
9225                 assertEquals(new Integer(j).toString(), key);
9226             }
9227             assertEquals(i + 1, j);
9228         }
9229 
9230         endKey = new Integer(109).toString();
9231         headSet = keySet.headSet(endKey);
9232         iterator = headSet.iterator();
9233         for (index = 100; iterator.hasNext(); index++) {
9234             key = (String) iterator.next();
9235             assertEquals(new Integer(index).toString(), key);
9236         }
9237         assertEquals(109, index);
9238 
9239         headSet = keySet.headSet(endKey, false);
9240         iterator = headSet.iterator();
9241         for (index = 100; iterator.hasNext(); index++) {
9242             key = (String) iterator.next();
9243             assertEquals(new Integer(index).toString(), key);
9244         }
9245         assertEquals(109, index);
9246 
9247         headSet = keySet.headSet(endKey, true);
9248         iterator = headSet.iterator();
9249         for (index = 100; iterator.hasNext(); index++) {
9250             key = (String) iterator.next();
9251             assertEquals(new Integer(index).toString(), key);
9252         }
9253         assertEquals(110, index);
9254 
9255         endKey = new Integer(110).toString();
9256         try {
9257             keySet.headSet(endKey);
9258             fail("should throw IllegalArgumentException");
9259         } catch (IllegalArgumentException e) {
9260             // Expected
9261         }
9262         try {
9263             keySet.headSet(endKey, false);
9264             fail("should throw IllegalArgumentException");
9265         } catch (IllegalArgumentException e) {
9266             // Expected
9267         }
9268         try {
9269             keySet.headSet(endKey, true);
9270             fail("should throw IllegalArgumentException");
9271         } catch (IllegalArgumentException e) {
9272             // Expected
9273         }
9274 
9275         key = new Integer(1).toString();
9276         keySet = tm.headMap(key, true).navigableKeySet();
9277         iterator = keySet.iterator();
9278         iterator.next();
9279         endKey = (String) iterator.next();
9280         headSet = keySet.headSet(endKey, false);
9281         assertEquals(1, headSet.size());
9282         headSetIterator = headSet.iterator();
9283         assertEquals(new Integer(0).toString(), headSetIterator.next());
9284         assertFalse(headSetIterator.hasNext());
9285         try {
9286             headSetIterator.next();
9287             fail("should throw NoSuchElementException");
9288         } catch (NoSuchElementException e) {
9289             // Expected
9290         }
9291         try {
9292             keySet.headSet(null, false);
9293             fail("should throw NPE");
9294         } catch (NullPointerException e) {
9295             // Expected
9296         }
9297 
9298         headSet = keySet.headSet(endKey, true);
9299         assertEquals(2, headSet.size());
9300         headSetIterator = headSet.iterator();
9301         assertEquals(new Integer(0).toString(), headSetIterator.next());
9302         assertEquals(new Integer(1).toString(), headSetIterator.next());
9303         assertFalse(headSetIterator.hasNext());
9304         try {
9305             headSetIterator.next();
9306             fail("should throw NoSuchElementException");
9307         } catch (NoSuchElementException e) {
9308             // Expected
9309         }
9310         try {
9311             keySet.headSet(null, false);
9312             fail("should throw NPE");
9313         } catch (NullPointerException e) {
9314             // Expected
9315         }
9316 
9317     }
9318 
9319     public void test_AscendingSubMapKeySet_remove() {
9320         TreeMap tm_rm = new TreeMap(tm);
9321         SortedMap subMap_startExcluded_endExcluded_rm = tm_rm.subMap(
9322                 objArray[100].toString(), false, objArray[109].toString(),
9323                 false);
9324         assertNull(subMap_startExcluded_endExcluded_rm.remove("0"));
9325         try {
9326             subMap_startExcluded_endExcluded_rm.remove(null);
9327             fail("should throw NPE");
9328         } catch (Exception e) {
9329             // Expected
9330         }
9331         for (int i = 101; i < 108; i++) {
9332             assertNotNull(subMap_startExcluded_endExcluded_rm
9333                     .remove(new Integer(i).toString()));
9334         }
9335     }
9336 
9337     public void test_AscendingSubMapKeySet_tailSet() {
9338         NavigableSet keySet;
9339         SortedSet tailSet;
9340         String startKey, key;
9341         Iterator iterator;
9342 
9343         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
9344         startKey = new Integer(99).toString();
9345         try {
9346             keySet.tailSet(startKey);
9347             fail("should throw IllegalArgumentException");
9348         } catch (IllegalArgumentException e) {
9349             // Expected
9350         }
9351 
9352         try {
9353             keySet.tailSet(startKey, true);
9354             fail("should throw IllegalArgumentException");
9355         } catch (IllegalArgumentException e) {
9356             // Expected
9357         }
9358 
9359         try {
9360             keySet.tailSet(startKey, false);
9361             fail("should throw IllegalArgumentException");
9362         } catch (IllegalArgumentException e) {
9363             // Expected
9364         }
9365 
9366         startKey = new Integer(100).toString();
9367         try {
9368             keySet.tailSet(startKey);
9369             fail("should throw IllegalArgumentException");
9370         } catch (IllegalArgumentException e) {
9371             // Expected
9372         }
9373         try {
9374             keySet.tailSet(startKey, true);
9375             fail("should throw IllegalArgumentException");
9376         } catch (IllegalArgumentException e) {
9377             // Expected
9378         }
9379         int index;
9380         tailSet = keySet.tailSet(startKey, false);
9381         iterator = tailSet.iterator();
9382         for (index = 101; index < 109; index++) {
9383             key = (String) iterator.next();
9384             assertEquals(new Integer(index).toString(), key);
9385         }
9386 
9387         startKey = new Integer(101).toString();
9388         tailSet = keySet.tailSet(startKey);
9389         iterator = tailSet.iterator();
9390         for (index = 101; iterator.hasNext(); index++) {
9391             key = (String) iterator.next();
9392             assertEquals(new Integer(index).toString(), key);
9393         }
9394         assertEquals(109, index);
9395 
9396         tailSet = keySet.tailSet(startKey, true);
9397         iterator = tailSet.iterator();
9398         for (index = 101; iterator.hasNext(); index++) {
9399             key = (String) iterator.next();
9400             assertEquals(new Integer(index).toString(), key);
9401         }
9402         assertEquals(109, index);
9403 
9404         tailSet = keySet.tailSet(startKey, false);
9405         iterator = tailSet.iterator();
9406         for (index = 101; iterator.hasNext(); index++) {
9407             key = (String) iterator.next();
9408             assertEquals(new Integer(index + 1).toString(), key);
9409         }
9410         assertEquals(108, index);
9411 
9412         for (int i = 102; i < 109; i++) {
9413             startKey = new Integer(i).toString();
9414 
9415             tailSet = keySet.tailSet(startKey);
9416             iterator = tailSet.iterator();
9417             int j;
9418             for (j = i; iterator.hasNext(); j++) {
9419                 key = (String) iterator.next();
9420                 assertEquals(new Integer(j).toString(), key);
9421             }
9422             assertEquals(109, j);
9423 
9424             tailSet = keySet.tailSet(startKey, true);
9425             iterator = tailSet.iterator();
9426             for (j = i; iterator.hasNext(); j++) {
9427                 key = (String) iterator.next();
9428                 assertEquals(new Integer(j).toString(), key);
9429             }
9430             assertEquals(109, j);
9431 
9432             tailSet = keySet.tailSet(startKey, false);
9433             iterator = tailSet.iterator();
9434             for (j = i; iterator.hasNext(); j++) {
9435                 key = (String) iterator.next();
9436                 assertEquals(new Integer(j + 1).toString(), key);
9437             }
9438             assertEquals(108, j);
9439         }
9440 
9441         startKey = new Integer(109).toString();
9442         try {
9443             keySet.tailSet(startKey);
9444             fail("should throw IllegalArgumentException");
9445         } catch (IllegalArgumentException e) {
9446             // Expected
9447         }
9448         try {
9449             keySet.tailSet(startKey, true);
9450             fail("should throw IllegalArgumentException");
9451         } catch (IllegalArgumentException e) {
9452             // Expected
9453         }
9454         try {
9455             keySet.tailSet(startKey, false);
9456             fail("should throw IllegalArgumentException");
9457         } catch (IllegalArgumentException e) {
9458             // Expected
9459         }
9460 
9461         startKey = new Integer(110).toString();
9462         try {
9463             keySet.tailSet(startKey);
9464             fail("should throw IllegalArgumentException");
9465         } catch (IllegalArgumentException e) {
9466             // Expected
9467         }
9468         try {
9469             keySet.tailSet(startKey, true);
9470             fail("should throw IllegalArgumentException");
9471         } catch (IllegalArgumentException e) {
9472             // Expected
9473         }
9474         try {
9475             keySet.tailSet(startKey, false);
9476             fail("should throw IllegalArgumentException");
9477         } catch (IllegalArgumentException e) {
9478             // Expected
9479         }
9480 
9481         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
9482         startKey = new Integer(99).toString();
9483         try {
9484             keySet.tailSet(startKey);
9485             fail("should throw IllegalArgumentException");
9486         } catch (IllegalArgumentException e) {
9487             // Expected
9488         }
9489         try {
9490             keySet.tailSet(startKey, true);
9491             fail("should throw IllegalArgumentException");
9492         } catch (IllegalArgumentException e) {
9493             // Expected
9494         }
9495         try {
9496             keySet.tailSet(startKey, false);
9497             fail("should throw IllegalArgumentException");
9498         } catch (IllegalArgumentException e) {
9499             // Expected
9500         }
9501 
9502         startKey = new Integer(100).toString();
9503         try {
9504             keySet.tailSet(startKey);
9505             fail("should throw IllegalArgumentException");
9506         } catch (IllegalArgumentException e) {
9507             // Expected
9508         }
9509         try {
9510             keySet.tailSet(startKey, true);
9511             fail("should throw IllegalArgumentException");
9512         } catch (IllegalArgumentException e) {
9513             // Expected
9514         }
9515 
9516         tailSet = keySet.tailSet(startKey, false);
9517         iterator = tailSet.iterator();
9518         for (index = 100; iterator.hasNext(); index++) {
9519             key = (String) iterator.next();
9520             assertEquals(new Integer(index + 1).toString(), key);
9521         }
9522         assertEquals(109, index);
9523 
9524         for (int i = 102; i < 109; i++) {
9525             startKey = new Integer(i).toString();
9526 
9527             tailSet = keySet.tailSet(startKey);
9528             iterator = tailSet.iterator();
9529             int j;
9530             for (j = i; iterator.hasNext(); j++) {
9531                 key = (String) iterator.next();
9532                 assertEquals(new Integer(j).toString(), key);
9533             }
9534             assertEquals(110, j);
9535 
9536             tailSet = keySet.tailSet(startKey, true);
9537             iterator = tailSet.iterator();
9538             for (j = i; iterator.hasNext(); j++) {
9539                 key = (String) iterator.next();
9540                 assertEquals(new Integer(j).toString(), key);
9541             }
9542             assertEquals(110, j);
9543 
9544             tailSet = keySet.tailSet(startKey, false);
9545             iterator = tailSet.iterator();
9546             for (j = i; iterator.hasNext(); j++) {
9547                 key = (String) iterator.next();
9548                 assertEquals(new Integer(j + 1).toString(), key);
9549             }
9550             assertEquals(109, j);
9551         }
9552 
9553         startKey = new Integer(109).toString();
9554         tailSet = keySet.tailSet(startKey);
9555         iterator = tailSet.iterator();
9556         for (index = 109; iterator.hasNext(); index++) {
9557             key = (String) iterator.next();
9558             assertEquals(new Integer(index).toString(), key);
9559         }
9560         assertEquals(110, index);
9561 
9562         tailSet = keySet.tailSet(startKey, true);
9563         iterator = tailSet.iterator();
9564         for (index = 109; iterator.hasNext(); index++) {
9565             key = (String) iterator.next();
9566             assertEquals(new Integer(index).toString(), key);
9567         }
9568         assertEquals(110, index);
9569 
9570         tailSet = keySet.tailSet(startKey, false);
9571         iterator = tailSet.iterator();
9572         for (index = 109; iterator.hasNext(); index++) {
9573             key = (String) iterator.next();
9574             assertEquals(new Integer(index + 1).toString(), key);
9575         }
9576         assertEquals(109, index);
9577 
9578         startKey = new Integer(110).toString();
9579         try {
9580             keySet.tailSet(startKey);
9581             fail("should throw IllegalArgumentException");
9582         } catch (IllegalArgumentException e) {
9583             // Expected
9584         }
9585         try {
9586             keySet.tailSet(startKey, true);
9587             fail("should throw IllegalArgumentException");
9588         } catch (IllegalArgumentException e) {
9589             // Expected
9590         }
9591         try {
9592             keySet.tailSet(startKey, false);
9593             fail("should throw IllegalArgumentException");
9594         } catch (IllegalArgumentException e) {
9595             // Expected
9596         }
9597 
9598         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
9599         startKey = new Integer(99).toString();
9600         try {
9601             keySet.tailSet(startKey);
9602             fail("should throw IllegalArgumentException");
9603         } catch (IllegalArgumentException e) {
9604             // Expected
9605         }
9606         try {
9607             keySet.tailSet(startKey, true);
9608             fail("should throw IllegalArgumentException");
9609         } catch (IllegalArgumentException e) {
9610             // Expected
9611         }
9612         try {
9613             keySet.tailSet(startKey, false);
9614             fail("should throw IllegalArgumentException");
9615         } catch (IllegalArgumentException e) {
9616             // Expected
9617         }
9618 
9619         startKey = new Integer(100).toString();
9620         tailSet = keySet.tailSet(startKey);
9621         iterator = tailSet.iterator();
9622         for (index = 100; iterator.hasNext(); index++) {
9623             key = (String) iterator.next();
9624             assertEquals(new Integer(index).toString(), key);
9625         }
9626         assertEquals(109, index);
9627 
9628         tailSet = keySet.tailSet(startKey, true);
9629         iterator = tailSet.iterator();
9630         for (index = 100; iterator.hasNext(); index++) {
9631             key = (String) iterator.next();
9632             assertEquals(new Integer(index).toString(), key);
9633         }
9634         assertEquals(109, index);
9635 
9636         tailSet = keySet.tailSet(startKey, false);
9637         iterator = tailSet.iterator();
9638         for (index = 100; iterator.hasNext(); index++) {
9639             key = (String) iterator.next();
9640             assertEquals(new Integer(index + 1).toString(), key);
9641         }
9642         assertEquals(108, index);
9643 
9644         startKey = new Integer(101).toString();
9645         tailSet = keySet.tailSet(startKey);
9646         iterator = tailSet.iterator();
9647         for (index = 101; iterator.hasNext(); index++) {
9648             key = (String) iterator.next();
9649             assertEquals(new Integer(index).toString(), key);
9650         }
9651         assertEquals(109, index);
9652 
9653         tailSet = keySet.tailSet(startKey, true);
9654         iterator = tailSet.iterator();
9655         for (index = 101; iterator.hasNext(); index++) {
9656             key = (String) iterator.next();
9657             assertEquals(new Integer(index).toString(), key);
9658         }
9659         assertEquals(109, index);
9660 
9661         tailSet = keySet.tailSet(startKey, false);
9662         iterator = tailSet.iterator();
9663         for (index = 101; iterator.hasNext(); index++) {
9664             key = (String) iterator.next();
9665             assertEquals(new Integer(index + 1).toString(), key);
9666         }
9667         assertEquals(108, index);
9668 
9669         for (int i = 102; i < 109; i++) {
9670             startKey = new Integer(i).toString();
9671 
9672             tailSet = keySet.tailSet(startKey);
9673             iterator = tailSet.iterator();
9674             int j;
9675             for (j = i; iterator.hasNext(); j++) {
9676                 key = (String) iterator.next();
9677                 assertEquals(new Integer(j).toString(), key);
9678             }
9679             assertEquals(109, j);
9680 
9681             tailSet = keySet.tailSet(startKey, true);
9682             iterator = tailSet.iterator();
9683             for (j = i; iterator.hasNext(); j++) {
9684                 key = (String) iterator.next();
9685                 assertEquals(new Integer(j).toString(), key);
9686             }
9687             assertEquals(109, j);
9688 
9689             tailSet = keySet.tailSet(startKey, false);
9690             iterator = tailSet.iterator();
9691             for (j = i; iterator.hasNext(); j++) {
9692                 key = (String) iterator.next();
9693                 assertEquals(new Integer(j + 1).toString(), key);
9694             }
9695             assertEquals(108, j);
9696         }
9697 
9698         startKey = new Integer(109).toString();
9699         try {
9700             keySet.tailSet(startKey);
9701             fail("should throw IllegalArgumentException");
9702         } catch (IllegalArgumentException e) {
9703             // Expected
9704         }
9705         try {
9706             keySet.tailSet(startKey, true);
9707             fail("should throw IllegalArgumentException");
9708         } catch (IllegalArgumentException e) {
9709             // Expected
9710         }
9711         try {
9712             keySet.tailSet(startKey, false);
9713             fail("should throw IllegalArgumentException");
9714         } catch (IllegalArgumentException e) {
9715             // Expected
9716         }
9717 
9718         startKey = new Integer(110).toString();
9719         try {
9720             keySet.tailSet(startKey);
9721             fail("should throw IllegalArgumentException");
9722         } catch (IllegalArgumentException e) {
9723             // Expected
9724         }
9725         try {
9726             keySet.tailSet(startKey, true);
9727             fail("should throw IllegalArgumentException");
9728         } catch (IllegalArgumentException e) {
9729             // Expected
9730         }
9731         try {
9732             keySet.tailSet(startKey, false);
9733             fail("should throw IllegalArgumentException");
9734         } catch (IllegalArgumentException e) {
9735             // Expected
9736         }
9737 
9738         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
9739         startKey = new Integer(99).toString();
9740         try {
9741             keySet.tailSet(startKey);
9742             fail("should throw IllegalArgumentException");
9743         } catch (IllegalArgumentException e) {
9744             // Expected
9745         }
9746         try {
9747             keySet.tailSet(startKey, true);
9748             fail("should throw IllegalArgumentException");
9749         } catch (IllegalArgumentException e) {
9750             // Expected
9751         }
9752         try {
9753             keySet.tailSet(startKey, false);
9754             fail("should throw IllegalArgumentException");
9755         } catch (IllegalArgumentException e) {
9756             // Expected
9757         }
9758         startKey = new Integer(100).toString();
9759         tailSet = keySet.tailSet(startKey);
9760         iterator = tailSet.iterator();
9761         for (index = 100; iterator.hasNext(); index++) {
9762             key = (String) iterator.next();
9763             assertEquals(new Integer(index).toString(), key);
9764         }
9765         assertEquals(110, index);
9766 
9767         tailSet = keySet.tailSet(startKey, true);
9768         iterator = tailSet.iterator();
9769         for (index = 100; iterator.hasNext(); index++) {
9770             key = (String) iterator.next();
9771             assertEquals(new Integer(index).toString(), key);
9772         }
9773         assertEquals(110, index);
9774 
9775         tailSet = keySet.tailSet(startKey, false);
9776         iterator = tailSet.iterator();
9777         for (index = 100; iterator.hasNext(); index++) {
9778             key = (String) iterator.next();
9779             assertEquals(new Integer(index + 1).toString(), key);
9780         }
9781         assertEquals(109, index);
9782 
9783         startKey = new Integer(101).toString();
9784         tailSet = keySet.tailSet(startKey);
9785         iterator = tailSet.iterator();
9786         for (index = 101; iterator.hasNext(); index++) {
9787             key = (String) iterator.next();
9788             assertEquals(new Integer(index).toString(), key);
9789         }
9790         assertEquals(110, index);
9791 
9792         tailSet = keySet.tailSet(startKey, true);
9793         iterator = tailSet.iterator();
9794         for (index = 101; iterator.hasNext(); index++) {
9795             key = (String) iterator.next();
9796             assertEquals(new Integer(index).toString(), key);
9797         }
9798         assertEquals(110, index);
9799 
9800         tailSet = keySet.tailSet(startKey, false);
9801         iterator = tailSet.iterator();
9802         for (index = 101; iterator.hasNext(); index++) {
9803             key = (String) iterator.next();
9804             assertEquals(new Integer(index + 1).toString(), key);
9805         }
9806         assertEquals(109, index);
9807 
9808         for (int i = 102; i < 109; i++) {
9809             startKey = new Integer(i).toString();
9810 
9811             tailSet = keySet.tailSet(startKey);
9812             iterator = tailSet.iterator();
9813             int j;
9814             for (j = i; iterator.hasNext(); j++) {
9815                 key = (String) iterator.next();
9816                 assertEquals(new Integer(j).toString(), key);
9817             }
9818             assertEquals(110, j);
9819 
9820             tailSet = keySet.tailSet(startKey, true);
9821             iterator = tailSet.iterator();
9822             for (j = i; iterator.hasNext(); j++) {
9823                 key = (String) iterator.next();
9824                 assertEquals(new Integer(j).toString(), key);
9825             }
9826             assertEquals(110, j);
9827 
9828             tailSet = keySet.tailSet(startKey, false);
9829             iterator = tailSet.iterator();
9830             for (j = i; iterator.hasNext(); j++) {
9831                 key = (String) iterator.next();
9832                 assertEquals(new Integer(j + 1).toString(), key);
9833             }
9834             assertEquals(109, j);
9835         }
9836 
9837         startKey = new Integer(109).toString();
9838         tailSet = keySet.tailSet(startKey);
9839         iterator = tailSet.iterator();
9840         for (index = 109; iterator.hasNext(); index++) {
9841             key = (String) iterator.next();
9842             assertEquals(new Integer(index).toString(), key);
9843         }
9844         assertEquals(110, index);
9845 
9846         tailSet = keySet.tailSet(startKey, true);
9847         iterator = tailSet.iterator();
9848         for (index = 109; iterator.hasNext(); index++) {
9849             key = (String) iterator.next();
9850             assertEquals(new Integer(index).toString(), key);
9851         }
9852         assertEquals(110, index);
9853 
9854         tailSet = keySet.tailSet(startKey, false);
9855         iterator = tailSet.iterator();
9856         for (index = 109; iterator.hasNext(); index++) {
9857             key = (String) iterator.next();
9858             assertEquals(new Integer(index + 1).toString(), key);
9859         }
9860         assertEquals(109, index);
9861 
9862         startKey = new Integer(110).toString();
9863         try {
9864             keySet.tailSet(startKey);
9865             fail("should throw IllegalArgumentException");
9866         } catch (IllegalArgumentException e) {
9867             // Expected
9868         }
9869         try {
9870             keySet.tailSet(startKey, true);
9871             fail("should throw IllegalArgumentException");
9872         } catch (IllegalArgumentException e) {
9873             // Expected
9874         }
9875         try {
9876             keySet.tailSet(startKey, false);
9877             fail("should throw IllegalArgumentException");
9878         } catch (IllegalArgumentException e) {
9879             // Expected
9880         }
9881 
9882         String endKey = new Integer(1).toString();
9883         keySet = tm.headMap(endKey, true).navigableKeySet();
9884         iterator = keySet.iterator();
9885         iterator.next();
9886         startKey = (String) iterator.next();
9887         tailSet = keySet.tailSet(startKey);
9888         assertEquals(1, tailSet.size());
9889         Iterator tailSetIterator = tailSet.iterator();
9890         assertEquals(endKey, tailSetIterator.next());
9891         try {
9892             tailSetIterator.next();
9893             fail("should throw NoSuchElementException");
9894         } catch (NoSuchElementException e) {
9895             // Expected
9896         }
9897         try {
9898             keySet.tailSet(null);
9899             fail("should throw NPE");
9900         } catch (NullPointerException e) {
9901             // Expected
9902         }
9903 
9904         tailSet = keySet.tailSet(startKey, true);
9905         assertEquals(1, tailSet.size());
9906         tailSetIterator = tailSet.iterator();
9907         assertEquals(endKey, tailSetIterator.next());
9908 
9909         tailSet = keySet.tailSet(startKey, false);
9910         assertEquals(0, tailSet.size());
9911         tailSetIterator = tailSet.iterator();
9912         try {
9913             tailSetIterator.next();
9914             fail("should throw NoSuchElementException");
9915         } catch (NoSuchElementException e) {
9916             // Expected
9917         }
9918         try {
9919             keySet.tailSet(null, false);
9920             fail("should throw NPE");
9921         } catch (NullPointerException e) {
9922             // Expected
9923         }
9924         try {
9925             keySet.tailSet(null, true);
9926             fail("should throw NPE");
9927         } catch (NullPointerException e) {
9928             // Expected
9929         }
9930 
9931         // With Comparator
9932         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
9933                 .navigableKeySet();
9934         startKey = new Integer(99).toString();
9935         try {
9936             keySet.tailSet(startKey);
9937             fail("should throw IllegalArgumentException");
9938         } catch (IllegalArgumentException e) {
9939             // Expected
9940         }
9941 
9942         try {
9943             keySet.tailSet(startKey, true);
9944             fail("should throw IllegalArgumentException");
9945         } catch (IllegalArgumentException e) {
9946             // Expected
9947         }
9948 
9949         try {
9950             keySet.tailSet(startKey, false);
9951             fail("should throw IllegalArgumentException");
9952         } catch (IllegalArgumentException e) {
9953             // Expected
9954         }
9955 
9956         startKey = new Integer(100).toString();
9957         try {
9958             keySet.tailSet(startKey);
9959             fail("should throw IllegalArgumentException");
9960         } catch (IllegalArgumentException e) {
9961             // Expected
9962         }
9963         try {
9964             keySet.tailSet(startKey, true);
9965             fail("should throw IllegalArgumentException");
9966         } catch (IllegalArgumentException e) {
9967             // Expected
9968         }
9969         tailSet = keySet.tailSet(startKey, false);
9970         iterator = tailSet.iterator();
9971         for (index = 101; index < 109; index++) {
9972             key = (String) iterator.next();
9973             assertEquals(new Integer(index).toString(), key);
9974         }
9975 
9976         startKey = new Integer(101).toString();
9977         tailSet = keySet.tailSet(startKey);
9978         iterator = tailSet.iterator();
9979         for (index = 101; iterator.hasNext(); index++) {
9980             key = (String) iterator.next();
9981             assertEquals(new Integer(index).toString(), key);
9982         }
9983         assertEquals(109, index);
9984 
9985         tailSet = keySet.tailSet(startKey, true);
9986         iterator = tailSet.iterator();
9987         for (index = 101; iterator.hasNext(); index++) {
9988             key = (String) iterator.next();
9989             assertEquals(new Integer(index).toString(), key);
9990         }
9991         assertEquals(109, index);
9992 
9993         tailSet = keySet.tailSet(startKey, false);
9994         iterator = tailSet.iterator();
9995         for (index = 101; iterator.hasNext(); index++) {
9996             key = (String) iterator.next();
9997             assertEquals(new Integer(index + 1).toString(), key);
9998         }
9999         assertEquals(108, index);
10000 
10001         for (int i = 102; i < 109; i++) {
10002             startKey = new Integer(i).toString();
10003 
10004             tailSet = keySet.tailSet(startKey);
10005             iterator = tailSet.iterator();
10006             int j;
10007             for (j = i; iterator.hasNext(); j++) {
10008                 key = (String) iterator.next();
10009                 assertEquals(new Integer(j).toString(), key);
10010             }
10011             assertEquals(109, j);
10012 
10013             tailSet = keySet.tailSet(startKey, true);
10014             iterator = tailSet.iterator();
10015             for (j = i; iterator.hasNext(); j++) {
10016                 key = (String) iterator.next();
10017                 assertEquals(new Integer(j).toString(), key);
10018             }
10019             assertEquals(109, j);
10020 
10021             tailSet = keySet.tailSet(startKey, false);
10022             iterator = tailSet.iterator();
10023             for (j = i; iterator.hasNext(); j++) {
10024                 key = (String) iterator.next();
10025                 assertEquals(new Integer(j + 1).toString(), key);
10026             }
10027             assertEquals(108, j);
10028         }
10029 
10030         startKey = new Integer(109).toString();
10031         try {
10032             keySet.tailSet(startKey);
10033             fail("should throw IllegalArgumentException");
10034         } catch (IllegalArgumentException e) {
10035             // Expected
10036         }
10037         try {
10038             keySet.tailSet(startKey, true);
10039             fail("should throw IllegalArgumentException");
10040         } catch (IllegalArgumentException e) {
10041             // Expected
10042         }
10043         try {
10044             keySet.tailSet(startKey, false);
10045             fail("should throw IllegalArgumentException");
10046         } catch (IllegalArgumentException e) {
10047             // Expected
10048         }
10049 
10050         startKey = new Integer(110).toString();
10051         try {
10052             keySet.tailSet(startKey);
10053             fail("should throw IllegalArgumentException");
10054         } catch (IllegalArgumentException e) {
10055             // Expected
10056         }
10057         try {
10058             keySet.tailSet(startKey, true);
10059             fail("should throw IllegalArgumentException");
10060         } catch (IllegalArgumentException e) {
10061             // Expected
10062         }
10063         try {
10064             keySet.tailSet(startKey, false);
10065             fail("should throw IllegalArgumentException");
10066         } catch (IllegalArgumentException e) {
10067             // Expected
10068         }
10069 
10070         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
10071         startKey = new Integer(99).toString();
10072         try {
10073             keySet.tailSet(startKey);
10074             fail("should throw IllegalArgumentException");
10075         } catch (IllegalArgumentException e) {
10076             // Expected
10077         }
10078         try {
10079             keySet.tailSet(startKey, true);
10080             fail("should throw IllegalArgumentException");
10081         } catch (IllegalArgumentException e) {
10082             // Expected
10083         }
10084         try {
10085             keySet.tailSet(startKey, false);
10086             fail("should throw IllegalArgumentException");
10087         } catch (IllegalArgumentException e) {
10088             // Expected
10089         }
10090 
10091         startKey = new Integer(100).toString();
10092         try {
10093             keySet.tailSet(startKey);
10094             fail("should throw IllegalArgumentException");
10095         } catch (IllegalArgumentException e) {
10096             // Expected
10097         }
10098         try {
10099             keySet.tailSet(startKey, true);
10100             fail("should throw IllegalArgumentException");
10101         } catch (IllegalArgumentException e) {
10102             // Expected
10103         }
10104 
10105         tailSet = keySet.tailSet(startKey, false);
10106         iterator = tailSet.iterator();
10107         for (index = 100; iterator.hasNext(); index++) {
10108             key = (String) iterator.next();
10109             assertEquals(new Integer(index + 1).toString(), key);
10110         }
10111         assertEquals(109, index);
10112 
10113         for (int i = 102; i < 109; i++) {
10114             startKey = new Integer(i).toString();
10115 
10116             tailSet = keySet.tailSet(startKey);
10117             iterator = tailSet.iterator();
10118             int j;
10119             for (j = i; iterator.hasNext(); j++) {
10120                 key = (String) iterator.next();
10121                 assertEquals(new Integer(j).toString(), key);
10122             }
10123             assertEquals(110, j);
10124 
10125             tailSet = keySet.tailSet(startKey, true);
10126             iterator = tailSet.iterator();
10127             for (j = i; iterator.hasNext(); j++) {
10128                 key = (String) iterator.next();
10129                 assertEquals(new Integer(j).toString(), key);
10130             }
10131             assertEquals(110, j);
10132 
10133             tailSet = keySet.tailSet(startKey, false);
10134             iterator = tailSet.iterator();
10135             for (j = i; iterator.hasNext(); j++) {
10136                 key = (String) iterator.next();
10137                 assertEquals(new Integer(j + 1).toString(), key);
10138             }
10139             assertEquals(109, j);
10140         }
10141 
10142         startKey = new Integer(109).toString();
10143         tailSet = keySet.tailSet(startKey);
10144         iterator = tailSet.iterator();
10145         for (index = 109; iterator.hasNext(); index++) {
10146             key = (String) iterator.next();
10147             assertEquals(new Integer(index).toString(), key);
10148         }
10149         assertEquals(110, index);
10150 
10151         tailSet = keySet.tailSet(startKey, true);
10152         iterator = tailSet.iterator();
10153         for (index = 109; iterator.hasNext(); index++) {
10154             key = (String) iterator.next();
10155             assertEquals(new Integer(index).toString(), key);
10156         }
10157         assertEquals(110, index);
10158 
10159         tailSet = keySet.tailSet(startKey, false);
10160         iterator = tailSet.iterator();
10161         for (index = 109; iterator.hasNext(); index++) {
10162             key = (String) iterator.next();
10163             assertEquals(new Integer(index + 1).toString(), key);
10164         }
10165         assertEquals(109, index);
10166 
10167         startKey = new Integer(110).toString();
10168         try {
10169             keySet.tailSet(startKey);
10170             fail("should throw IllegalArgumentException");
10171         } catch (IllegalArgumentException e) {
10172             // Expected
10173         }
10174         try {
10175             keySet.tailSet(startKey, true);
10176             fail("should throw IllegalArgumentException");
10177         } catch (IllegalArgumentException e) {
10178             // Expected
10179         }
10180         try {
10181             keySet.tailSet(startKey, false);
10182             fail("should throw IllegalArgumentException");
10183         } catch (IllegalArgumentException e) {
10184             // Expected
10185         }
10186     }
10187 
10188     public void test_AscendingSubMapKeySet_subSet() {
10189         NavigableSet keySet;
10190         SortedSet subSet;
10191         String startKey, endKey, key;
10192         Iterator startIterator, endIterator, subSetIterator;
10193 
10194         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
10195         startIterator = keySet.iterator();
10196         while (startIterator.hasNext()) {
10197             startKey = (String) startIterator.next();
10198             endIterator = keySet.iterator();
10199             while (endIterator.hasNext()) {
10200                 endKey = (String) endIterator.next();
10201                 int startIndex = Integer.valueOf(startKey);
10202                 int endIndex = Integer.valueOf(endKey);
10203                 if (startIndex > endIndex) {
10204                     try {
10205                         keySet.subSet(startKey, endKey);
10206                         fail("should throw IllegalArgumentException");
10207                     } catch (IllegalArgumentException e) {
10208                         // Expected
10209                     }
10210 
10211                     try {
10212                         keySet.subSet(startKey, false, endKey, false);
10213                         fail("shoudl throw IllegalArgumentException");
10214                     } catch (IllegalArgumentException e) {
10215                         // Expected
10216                     }
10217 
10218                     try {
10219                         keySet.subSet(startKey, false, endKey, true);
10220                         fail("shoudl throw IllegalArgumentException");
10221                     } catch (IllegalArgumentException e) {
10222                         // Expected
10223                     }
10224 
10225                     try {
10226                         keySet.subSet(startKey, true, endKey, false);
10227                         fail("shoudl throw IllegalArgumentException");
10228                     } catch (IllegalArgumentException e) {
10229                         // Expected
10230                     }
10231 
10232                     try {
10233                         keySet.subSet(startKey, true, endKey, true);
10234                         fail("shoudl throw IllegalArgumentException");
10235                     } catch (IllegalArgumentException e) {
10236                         // Expected
10237                     }
10238                 } else {
10239                     subSet = keySet.subSet(startKey, endKey);
10240                     subSetIterator = subSet.iterator();
10241                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10242                         assertEquals(new Integer(index).toString(),
10243                                 subSetIterator.next());
10244                     }
10245 
10246                     subSet = keySet.subSet(startKey, false, endKey, false);
10247                     subSetIterator = subSet.iterator();
10248                     for (int index = startIndex + 1; subSetIterator.hasNext(); index++) {
10249                         assertEquals(new Integer(index).toString(),
10250                                 subSetIterator.next());
10251                     }
10252 
10253                     subSet = keySet.subSet(startKey, false, endKey, true);
10254                     subSetIterator = subSet.iterator();
10255                     for (int index = startIndex + 1; subSetIterator.hasNext(); index++) {
10256                         assertEquals(new Integer(index).toString(),
10257                                 subSetIterator.next());
10258                     }
10259 
10260                     subSet = keySet.subSet(startKey, true, endKey, false);
10261                     subSetIterator = subSet.iterator();
10262                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10263                         assertEquals(new Integer(index).toString(),
10264                                 subSetIterator.next());
10265                     }
10266 
10267                     subSet = keySet.subSet(startKey, true, endKey, true);
10268                     subSetIterator = subSet.iterator();
10269                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10270                         assertEquals(new Integer(index).toString(),
10271                                 subSetIterator.next());
10272                     }
10273                 }
10274             }
10275         }
10276 
10277         key = new Integer(1).toString();
10278         keySet = tm.headMap(key, true).navigableKeySet();
10279         Iterator iterator = keySet.iterator();
10280         startKey = (String) iterator.next();
10281         endKey = (String) iterator.next();
10282 
10283         subSet = keySet.subSet(startKey, endKey);
10284         assertEquals(1, subSet.size());
10285         subSetIterator = subSet.iterator();
10286         assertEquals(new Integer(0).toString(), subSetIterator.next());
10287         try {
10288             subSetIterator.next();
10289             fail("should throw NoSuchElementException");
10290         } catch (NoSuchElementException e) {
10291             // Expected
10292         }
10293 
10294         subSet = keySet.subSet(startKey, false, endKey, false);
10295         assertEquals(0, subSet.size());
10296 
10297         subSet = keySet.subSet(startKey, false, endKey, true);
10298         assertEquals(1, subSet.size());
10299         subSetIterator = subSet.iterator();
10300         assertEquals(new Integer(1).toString(), subSetIterator.next());
10301         try {
10302             subSetIterator.next();
10303             fail("should throw NoSuchElementException");
10304         } catch (NoSuchElementException e) {
10305             // Expected
10306         }
10307 
10308         subSet = keySet.subSet(startKey, true, endKey, false);
10309         assertEquals(1, subSet.size());
10310         subSetIterator = subSet.iterator();
10311         assertEquals(new Integer(0).toString(), subSetIterator.next());
10312         try {
10313             subSetIterator.next();
10314             fail("should throw NoSuchElementException");
10315         } catch (NoSuchElementException e) {
10316             // Expected
10317         }
10318 
10319         subSet = keySet.subSet(startKey, true, endKey, true);
10320         assertEquals(2, subSet.size());
10321         subSetIterator = subSet.iterator();
10322         assertEquals(new Integer(0).toString(), subSetIterator.next());
10323         assertEquals(new Integer(1).toString(), subSetIterator.next());
10324         try {
10325             subSetIterator.next();
10326             fail("should throw NoSuchElementException");
10327         } catch (NoSuchElementException e) {
10328             // Expected
10329         }
10330 
10331         try {
10332             keySet.subSet(null, null);
10333             fail("should throw NPE");
10334         } catch (NullPointerException e) {
10335             // Expected
10336         }
10337 
10338         try {
10339             keySet.subSet(null, false, null, false);
10340             fail("should throw NPE");
10341         } catch (NullPointerException e) {
10342             // Expected
10343         }
10344 
10345         try {
10346             keySet.subSet(null, false, null, true);
10347             fail("should throw NPE");
10348         } catch (NullPointerException e) {
10349             // Expected
10350         }
10351 
10352         try {
10353             keySet.subSet(null, true, null, false);
10354             fail("should throw NPE");
10355         } catch (NullPointerException e) {
10356             // Expected
10357         }
10358 
10359         try {
10360             keySet.subSet(null, true, null, true);
10361             fail("should throw NPE");
10362         } catch (NullPointerException e) {
10363             // Expected
10364         }
10365 
10366         try {
10367             keySet.subSet(null, endKey);
10368             fail("should throw NPE");
10369         } catch (NullPointerException e) {
10370             // Expected
10371         }
10372 
10373         try {
10374             keySet.subSet(null, false, endKey, false);
10375             fail("should throw NPE");
10376         } catch (NullPointerException e) {
10377             // Expected
10378         }
10379 
10380         try {
10381             keySet.subSet(null, false, endKey, true);
10382             fail("should throw NPE");
10383         } catch (NullPointerException e) {
10384             // Expected
10385         }
10386 
10387         try {
10388             keySet.subSet(null, true, endKey, false);
10389             fail("should throw NPE");
10390         } catch (NullPointerException e) {
10391             // Expected
10392         }
10393 
10394         try {
10395             keySet.subSet(null, true, endKey, true);
10396             fail("should throw NPE");
10397         } catch (NullPointerException e) {
10398             // Expected
10399         }
10400 
10401         try {
10402             keySet.subSet(startKey, null);
10403             fail("should throw NPE");
10404         } catch (NullPointerException e) {
10405             // Expected
10406         }
10407 
10408         try {
10409             keySet.subSet(startKey, false, null, false);
10410             fail("should throw NPE");
10411         } catch (NullPointerException e) {
10412             // Expected
10413         }
10414 
10415         try {
10416             keySet.subSet(startKey, false, null, true);
10417             fail("should throw NPE");
10418         } catch (NullPointerException e) {
10419             // Expected
10420         }
10421 
10422         try {
10423             keySet.subSet(startKey, true, null, false);
10424             fail("should throw NPE");
10425         } catch (NullPointerException e) {
10426             // Expected
10427         }
10428 
10429         try {
10430             keySet.subSet(startKey, true, null, true);
10431             fail("should throw NPE");
10432         } catch (NullPointerException e) {
10433             // Expected
10434         }
10435 
10436         // With Comparator
10437         keySet = ((NavigableMap) subMap_startExcluded_endExcluded_comparator)
10438                 .navigableKeySet();
10439         startIterator = keySet.iterator();
10440         while (startIterator.hasNext()) {
10441             startKey = (String) startIterator.next();
10442             endIterator = keySet.iterator();
10443             while (endIterator.hasNext()) {
10444                 endKey = (String) endIterator.next();
10445                 int startIndex = Integer.valueOf(startKey);
10446                 int endIndex = Integer.valueOf(endKey);
10447                 if (startIndex > endIndex) {
10448                     try {
10449                         keySet.subSet(startKey, endKey);
10450                         fail("should throw IllegalArgumentException");
10451                     } catch (IllegalArgumentException e) {
10452                         // Expected
10453                     }
10454 
10455                     try {
10456                         keySet.subSet(startKey, false, endKey, false);
10457                         fail("shoudl throw IllegalArgumentException");
10458                     } catch (IllegalArgumentException e) {
10459                         // Expected
10460                     }
10461 
10462                     try {
10463                         keySet.subSet(startKey, false, endKey, true);
10464                         fail("shoudl throw IllegalArgumentException");
10465                     } catch (IllegalArgumentException e) {
10466                         // Expected
10467                     }
10468 
10469                     try {
10470                         keySet.subSet(startKey, true, endKey, false);
10471                         fail("shoudl throw IllegalArgumentException");
10472                     } catch (IllegalArgumentException e) {
10473                         // Expected
10474                     }
10475 
10476                     try {
10477                         keySet.subSet(startKey, true, endKey, true);
10478                         fail("shoudl throw IllegalArgumentException");
10479                     } catch (IllegalArgumentException e) {
10480                         // Expected
10481                     }
10482                 } else {
10483                     subSet = keySet.subSet(startKey, endKey);
10484                     subSetIterator = subSet.iterator();
10485                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10486                         assertEquals(new Integer(index).toString(),
10487                                 subSetIterator.next());
10488                     }
10489 
10490                     subSet = keySet.subSet(startKey, false, endKey, false);
10491                     subSetIterator = subSet.iterator();
10492                     for (int index = startIndex + 1; subSetIterator.hasNext(); index++) {
10493                         assertEquals(new Integer(index).toString(),
10494                                 subSetIterator.next());
10495                     }
10496 
10497                     subSet = keySet.subSet(startKey, false, endKey, true);
10498                     subSetIterator = subSet.iterator();
10499                     for (int index = startIndex + 1; subSetIterator.hasNext(); index++) {
10500                         assertEquals(new Integer(index).toString(),
10501                                 subSetIterator.next());
10502                     }
10503 
10504                     subSet = keySet.subSet(startKey, true, endKey, false);
10505                     subSetIterator = subSet.iterator();
10506                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10507                         assertEquals(new Integer(index).toString(),
10508                                 subSetIterator.next());
10509                     }
10510 
10511                     subSet = keySet.subSet(startKey, true, endKey, true);
10512                     subSetIterator = subSet.iterator();
10513                     for (int index = startIndex; subSetIterator.hasNext(); index++) {
10514                         assertEquals(new Integer(index).toString(),
10515                                 subSetIterator.next());
10516                     }
10517                 }
10518             }
10519         }
10520 
10521         key = new Integer(1).toString();
10522         keySet = tm.headMap(key, true).navigableKeySet();
10523         iterator = keySet.iterator();
10524         startKey = (String) iterator.next();
10525         endKey = (String) iterator.next();
10526 
10527         subSet = keySet.subSet(startKey, endKey);
10528         assertEquals(1, subSet.size());
10529         subSetIterator = subSet.iterator();
10530         assertEquals(new Integer(0).toString(), subSetIterator.next());
10531         try {
10532             subSetIterator.next();
10533             fail("should throw NoSuchElementException");
10534         } catch (NoSuchElementException e) {
10535             // Expected
10536         }
10537 
10538         subSet = keySet.subSet(startKey, false, endKey, false);
10539         assertEquals(0, subSet.size());
10540 
10541         subSet = keySet.subSet(startKey, false, endKey, true);
10542         assertEquals(1, subSet.size());
10543         subSetIterator = subSet.iterator();
10544         assertEquals(new Integer(1).toString(), subSetIterator.next());
10545         try {
10546             subSetIterator.next();
10547             fail("should throw NoSuchElementException");
10548         } catch (NoSuchElementException e) {
10549             // Expected
10550         }
10551 
10552         subSet = keySet.subSet(startKey, true, endKey, false);
10553         assertEquals(1, subSet.size());
10554         subSetIterator = subSet.iterator();
10555         assertEquals(new Integer(0).toString(), subSetIterator.next());
10556         try {
10557             subSetIterator.next();
10558             fail("should throw NoSuchElementException");
10559         } catch (NoSuchElementException e) {
10560             // Expected
10561         }
10562 
10563         subSet = keySet.subSet(startKey, true, endKey, true);
10564         assertEquals(2, subSet.size());
10565         subSetIterator = subSet.iterator();
10566         assertEquals(new Integer(0).toString(), subSetIterator.next());
10567         assertEquals(new Integer(1).toString(), subSetIterator.next());
10568         try {
10569             subSetIterator.next();
10570             fail("should throw NoSuchElementException");
10571         } catch (NoSuchElementException e) {
10572             // Expected
10573         }
10574 
10575         try {
10576             keySet.subSet(null, null);
10577             fail("should throw NPE");
10578         } catch (NullPointerException e) {
10579             // Expected
10580         }
10581 
10582         try {
10583             keySet.subSet(null, false, null, false);
10584             fail("should throw NPE");
10585         } catch (NullPointerException e) {
10586             // Expected
10587         }
10588 
10589         try {
10590             keySet.subSet(null, false, null, true);
10591             fail("should throw NPE");
10592         } catch (NullPointerException e) {
10593             // Expected
10594         }
10595 
10596         try {
10597             keySet.subSet(null, true, null, false);
10598             fail("should throw NPE");
10599         } catch (NullPointerException e) {
10600             // Expected
10601         }
10602 
10603         try {
10604             keySet.subSet(null, true, null, true);
10605             fail("should throw NPE");
10606         } catch (NullPointerException e) {
10607             // Expected
10608         }
10609 
10610         try {
10611             keySet.subSet(null, endKey);
10612             fail("should throw NPE");
10613         } catch (NullPointerException e) {
10614             // Expected
10615         }
10616 
10617         try {
10618             keySet.subSet(null, false, endKey, false);
10619             fail("should throw NPE");
10620         } catch (NullPointerException e) {
10621             // Expected
10622         }
10623 
10624         try {
10625             keySet.subSet(null, false, endKey, true);
10626             fail("should throw NPE");
10627         } catch (NullPointerException e) {
10628             // Expected
10629         }
10630 
10631         try {
10632             keySet.subSet(null, true, endKey, false);
10633             fail("should throw NPE");
10634         } catch (NullPointerException e) {
10635             // Expected
10636         }
10637 
10638         try {
10639             keySet.subSet(null, true, endKey, true);
10640             fail("should throw NPE");
10641         } catch (NullPointerException e) {
10642             // Expected
10643         }
10644 
10645         try {
10646             keySet.subSet(startKey, null);
10647             fail("should throw NPE");
10648         } catch (NullPointerException e) {
10649             // Expected
10650         }
10651 
10652         try {
10653             keySet.subSet(startKey, false, null, false);
10654             fail("should throw NPE");
10655         } catch (NullPointerException e) {
10656             // Expected
10657         }
10658 
10659         try {
10660             keySet.subSet(startKey, false, null, true);
10661             fail("should throw NPE");
10662         } catch (NullPointerException e) {
10663             // Expected
10664         }
10665 
10666         try {
10667             keySet.subSet(startKey, true, null, false);
10668             fail("should throw NPE");
10669         } catch (NullPointerException e) {
10670             // Expected
10671         }
10672 
10673         try {
10674             keySet.subSet(startKey, true, null, true);
10675             fail("should throw NPE");
10676         } catch (NullPointerException e) {
10677             // Expected
10678         }
10679 
10680     }
10681 
10682     public void test_AscendingSubMapKeySet_lower() {
10683         NavigableSet keySet;
10684         Iterator iterator;
10685         String key, lowerKey;
10686         int value, lowerValue;
10687 
10688         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
10689         iterator = keySet.iterator();
10690         while (iterator.hasNext()) {
10691             key = (String) iterator.next();
10692             value = Integer.valueOf(key);
10693             lowerKey = (String) keySet.lower(key);
10694             if (value > 101) {
10695                 lowerValue = Integer.valueOf(lowerKey);
10696                 assertEquals(value - 1, lowerValue);
10697             } else {
10698                 assertNull(lowerKey);
10699             }
10700         }
10701 
10702         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
10703         iterator = keySet.iterator();
10704         while (iterator.hasNext()) {
10705             key = (String) iterator.next();
10706             value = Integer.valueOf(key);
10707             lowerKey = (String) keySet.lower(key);
10708             if (value > 101) {
10709                 lowerValue = Integer.valueOf(lowerKey);
10710                 assertEquals(value - 1, lowerValue);
10711             } else {
10712                 assertNull(lowerKey);
10713             }
10714         }
10715 
10716         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
10717         iterator = keySet.iterator();
10718         while (iterator.hasNext()) {
10719             key = (String) iterator.next();
10720             value = Integer.valueOf(key);
10721             lowerKey = (String) keySet.lower(key);
10722             if (value > 100) {
10723                 lowerValue = Integer.valueOf(lowerKey);
10724                 assertEquals(value - 1, lowerValue);
10725             } else {
10726                 assertNull(lowerKey);
10727             }
10728         }
10729 
10730         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
10731         iterator = keySet.iterator();
10732         while (iterator.hasNext()) {
10733             key = (String) iterator.next();
10734             value = Integer.valueOf(key);
10735             lowerKey = (String) keySet.lower(key);
10736             if (value > 100) {
10737                 lowerValue = Integer.valueOf(lowerKey);
10738                 assertEquals(value - 1, lowerValue);
10739             } else {
10740                 assertNull(lowerKey);
10741             }
10742         }
10743 
10744         key = new Integer(2).toString();
10745         keySet = tm.headMap(key, true).navigableKeySet();
10746         iterator = keySet.iterator();
10747         iterator.next();// 0
10748         String expectedLowerKey = (String) iterator.next();// 1
10749         assertEquals(expectedLowerKey, keySet.lower(iterator.next()));
10750 
10751         try {
10752             keySet.lower(null);
10753             fail("should throw NPE");
10754         } catch (NullPointerException e) {
10755             // Expected
10756         }
10757 
10758         key = new Integer(0).toString();
10759         keySet = tm.headMap(key, true).navigableKeySet();
10760         assertNull(keySet.lower(key));
10761 
10762         key = new Integer(0).toString();
10763         keySet = tm.headMap(key, false).navigableKeySet();
10764         assertNull(keySet.lower(key));
10765 
10766         key = new Integer(999).toString();
10767         keySet = tm.headMap(key, true).navigableKeySet();
10768         assertNotNull(keySet.lower(key));
10769 
10770         key = new Integer(999).toString();
10771         keySet = tm.headMap(key, false).navigableKeySet();
10772         assertNotNull(keySet.lower(key));
10773     }
10774 
10775     public void test_AscendingSubMapKeySet_higher() {
10776         NavigableSet keySet;
10777         Iterator iterator;
10778         String key, lowerKey;
10779         int value, lowerValue;
10780 
10781         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
10782         iterator = keySet.iterator();
10783         while (iterator.hasNext()) {
10784             key = (String) iterator.next();
10785             value = Integer.valueOf(key);
10786             lowerKey = (String) keySet.higher(key);
10787             if (value < 108) {
10788                 lowerValue = Integer.valueOf(lowerKey);
10789                 assertEquals(value + 1, lowerValue);
10790             } else {
10791                 assertNull(lowerKey);
10792             }
10793         }
10794 
10795         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
10796         iterator = keySet.iterator();
10797         while (iterator.hasNext()) {
10798             key = (String) iterator.next();
10799             value = Integer.valueOf(key);
10800             lowerKey = (String) keySet.higher(key);
10801             if (value < 109) {
10802                 lowerValue = Integer.valueOf(lowerKey);
10803                 assertEquals(value + 1, lowerValue);
10804             } else {
10805                 assertNull(lowerKey);
10806             }
10807         }
10808 
10809         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
10810         iterator = keySet.iterator();
10811         while (iterator.hasNext()) {
10812             key = (String) iterator.next();
10813             value = Integer.valueOf(key);
10814             lowerKey = (String) keySet.higher(key);
10815             if (value < 108) {
10816                 lowerValue = Integer.valueOf(lowerKey);
10817                 assertEquals(value + 1, lowerValue);
10818             } else {
10819                 assertNull(lowerKey);
10820             }
10821         }
10822 
10823         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
10824         iterator = keySet.iterator();
10825         while (iterator.hasNext()) {
10826             key = (String) iterator.next();
10827             value = Integer.valueOf(key);
10828             lowerKey = (String) keySet.higher(key);
10829             if (value < 109) {
10830                 lowerValue = Integer.valueOf(lowerKey);
10831                 assertEquals(value + 1, lowerValue);
10832             } else {
10833                 assertNull(lowerKey);
10834             }
10835         }
10836 
10837         key = new Integer(2).toString();
10838         keySet = tm.headMap(key, true).navigableKeySet();
10839         iterator = keySet.iterator();
10840         iterator.next();// 0
10841         iterator.next();// 1
10842         lowerKey = (String) keySet.higher(iterator.next());
10843         String expectedLowerKey = (String) iterator.next();
10844         assertEquals(expectedLowerKey, lowerKey);
10845 
10846         try {
10847             keySet.higher(null);
10848             fail("should throw NPE");
10849         } catch (NullPointerException e) {
10850             // Expected
10851         }
10852 
10853         key = new Integer(0).toString();
10854         keySet = tm.headMap(key, true).navigableKeySet();
10855         assertNull(keySet.higher(key));
10856 
10857         key = new Integer(0).toString();
10858         keySet = tm.headMap(key, false).navigableKeySet();
10859         assertNull(keySet.higher(key));
10860 
10861         key = new Integer(999).toString();
10862         keySet = tm.headMap(key, true).navigableKeySet();
10863         assertNull(keySet.higher(key));
10864 
10865         key = new Integer(999).toString();
10866         keySet = tm.headMap(key, false).navigableKeySet();
10867         assertNull(keySet.higher(key));
10868     }
10869 
10870     public void test_AscendingSubMapKeySet_ceiling() {
10871         NavigableSet keySet;
10872         String key;
10873         String[] keyArray;
10874 
10875         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
10876         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10877         for (int i = 0, j = 101; i < keyArray.length; i++) {
10878             key = (String) keySet.ceiling(keyArray[i]);
10879             assertEquals(new Integer(i + j).toString(), key);
10880         }
10881 
10882         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
10883         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10884         for (int i = 0, j = 101; i < keyArray.length; i++) {
10885             key = (String) keySet.ceiling(keyArray[i]);
10886             assertEquals(new Integer(i + j).toString(), key);
10887         }
10888 
10889         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
10890         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10891         for (int i = 0, j = 100; i < keyArray.length; i++) {
10892             key = (String) keySet.ceiling(keyArray[i]);
10893             assertEquals(new Integer(i + j).toString(), key);
10894         }
10895 
10896         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
10897         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10898         for (int i = 0, j = 100; i < keyArray.length; i++) {
10899             key = (String) keySet.ceiling(keyArray[i]);
10900             assertEquals(new Integer(i + j).toString(), key);
10901         }
10902 
10903         key = new Integer(2).toString();
10904         keySet = tm.headMap(key, true).navigableKeySet();
10905         Iterator iterator = keySet.iterator();
10906         iterator.next();
10907         assertEquals(new Integer(1).toString(), keySet.ceiling(iterator.next()));
10908 
10909         try {
10910             keySet.ceiling(null);
10911             fail("should throw NPE");
10912         } catch (NullPointerException e) {
10913             // Expected
10914         }
10915 
10916         key = new Integer(0).toString();
10917         keySet = tm.headMap(key, true).navigableKeySet();
10918         assertEquals(key, keySet.ceiling(key));
10919 
10920         key = new Integer(0).toString();
10921         keySet = tm.headMap(key, false).navigableKeySet();
10922         assertNull(keySet.higher(key));
10923 
10924         key = new Integer(999).toString();
10925         keySet = tm.headMap(key, true).navigableKeySet();
10926         assertNull(keySet.higher(key));
10927 
10928         key = new Integer(999).toString();
10929         keySet = tm.headMap(key, false).navigableKeySet();
10930         assertNull(keySet.higher(key));
10931     }
10932 
10933     public void test_AscendingSubMapKeySet_floor() {
10934         NavigableSet keySet;
10935         String key;
10936         String[] keyArray;
10937 
10938         keySet = navigableMap_startExcluded_endExcluded.navigableKeySet();
10939         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10940         for (int i = 0, j = 101; i < keyArray.length; i++) {
10941             key = (String) keySet.floor(keyArray[i]);
10942             assertEquals(new Integer(i + j).toString(), key);
10943         }
10944 
10945         keySet = navigableMap_startExcluded_endIncluded.navigableKeySet();
10946         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10947         for (int i = 0, j = 101; i < keyArray.length; i++) {
10948             key = (String) keySet.floor(keyArray[i]);
10949             assertEquals(new Integer(i + j).toString(), key);
10950         }
10951 
10952         keySet = navigableMap_startIncluded_endExcluded.navigableKeySet();
10953         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10954         for (int i = 0, j = 100; i < keyArray.length; i++) {
10955             key = (String) keySet.floor(keyArray[i]);
10956             assertEquals(new Integer(i + j).toString(), key);
10957         }
10958 
10959         keySet = navigableMap_startIncluded_endIncluded.navigableKeySet();
10960         keyArray = (String[]) keySet.toArray(new String[keySet.size()]);
10961         for (int i = 0, j = 100; i < keyArray.length; i++) {
10962             key = (String) keySet.floor(keyArray[i]);
10963             assertEquals(new Integer(i + j).toString(), key);
10964         }
10965 
10966         key = new Integer(2).toString();
10967         keySet = tm.headMap(key, true).navigableKeySet();
10968         Iterator iterator = keySet.iterator();
10969         iterator.next();
10970         assertEquals(new Integer(1).toString(), keySet.floor(iterator.next()));
10971 
10972         try {
10973             keySet.floor(null);
10974             fail("should throw NPE");
10975         } catch (NullPointerException e) {
10976             // Expected
10977         }
10978 
10979         key = new Integer(0).toString();
10980         keySet = tm.headMap(key, true).navigableKeySet();
10981         assertEquals(key, keySet.floor(key));
10982 
10983         key = new Integer(0).toString();
10984         keySet = tm.headMap(key, false).navigableKeySet();
10985         assertNull(keySet.floor(key));
10986 
10987         key = new Integer(999).toString();
10988         keySet = tm.headMap(key, true).navigableKeySet();
10989         assertEquals(key, keySet.floor(key));
10990 
10991         key = new Integer(999).toString();
10992         keySet = tm.headMap(key, false).navigableKeySet();
10993         assertEquals(new Integer(998).toString(), keySet.floor(key));
10994     }
10995 
10996     public void test_BoundedEntryIterator_next() {
10997         Iterator iterator = subMap_default.entrySet().iterator();
10998         assertTrue(iterator.hasNext());
10999         for (int i = 100; iterator.hasNext(); i++) {
11000             assertEquals(i, ((Entry) iterator.next()).getValue());
11001         }
11002 
11003         try {
11004             iterator.next();
11005             fail("should throw java.util.NoSuchElementException");
11006         } catch (NoSuchElementException e) {
11007             // Expected
11008         }
11009 
11010     }
11011 
11012     public void test_BoundedKeyIterator_next() {
11013         Iterator iterator = subMap_default.keySet().iterator();
11014         assertTrue(iterator.hasNext());
11015         for (int i = 100; iterator.hasNext(); i++) {
11016             assertEquals(new Integer(i).toString(), iterator.next());
11017         }
11018 
11019         try {
11020             iterator.next();
11021             fail("should throw java.util.NoSuchElementException");
11022         } catch (NoSuchElementException e) {
11023             // Expected
11024         }
11025     }
11026 
11027     public void test_BoundedValueIterator_next() {
11028         String startKey = new Integer(101).toString();
11029         String endKey = new Integer(108).toString();
11030 
11031         Collection values = tm.subMap(startKey, endKey).values();
11032         Iterator iter = values.iterator();
11033         for (int i = 101; i < 108; i++) {
11034             assertEquals(i, iter.next());
11035         }
11036         try {
11037             iter.next();
11038             fail("should throw java.util.NoSuchElementException");
11039         } catch (Exception e) {
11040             // Expected
11041         }
11042     }
11043 
11044     /*
11045      * SubMapEntrySet
11046      */
11047     public void test_SubMapEntrySet_Constructor() {
11048     }
11049 
11050     public void test_SubMapEntrySet_contains() {
11051         // covered in test_SubMapEntrySet_remove
11052     }
11053 
11054     public void test_SubMapEntrySet_iterator() {
11055         Set entrySet = subMap_default.entrySet();
11056         Iterator iterator;
11057         Entry entry;
11058         Integer value = new Integer(100);
11059         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11060             entry = (Entry) iterator.next();
11061             assertEquals(value.toString(), entry.getKey());
11062             assertEquals(value, entry.getValue());
11063         }
11064         assertEquals(109, value.intValue());
11065         try {
11066             iterator.next();
11067             fail("should throw NoSuchElementException");
11068         } catch (NoSuchElementException e) {
11069             // Expected
11070         }
11071 
11072         entrySet = subMap_startExcluded_endExcluded.entrySet();
11073         value = new Integer(101);
11074         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11075             entry = (Entry) iterator.next();
11076             assertEquals(value.toString(), entry.getKey());
11077             assertEquals(value, entry.getValue());
11078         }
11079         assertEquals(109, value.intValue());
11080         try {
11081             iterator.next();
11082             fail("should throw NoSuchElementException");
11083         } catch (NoSuchElementException e) {
11084             // Expected
11085         }
11086 
11087         entrySet = subMap_startExcluded_endIncluded.entrySet();
11088         value = new Integer(101);
11089         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11090             entry = (Entry) iterator.next();
11091             assertEquals(value.toString(), entry.getKey());
11092             assertEquals(value, entry.getValue());
11093         }
11094         assertEquals(110, value.intValue());
11095         try {
11096             iterator.next();
11097             fail("should throw NoSuchElementException");
11098         } catch (NoSuchElementException e) {
11099             // Expected
11100         }
11101 
11102         entrySet = subMap_startIncluded_endExcluded.entrySet();
11103         value = new Integer(100);
11104         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11105             entry = (Entry) iterator.next();
11106             assertEquals(value.toString(), entry.getKey());
11107             assertEquals(value, entry.getValue());
11108         }
11109         assertEquals(109, value.intValue());
11110         try {
11111             iterator.next();
11112             fail("should throw NoSuchElementException");
11113         } catch (NoSuchElementException e) {
11114             // Expected
11115         }
11116 
11117         entrySet = subMap_startIncluded_endIncluded.entrySet();
11118         value = new Integer(100);
11119         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11120             entry = (Entry) iterator.next();
11121             assertEquals(value.toString(), entry.getKey());
11122             assertEquals(value, entry.getValue());
11123         }
11124         assertEquals(110, value.intValue());
11125         try {
11126             iterator.next();
11127             fail("should throw NoSuchElementException");
11128         } catch (NoSuchElementException e) {
11129             // Expected
11130         }
11131 
11132         String startKey = new Integer(-1).toString();
11133         String endKey = new Integer(0).toString();
11134         SortedMap subMap = tm.subMap(startKey, endKey);
11135         entrySet = subMap.entrySet();
11136         iterator = entrySet.iterator();
11137         try {
11138             iterator.next();
11139             fail("should throw NoSuchElementException");
11140         } catch (NoSuchElementException e) {
11141             // Expected
11142         }
11143 
11144         endKey = new Integer(1).toString();
11145         subMap = tm.subMap(startKey, endKey);
11146         entrySet = subMap.entrySet();
11147         iterator = entrySet.iterator();
11148         assertEquals(0, ((Entry) iterator.next()).getValue());
11149         try {
11150             iterator.next();
11151             fail("should throw NoSuchElementException");
11152         } catch (NoSuchElementException e) {
11153             // Expected
11154         }
11155 
11156         endKey = new Integer(2000).toString();
11157         subMap = tm.subMap(startKey, endKey);
11158         entrySet = subMap.entrySet();
11159         iterator = entrySet.iterator();
11160         for (int i = 0; i < subMap.size(); i++) {
11161             iterator.next();
11162         }
11163         try {
11164             iterator.next();
11165             fail("should throw NoSuchElementException");
11166         } catch (NoSuchElementException e) {
11167             // Expected
11168         }
11169 
11170         startKey = new Integer(9).toString();
11171         endKey = new Integer(100).toString();
11172         try {
11173             tm.subMap(startKey, endKey);
11174             fail("should throw IllegalArgumentException");
11175         } catch (IllegalArgumentException e) {
11176             // Expected
11177         }
11178 
11179         // With Comparator
11180         entrySet = subMap_default_comparator.entrySet();
11181         value = new Integer(100);
11182         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11183             entry = (Entry) iterator.next();
11184             assertEquals(value.toString(), entry.getKey());
11185             assertEquals(value, entry.getValue());
11186         }
11187         assertEquals(109, value.intValue());
11188         try {
11189             iterator.next();
11190             fail("should throw NoSuchElementException");
11191         } catch (NoSuchElementException e) {
11192             // Expected
11193         }
11194 
11195         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
11196         value = new Integer(101);
11197         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11198             entry = (Entry) iterator.next();
11199             assertEquals(value.toString(), entry.getKey());
11200             assertEquals(value, entry.getValue());
11201         }
11202         assertEquals(109, value.intValue());
11203         try {
11204             iterator.next();
11205             fail("should throw NoSuchElementException");
11206         } catch (NoSuchElementException e) {
11207             // Expected
11208         }
11209 
11210         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
11211         value = new Integer(101);
11212         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11213             entry = (Entry) iterator.next();
11214             assertEquals(value.toString(), entry.getKey());
11215             assertEquals(value, entry.getValue());
11216         }
11217         assertEquals(110, value.intValue());
11218         try {
11219             iterator.next();
11220             fail("should throw NoSuchElementException");
11221         } catch (NoSuchElementException e) {
11222             // Expected
11223         }
11224 
11225         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
11226         value = new Integer(100);
11227         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11228             entry = (Entry) iterator.next();
11229             assertEquals(value.toString(), entry.getKey());
11230             assertEquals(value, entry.getValue());
11231         }
11232         assertEquals(109, value.intValue());
11233         try {
11234             iterator.next();
11235             fail("should throw NoSuchElementException");
11236         } catch (NoSuchElementException e) {
11237             // Expected
11238         }
11239 
11240         entrySet = subMap_startIncluded_endIncluded_comparator.entrySet();
11241         value = new Integer(100);
11242         for (iterator = entrySet.iterator(); iterator.hasNext(); value++) {
11243             entry = (Entry) iterator.next();
11244             assertEquals(value.toString(), entry.getKey());
11245             assertEquals(value, entry.getValue());
11246         }
11247         assertEquals(110, value.intValue());
11248         try {
11249             iterator.next();
11250             fail("should throw NoSuchElementException");
11251         } catch (NoSuchElementException e) {
11252             // Expected
11253         }
11254     }
11255 
11256     public void test_SubMapEntrySet_remove() {
11257         Set entrySet = subMap_default.entrySet();
11258         assertFalse(entrySet.remove(null));
11259         int size = entrySet.size();
11260         for (int i = 0; i < size; i++) {
11261             Iterator iterator = entrySet.iterator();
11262             assertTrue(entrySet.remove(iterator.next()));
11263         }
11264 
11265         entrySet = subMap_startExcluded_endExcluded.entrySet();
11266         assertFalse(entrySet.remove(null));
11267         size = entrySet.size();
11268         for (int i = 0; i < size; i++) {
11269             Iterator iterator = entrySet.iterator();
11270             assertTrue(entrySet.remove(iterator.next()));
11271         }
11272 
11273         entrySet = subMap_startExcluded_endIncluded.entrySet();
11274         assertFalse(entrySet.remove(null));
11275         size = entrySet.size();
11276         for (int i = 0; i < size; i++) {
11277             Iterator iterator = entrySet.iterator();
11278             assertTrue(entrySet.remove(iterator.next()));
11279         }
11280 
11281         entrySet = subMap_startIncluded_endExcluded.entrySet();
11282         assertFalse(entrySet.remove(null));
11283         size = entrySet.size();
11284         for (int i = 0; i < size; i++) {
11285             Iterator iterator = entrySet.iterator();
11286             assertTrue(entrySet.remove(iterator.next()));
11287         }
11288 
11289         entrySet = subMap_startIncluded_endIncluded.entrySet();
11290         assertFalse(entrySet.remove(null));
11291         size = entrySet.size();
11292         for (int i = 0; i < size; i++) {
11293             Iterator iterator = entrySet.iterator();
11294             assertTrue(entrySet.remove(iterator.next()));
11295         }
11296     }
11297 
11298     public void test_SubMapEntrySet_isEmpty() {
11299         assertFalse(subMap_default.entrySet().isEmpty());
11300         assertFalse(subMap_startExcluded_endExcluded.entrySet().isEmpty());
11301         assertFalse(subMap_startExcluded_endIncluded.entrySet().isEmpty());
11302         assertFalse(subMap_startIncluded_endExcluded.entrySet().isEmpty());
11303         assertFalse(subMap_startIncluded_endIncluded.entrySet().isEmpty());
11304 
11305         String startKey = new Integer(0).toString();
11306         String endKey = startKey;
11307         SortedMap subMap = tm.subMap(startKey, endKey);
11308         assertTrue(subMap.entrySet().isEmpty());
11309 
11310         startKey = new Integer(-1).toString();
11311         subMap = tm.subMap(startKey, endKey);
11312         assertTrue(subMap.entrySet().isEmpty());
11313 
11314         endKey = new Integer(1).toString();
11315         subMap = tm.subMap(startKey, endKey);
11316         assertFalse(subMap.entrySet().isEmpty());
11317     }
11318 
11319     public void test_SubMapEntrySet_size() {
11320         assertEquals(9, subMap_default.entrySet().size());
11321         assertEquals(8, subMap_startExcluded_endExcluded.entrySet().size());
11322         assertEquals(9, subMap_startExcluded_endIncluded.entrySet().size());
11323         assertEquals(9, subMap_startIncluded_endExcluded.entrySet().size());
11324         assertEquals(10, subMap_startIncluded_endIncluded.entrySet().size());
11325 
11326         String startKey = new Integer(0).toString();
11327         String endKey = new Integer(2).toString();
11328         SortedMap subMap = tm.subMap(startKey, endKey);
11329         assertEquals(112, subMap.entrySet().size());
11330 
11331         startKey = new Integer(0).toString();
11332         endKey = startKey;
11333         subMap = tm.subMap(startKey, endKey);
11334         assertEquals(0, subMap.entrySet().size());
11335 
11336         startKey = new Integer(-1).toString();
11337         endKey = startKey;
11338         subMap = tm.subMap(startKey, endKey);
11339         assertEquals(0, subMap.entrySet().size());
11340 
11341         endKey = new Integer(1).toString();
11342         subMap = tm.subMap(startKey, endKey);
11343         assertEquals(1, subMap.entrySet().size());
11344 
11345         startKey = new Integer(999).toString();
11346         endKey = startKey;
11347         subMap = tm.subMap(startKey, endKey);
11348         assertEquals(0, subMap.entrySet().size());
11349     }
11350 
11351     /*
11352      * SubMapKeySet
11353      */
11354     public void test_SubMapKeySet_Constructor() {
11355         // covered in other test
11356     }
11357 
11358     public void test_SubMapKeySet_iterator() {
11359         Set keySet = subMap_default.keySet();
11360         Iterator iterator = keySet.iterator();
11361         for (int i = 0; i < keySet.size(); i++) {
11362             assertEquals(new Integer(100 + i).toString(), iterator.next());
11363         }
11364         assertFalse(iterator.hasNext());
11365         try {
11366             iterator.next();
11367             fail("should throw NoSuchElementException");
11368         } catch (NoSuchElementException e) {
11369             // Expected
11370         }
11371 
11372         keySet = subMap_startExcluded_endExcluded.keySet();
11373         iterator = keySet.iterator();
11374         for (int i = 0; i < keySet.size(); i++) {
11375             assertEquals(new Integer(101 + i).toString(), iterator.next());
11376         }
11377         assertFalse(iterator.hasNext());
11378         try {
11379             iterator.next();
11380             fail("should throw NoSuchElementException");
11381         } catch (NoSuchElementException e) {
11382             // Expected
11383         }
11384 
11385         keySet = subMap_startExcluded_endIncluded.keySet();
11386         iterator = keySet.iterator();
11387         for (int i = 0; i < keySet.size(); i++) {
11388             assertEquals(new Integer(101 + i).toString(), iterator.next());
11389         }
11390         assertFalse(iterator.hasNext());
11391         try {
11392             iterator.next();
11393             fail("should throw NoSuchElementException");
11394         } catch (NoSuchElementException e) {
11395             // Expected
11396         }
11397 
11398         keySet = subMap_startIncluded_endExcluded.keySet();
11399         iterator = keySet.iterator();
11400         for (int i = 0; i < keySet.size(); i++) {
11401             assertEquals(new Integer(100 + i).toString(), iterator.next());
11402         }
11403         assertFalse(iterator.hasNext());
11404         try {
11405             iterator.next();
11406             fail("should throw NoSuchElementException");
11407         } catch (NoSuchElementException e) {
11408             // Expected
11409         }
11410 
11411         keySet = subMap_startIncluded_endIncluded.keySet();
11412         iterator = keySet.iterator();
11413         for (int i = 0; i < keySet.size(); i++) {
11414             assertEquals(new Integer(100 + i).toString(), iterator.next());
11415         }
11416         assertFalse(iterator.hasNext());
11417         try {
11418             iterator.next();
11419             fail("should throw NoSuchElementException");
11420         } catch (NoSuchElementException e) {
11421             // Expected
11422         }
11423 
11424         // With Comparator
11425         keySet = subMap_default_comparator.keySet();
11426         iterator = keySet.iterator();
11427         for (int i = 0; i < keySet.size(); i++) {
11428             assertEquals(new Integer(100 + i).toString(), iterator.next());
11429         }
11430         assertFalse(iterator.hasNext());
11431         try {
11432             iterator.next();
11433             fail("should throw NoSuchElementException");
11434         } catch (NoSuchElementException e) {
11435             // Expected
11436         }
11437 
11438         keySet = subMap_startExcluded_endExcluded_comparator.keySet();
11439         iterator = keySet.iterator();
11440         for (int i = 0; i < keySet.size(); i++) {
11441             assertEquals(new Integer(101 + i).toString(), iterator.next());
11442         }
11443         assertFalse(iterator.hasNext());
11444         try {
11445             iterator.next();
11446             fail("should throw NoSuchElementException");
11447         } catch (NoSuchElementException e) {
11448             // Expected
11449         }
11450 
11451         keySet = subMap_startExcluded_endIncluded_comparator.keySet();
11452         iterator = keySet.iterator();
11453         for (int i = 0; i < keySet.size(); i++) {
11454             assertEquals(new Integer(101 + i).toString(), iterator.next());
11455         }
11456         assertFalse(iterator.hasNext());
11457         try {
11458             iterator.next();
11459             fail("should throw NoSuchElementException");
11460         } catch (NoSuchElementException e) {
11461             // Expected
11462         }
11463 
11464         keySet = subMap_startIncluded_endExcluded_comparator.keySet();
11465         iterator = keySet.iterator();
11466         for (int i = 0; i < keySet.size(); i++) {
11467             assertEquals(new Integer(100 + i).toString(), iterator.next());
11468         }
11469         assertFalse(iterator.hasNext());
11470         try {
11471             iterator.next();
11472             fail("should throw NoSuchElementException");
11473         } catch (NoSuchElementException e) {
11474             // Expected
11475         }
11476 
11477         keySet = subMap_startIncluded_endIncluded_comparator.keySet();
11478         iterator = keySet.iterator();
11479         for (int i = 0; i < keySet.size(); i++) {
11480             assertEquals(new Integer(100 + i).toString(), iterator.next());
11481         }
11482         assertFalse(iterator.hasNext());
11483         try {
11484             iterator.next();
11485             fail("should throw NoSuchElementException");
11486         } catch (NoSuchElementException e) {
11487             // Expected
11488         }
11489     }
11490 
11491     public void test_SubMapKeySet_isEmpty() {
11492         assertFalse(subMap_default.keySet().isEmpty());
11493         assertFalse(subMap_startExcluded_endExcluded.keySet().isEmpty());
11494         assertFalse(subMap_startExcluded_endIncluded.keySet().isEmpty());
11495         assertFalse(subMap_startIncluded_endExcluded.keySet().isEmpty());
11496         assertFalse(subMap_startIncluded_endIncluded.keySet().isEmpty());
11497 
11498         String startKey = new Integer(0).toString();
11499         String endKey = startKey;
11500         SortedMap subMap = tm.subMap(startKey, endKey);
11501         assertTrue(subMap.keySet().isEmpty());
11502 
11503         startKey = new Integer(999).toString();
11504         endKey = startKey;
11505         subMap = tm.subMap(startKey, endKey);
11506         assertTrue(subMap.keySet().isEmpty());
11507 
11508         startKey = new Integer(-1).toString();
11509         endKey = new Integer(1).toString();
11510         subMap = tm.subMap(startKey, endKey);
11511         assertFalse(subMap.keySet().isEmpty());
11512 
11513         endKey = new Integer(0).toString();
11514         subMap = tm.subMap(startKey, endKey);
11515         assertTrue(subMap.keySet().isEmpty());
11516     }
11517 
11518     public void test_SubMapKeySet_contains() {
11519         Set keySet = subMap_default.keySet();
11520         try {
11521             keySet.contains(null);
11522             fail("should throw NullPointerException");
11523         } catch (NullPointerException e) {
11524             // Expected
11525         }
11526         String key = new Integer(-1).toString();
11527         assertFalse(keySet.contains(key));
11528         key = new Integer(99).toString();
11529         assertFalse(keySet.contains(key));
11530         key = new Integer(100).toString();
11531         assertTrue(keySet.contains(key));
11532         for (int i = 101; i < 109; i++) {
11533             key = new Integer(i).toString();
11534             assertTrue(keySet.contains(key));
11535         }
11536         key = new Integer(109).toString();
11537         assertFalse(keySet.contains(key));
11538         key = new Integer(110).toString();
11539         assertFalse(keySet.contains(key));
11540         key = new Integer(1001).toString();
11541         assertFalse(keySet.contains(key));
11542 
11543         keySet = subMap_startExcluded_endExcluded.keySet();
11544         try {
11545             keySet.contains(null);
11546             fail("should throw NullPointerException");
11547         } catch (NullPointerException e) {
11548             // Expected
11549         }
11550         key = new Integer(-1).toString();
11551         assertFalse(keySet.contains(key));
11552         key = new Integer(99).toString();
11553         assertFalse(keySet.contains(key));
11554         key = new Integer(100).toString();
11555         assertFalse(keySet.contains(key));
11556         for (int i = 101; i < 109; i++) {
11557             key = new Integer(i).toString();
11558             assertTrue(keySet.contains(key));
11559         }
11560         key = new Integer(109).toString();
11561         assertFalse(keySet.contains(key));
11562         key = new Integer(110).toString();
11563         assertFalse(keySet.contains(key));
11564         key = new Integer(1001).toString();
11565         assertFalse(keySet.contains(key));
11566 
11567         keySet = subMap_startExcluded_endIncluded.keySet();
11568         try {
11569             keySet.contains(null);
11570             fail("should throw NullPointerException");
11571         } catch (NullPointerException e) {
11572             // Expected
11573         }
11574         key = new Integer(-1).toString();
11575         assertFalse(keySet.contains(key));
11576         key = new Integer(99).toString();
11577         assertFalse(keySet.contains(key));
11578         key = new Integer(100).toString();
11579         assertFalse(keySet.contains(key));
11580         for (int i = 101; i < 109; i++) {
11581             key = new Integer(i).toString();
11582             assertTrue(keySet.contains(key));
11583         }
11584         key = new Integer(109).toString();
11585         assertTrue(keySet.contains(key));
11586         key = new Integer(110).toString();
11587         assertFalse(keySet.contains(key));
11588         key = new Integer(1001).toString();
11589         assertFalse(keySet.contains(key));
11590 
11591         keySet = subMap_startIncluded_endExcluded.keySet();
11592         try {
11593             keySet.contains(null);
11594             fail("should throw NullPointerException");
11595         } catch (NullPointerException e) {
11596             // Expected
11597         }
11598         key = new Integer(-1).toString();
11599         assertFalse(keySet.contains(key));
11600         key = new Integer(99).toString();
11601         assertFalse(keySet.contains(key));
11602         key = new Integer(100).toString();
11603         assertTrue(keySet.contains(key));
11604         for (int i = 101; i < 109; i++) {
11605             key = new Integer(i).toString();
11606             assertTrue(keySet.contains(key));
11607         }
11608         key = new Integer(109).toString();
11609         assertFalse(keySet.contains(key));
11610         key = new Integer(110).toString();
11611         assertFalse(keySet.contains(key));
11612         key = new Integer(1001).toString();
11613         assertFalse(keySet.contains(key));
11614 
11615         keySet = subMap_startIncluded_endIncluded.keySet();
11616         try {
11617             keySet.contains(null);
11618             fail("should throw NullPointerException");
11619         } catch (NullPointerException e) {
11620             // Expected
11621         }
11622         key = new Integer(-1).toString();
11623         assertFalse(keySet.contains(key));
11624         key = new Integer(99).toString();
11625         assertFalse(keySet.contains(key));
11626         key = new Integer(100).toString();
11627         assertTrue(keySet.contains(key));
11628         for (int i = 101; i < 109; i++) {
11629             key = new Integer(i).toString();
11630             assertTrue(keySet.contains(key));
11631         }
11632         key = new Integer(109).toString();
11633         assertTrue(keySet.contains(key));
11634         key = new Integer(110).toString();
11635         assertFalse(keySet.contains(key));
11636         key = new Integer(1001).toString();
11637         assertFalse(keySet.contains(key));
11638     }
11639 
11640     public void test_SubMapKeySet_size() {
11641         assertEquals(9, subMap_default.keySet().size());
11642         assertEquals(8, subMap_startExcluded_endExcluded.keySet().size());
11643         assertEquals(9, subMap_startExcluded_endIncluded.keySet().size());
11644         assertEquals(9, subMap_startIncluded_endExcluded.keySet().size());
11645         assertEquals(10, subMap_startIncluded_endIncluded.keySet().size());
11646 
11647         String startKey = new Integer(0).toString();
11648         String endKey = new Integer(2).toString();
11649         SortedMap subMap = tm.subMap(startKey, endKey);
11650         assertEquals(112, subMap.keySet().size());
11651 
11652         startKey = new Integer(0).toString();
11653         endKey = startKey;
11654         subMap = tm.subMap(startKey, endKey);
11655         assertEquals(0, subMap.keySet().size());
11656 
11657         startKey = new Integer(-1).toString();
11658         endKey = startKey;
11659         subMap = tm.subMap(startKey, endKey);
11660         assertEquals(0, subMap.keySet().size());
11661 
11662         endKey = new Integer(1).toString();
11663         subMap = tm.subMap(startKey, endKey);
11664         assertEquals(1, subMap.keySet().size());
11665 
11666         startKey = new Integer(999).toString();
11667         endKey = startKey;
11668         subMap = tm.subMap(startKey, endKey);
11669         assertEquals(0, subMap.keySet().size());
11670     }
11671 
11672     public void test_SubMapKeySet_remove() {
11673         Set keySet = subMap_default.keySet();
11674         try {
11675             keySet.remove(null);
11676             fail("should throw NullPointerException");
11677         } catch (NullPointerException e) {
11678             // Expected
11679         }
11680         int size = keySet.size();
11681         for (int i = 0; i < size; i++) {
11682             Iterator iterator = keySet.iterator();
11683             assertTrue(keySet.remove(iterator.next()));
11684         }
11685 
11686         keySet = subMap_startExcluded_endExcluded.keySet();
11687         try {
11688             keySet.remove(null);
11689             fail("should throw NullPointerException");
11690         } catch (NullPointerException e) {
11691             // Expected
11692         }
11693         size = keySet.size();
11694         for (int i = 0; i < size; i++) {
11695             Iterator iterator = keySet.iterator();
11696             assertTrue(keySet.remove(iterator.next()));
11697         }
11698 
11699         keySet = subMap_startExcluded_endIncluded.keySet();
11700         try {
11701             keySet.remove(null);
11702             fail("should throw NullPointerException");
11703         } catch (NullPointerException e) {
11704             // Expected
11705         }
11706         size = keySet.size();
11707         for (int i = 0; i < size; i++) {
11708             Iterator iterator = keySet.iterator();
11709             assertTrue(keySet.remove(iterator.next()));
11710         }
11711 
11712         keySet = subMap_startIncluded_endExcluded.keySet();
11713         try {
11714             keySet.remove(null);
11715             fail("should throw NullPointerException");
11716         } catch (NullPointerException e) {
11717             // Expected
11718         }
11719         size = keySet.size();
11720         for (int i = 0; i < size; i++) {
11721             Iterator iterator = keySet.iterator();
11722             assertTrue(keySet.remove(iterator.next()));
11723         }
11724 
11725         keySet = subMap_startIncluded_endIncluded.keySet();
11726         try {
11727             keySet.remove(null);
11728             fail("should throw NullPointerException");
11729         } catch (NullPointerException e) {
11730             // Expected
11731         }
11732         size = keySet.size();
11733         for (int i = 0; i < size; i++) {
11734             Iterator iterator = keySet.iterator();
11735             assertTrue(keySet.remove(iterator.next()));
11736         }
11737     }
11738 
11739     /*
11740      * AscendingSubMapEntrySet
11741      */
11742 
11743     public void test_AscendingSubMapEntrySet_comparator() {
11744         Set entrySet;
11745         NavigableSet ascendingSubMapEntrySet;
11746 
11747         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
11748         if (entrySet instanceof NavigableSet) {
11749             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11750             assertNull(ascendingSubMapEntrySet.comparator());
11751         }
11752 
11753         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
11754         if (entrySet instanceof NavigableSet) {
11755             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11756             assertNull(ascendingSubMapEntrySet.comparator());
11757         }
11758 
11759         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
11760         if (entrySet instanceof NavigableSet) {
11761             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11762             assertNull(ascendingSubMapEntrySet.comparator());
11763         }
11764 
11765         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
11766         if (entrySet instanceof NavigableSet) {
11767             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11768             assertNull(ascendingSubMapEntrySet.comparator());
11769         }
11770     }
11771 
11772     public void test_AscendingSubMapEntrySet_descendingSet() {
11773         Set entrySet;
11774         NavigableSet ascendingSubMapEntrySet, descendingSet;
11775         Entry entry;
11776         int value;
11777         Iterator iterator;
11778 
11779         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
11780         if (entrySet instanceof NavigableSet) {
11781             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11782             descendingSet = ascendingSubMapEntrySet.descendingSet();
11783             iterator = descendingSet.iterator();
11784             assertTrue(iterator.hasNext());
11785             for (value = 108; iterator.hasNext(); value--) {
11786                 entry = (Entry) iterator.next();
11787                 assertEquals(value, entry.getValue());
11788             }
11789             assertEquals(100, value);
11790         }
11791 
11792         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
11793         if (entrySet instanceof NavigableSet) {
11794             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11795             descendingSet = ascendingSubMapEntrySet.descendingSet();
11796             iterator = descendingSet.iterator();
11797             assertTrue(iterator.hasNext());
11798             for (value = 109; iterator.hasNext(); value--) {
11799                 entry = (Entry) iterator.next();
11800                 assertEquals(value, entry.getValue());
11801             }
11802             assertEquals(100, value);
11803         }
11804 
11805         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
11806         if (entrySet instanceof NavigableSet) {
11807             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11808             descendingSet = ascendingSubMapEntrySet.descendingSet();
11809             iterator = descendingSet.iterator();
11810             assertTrue(iterator.hasNext());
11811             for (value = 108; iterator.hasNext(); value--) {
11812                 entry = (Entry) iterator.next();
11813                 assertEquals(value, entry.getValue());
11814             }
11815             assertEquals(99, value);
11816         }
11817 
11818         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
11819         if (entrySet instanceof NavigableSet) {
11820             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11821             descendingSet = ascendingSubMapEntrySet.descendingSet();
11822             iterator = descendingSet.iterator();
11823             assertTrue(iterator.hasNext());
11824             for (value = 109; iterator.hasNext(); value--) {
11825                 entry = (Entry) iterator.next();
11826                 assertEquals(value, entry.getValue());
11827             }
11828             assertEquals(99, value);
11829         }
11830     }
11831 
11832     public void test_AscendingSubMapEntrySet_descendingIterator() {
11833         Set entrySet;
11834         NavigableSet ascendingSubMapEntrySet;
11835         Iterator iterator;
11836         Entry entry;
11837         int value;
11838 
11839         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
11840         if (entrySet instanceof NavigableSet) {
11841             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11842             iterator = ascendingSubMapEntrySet.descendingIterator();
11843             assertTrue(iterator.hasNext());
11844             for (value = 108; iterator.hasNext(); value--) {
11845                 entry = (Entry) iterator.next();
11846                 assertEquals(value, entry.getValue());
11847             }
11848             assertEquals(100, value);
11849         }
11850 
11851         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
11852         if (entrySet instanceof NavigableSet) {
11853             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11854             iterator = ascendingSubMapEntrySet.descendingIterator();
11855             assertTrue(iterator.hasNext());
11856             for (value = 109; iterator.hasNext(); value--) {
11857                 entry = (Entry) iterator.next();
11858                 assertEquals(value, entry.getValue());
11859             }
11860             assertEquals(100, value);
11861         }
11862 
11863         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
11864         if (entrySet instanceof NavigableSet) {
11865             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11866             iterator = ascendingSubMapEntrySet.descendingIterator();
11867             assertTrue(iterator.hasNext());
11868             for (value = 108; iterator.hasNext(); value--) {
11869                 entry = (Entry) iterator.next();
11870                 assertEquals(value, entry.getValue());
11871             }
11872             assertEquals(99, value);
11873         }
11874 
11875         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
11876         if (entrySet instanceof NavigableSet) {
11877             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11878             iterator = ascendingSubMapEntrySet.descendingIterator();
11879             assertTrue(iterator.hasNext());
11880             for (value = 109; iterator.hasNext(); value--) {
11881                 entry = (Entry) iterator.next();
11882                 assertEquals(value, entry.getValue());
11883             }
11884             assertEquals(99, value);
11885         }
11886 
11887         String startKey = new Integer(2).toString();
11888         entrySet = tm.headMap(startKey, true).entrySet();
11889         if (entrySet instanceof NavigableSet) {
11890             ascendingSubMapEntrySet = (NavigableSet) entrySet;
11891             iterator = ascendingSubMapEntrySet.descendingIterator();
11892             assertTrue(iterator.hasNext());
11893             assertEquals(2, ((Entry) iterator.next()).getValue());
11894         }
11895     }
11896 
11897     public void test_AscendingSubMapEntrySet_pollFirst_startExcluded_endExcluded() {
11898         Set entrySet = navigableMap_startExcluded_endExcluded.entrySet();
11899         if (entrySet instanceof NavigableSet) {
11900             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11901             for (int value = 101; value < 109; value++) {
11902                 Entry entry = (Entry) ascendingSubMapEntrySet.pollFirst();
11903                 assertEquals(value, entry.getValue());
11904             }
11905             assertTrue(ascendingSubMapEntrySet.isEmpty());
11906             // should return null if the set is empty.
11907             assertNull(ascendingSubMapEntrySet.pollFirst());
11908         }
11909     }
11910 
11911     public void test_AscendingSubMapEntrySet_pollFirst_startExcluded_endIncluded() {
11912         Set entrySet = navigableMap_startExcluded_endIncluded.entrySet();
11913         if (entrySet instanceof NavigableSet) {
11914             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11915             for (int value = 101; value < 110; value++) {
11916                 Entry entry = (Entry) ascendingSubMapEntrySet.pollFirst();
11917                 assertEquals(value, entry.getValue());
11918             }
11919             assertTrue(ascendingSubMapEntrySet.isEmpty());
11920             // should return null if the set is empty.
11921             assertNull(ascendingSubMapEntrySet.pollFirst());
11922         }
11923     }
11924 
11925     public void test_AscendingSubMapEntrySet_pollFirst_startIncluded_endExcluded() {
11926         Set entrySet = navigableMap_startIncluded_endExcluded.entrySet();
11927         if (entrySet instanceof NavigableSet) {
11928             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11929             for (int value = 100; value < 109; value++) {
11930                 Entry entry = (Entry) ascendingSubMapEntrySet.pollFirst();
11931                 assertEquals(value, entry.getValue());
11932             }
11933             assertTrue(ascendingSubMapEntrySet.isEmpty());
11934             // should return null if the set is empty.
11935             assertNull(ascendingSubMapEntrySet.pollFirst());
11936         }
11937     }
11938 
11939     public void test_AscendingSubMapEntrySet_pollFirst_startIncluded_endIncluded() {
11940         Set entrySet = navigableMap_startIncluded_endIncluded.entrySet();
11941         if (entrySet instanceof NavigableSet) {
11942             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11943             for (int value = 100; value < 110; value++) {
11944                 Entry entry = (Entry) ascendingSubMapEntrySet.pollFirst();
11945                 assertEquals(value, entry.getValue());
11946             }
11947             assertTrue(ascendingSubMapEntrySet.isEmpty());
11948             // should return null if the set is empty.
11949             assertNull(ascendingSubMapEntrySet.pollFirst());
11950         }
11951     }
11952 
11953     public void test_AscendingSubMapEntrySet_pollLast_startExcluded_endExcluded() {
11954         Set entrySet = navigableMap_startExcluded_endExcluded.entrySet();
11955         if (entrySet instanceof NavigableSet) {
11956             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11957             for (int value = 108; value > 100; value--) {
11958                 Entry entry = (Entry) ascendingSubMapEntrySet.pollLast();
11959                 assertEquals(value, entry.getValue());
11960             }
11961             assertTrue(ascendingSubMapEntrySet.isEmpty());
11962             // should return null if the set is empty
11963             assertNull(ascendingSubMapEntrySet.pollLast());
11964         }
11965 
11966         // NavigableMap ascendingSubMap = tm.headMap("2", true);
11967         // Set entrySet = ascendingSubMap.entrySet();
11968         // Object last;
11969         // if (entrySet instanceof NavigableSet) {
11970         // last = ((NavigableSet) entrySet).pollLast();
11971         // assertEquals("2=2", last.toString());
11972         // }
11973         //
11974         // ascendingSubMap = tm.tailMap("2", true);
11975         // entrySet = ascendingSubMap.entrySet();
11976         // if (entrySet instanceof NavigableSet) {
11977         // last = ((NavigableSet) entrySet).pollLast();
11978         // assertEquals("999=999", last.toString());
11979         // }
11980     }
11981 
11982     public void test_AscendingSubMapEntrySet_pollLast_startExcluded_endIncluded() {
11983         Set entrySet = navigableMap_startExcluded_endIncluded.entrySet();
11984         if (entrySet instanceof NavigableSet) {
11985             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
11986             for (int value = 109; value > 100; value--) {
11987                 Entry entry = (Entry) ascendingSubMapEntrySet.pollLast();
11988                 assertEquals(value, entry.getValue());
11989             }
11990             assertTrue(ascendingSubMapEntrySet.isEmpty());
11991             // should return null if the set is empty
11992             assertNull(ascendingSubMapEntrySet.pollLast());
11993         }
11994     }
11995 
11996     public void test_AscendingSubMapEntrySet_pollLast_startIncluded_endExcluded() {
11997         Set entrySet = navigableMap_startIncluded_endExcluded.entrySet();
11998         if (entrySet instanceof NavigableSet) {
11999             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
12000             for (int value = 108; value > 99; value--) {
12001                 Entry entry = (Entry) ascendingSubMapEntrySet.pollLast();
12002                 assertEquals(value, entry.getValue());
12003             }
12004             assertTrue(ascendingSubMapEntrySet.isEmpty());
12005             // should return null if the set is empty
12006             assertNull(ascendingSubMapEntrySet.pollLast());
12007         }
12008     }
12009 
12010     public void test_AscendingSubMapEntrySet_pollLast_startIncluded_endIncluded() {
12011         Set entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12012         if (entrySet instanceof NavigableSet) {
12013             NavigableSet ascendingSubMapEntrySet = (NavigableSet) entrySet;
12014             for (int value = 109; value > 99; value--) {
12015                 Entry entry = (Entry) ascendingSubMapEntrySet.pollLast();
12016                 assertEquals(value, entry.getValue());
12017             }
12018             assertTrue(ascendingSubMapEntrySet.isEmpty());
12019             // should return null if the set is empty
12020             assertNull(ascendingSubMapEntrySet.pollLast());
12021         }
12022     }
12023 
12024     public void test_AscendingSubMapEntrySet_headSet() {
12025         Set entrySet, headSet;
12026         NavigableSet ascendingSubMapEntrySet;
12027         Iterator iterator, headSetIterator;
12028         Entry entry;
12029         int value;
12030 
12031         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12032         if (entrySet instanceof NavigableSet) {
12033             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12034             iterator = ascendingSubMapEntrySet.iterator();
12035             while (iterator.hasNext()) {
12036                 entry = (Entry) iterator.next();
12037                 headSet = ascendingSubMapEntrySet.headSet(entry);
12038                 headSetIterator = headSet.iterator();
12039                 for (value = 101; headSetIterator.hasNext(); value++) {
12040                     assertEquals(value, ((Entry) headSetIterator.next())
12041                             .getValue());
12042                 }
12043                 assertEquals(entry.getValue(), value);
12044                 try {
12045                     headSetIterator.next();
12046                     fail("should throw NoSuchElementException");
12047                 } catch (NoSuchElementException e) {
12048                     // Expected
12049                 }
12050 
12051                 headSet = ascendingSubMapEntrySet.headSet(entry, false);
12052                 headSetIterator = headSet.iterator();
12053                 for (value = 101; headSetIterator.hasNext(); value++) {
12054                     assertEquals(value, ((Entry) headSetIterator.next())
12055                             .getValue());
12056                 }
12057                 assertEquals(entry.getValue(), value);
12058                 try {
12059                     headSetIterator.next();
12060                     fail("should throw NoSuchElementException");
12061                 } catch (NoSuchElementException e) {
12062                     // Expected
12063                 }
12064 
12065                 headSet = ascendingSubMapEntrySet.headSet(entry, true);
12066                 headSetIterator = headSet.iterator();
12067                 for (value = 101; headSetIterator.hasNext(); value++) {
12068                     assertEquals(value, ((Entry) headSetIterator.next())
12069                             .getValue());
12070                 }
12071                 assertEquals(entry.getValue(), value - 1);
12072                 try {
12073                     headSetIterator.next();
12074                     fail("should throw NoSuchElementException");
12075                 } catch (NoSuchElementException e) {
12076                     // Expected
12077                 }
12078             }
12079         }
12080 
12081         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
12082         if (entrySet instanceof NavigableSet) {
12083             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12084             iterator = ascendingSubMapEntrySet.iterator();
12085             while (iterator.hasNext()) {
12086                 entry = (Entry) iterator.next();
12087                 headSet = ascendingSubMapEntrySet.headSet(entry);
12088                 headSetIterator = headSet.iterator();
12089                 for (value = 101; headSetIterator.hasNext(); value++) {
12090                     assertEquals(value, ((Entry) headSetIterator.next())
12091                             .getValue());
12092                 }
12093                 assertEquals(entry.getValue(), value);
12094                 try {
12095                     headSetIterator.next();
12096                     fail("should throw NoSuchElementException");
12097                 } catch (NoSuchElementException e) {
12098                     // Expected
12099                 }
12100 
12101                 headSet = ascendingSubMapEntrySet.headSet(entry, false);
12102                 headSetIterator = headSet.iterator();
12103                 for (value = 101; headSetIterator.hasNext(); value++) {
12104                     assertEquals(value, ((Entry) headSetIterator.next())
12105                             .getValue());
12106                 }
12107                 assertEquals(entry.getValue(), value);
12108                 try {
12109                     headSetIterator.next();
12110                     fail("should throw NoSuchElementException");
12111                 } catch (NoSuchElementException e) {
12112                     // Expected
12113                 }
12114 
12115                 headSet = ascendingSubMapEntrySet.headSet(entry, true);
12116                 headSetIterator = headSet.iterator();
12117                 for (value = 101; headSetIterator.hasNext(); value++) {
12118                     assertEquals(value, ((Entry) headSetIterator.next())
12119                             .getValue());
12120                 }
12121                 assertEquals(entry.getValue(), value - 1);
12122                 try {
12123                     headSetIterator.next();
12124                     fail("should throw NoSuchElementException");
12125                 } catch (NoSuchElementException e) {
12126                     // Expected
12127                 }
12128             }
12129         }
12130 
12131         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
12132         if (entrySet instanceof NavigableSet) {
12133             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12134             iterator = ascendingSubMapEntrySet.iterator();
12135             while (iterator.hasNext()) {
12136                 entry = (Entry) iterator.next();
12137                 headSet = ascendingSubMapEntrySet.headSet(entry);
12138                 headSetIterator = headSet.iterator();
12139                 for (value = 100; headSetIterator.hasNext(); value++) {
12140                     assertEquals(value, ((Entry) headSetIterator.next())
12141                             .getValue());
12142                 }
12143                 assertEquals(entry.getValue(), value);
12144                 try {
12145                     headSetIterator.next();
12146                     fail("should throw NoSuchElementException");
12147                 } catch (NoSuchElementException e) {
12148                     // Expected
12149                 }
12150 
12151                 headSet = ascendingSubMapEntrySet.headSet(entry, false);
12152                 headSetIterator = headSet.iterator();
12153                 for (value = 100; headSetIterator.hasNext(); value++) {
12154                     assertEquals(value, ((Entry) headSetIterator.next())
12155                             .getValue());
12156                 }
12157                 assertEquals(entry.getValue(), value);
12158                 try {
12159                     headSetIterator.next();
12160                     fail("should throw NoSuchElementException");
12161                 } catch (NoSuchElementException e) {
12162                     // Expected
12163                 }
12164 
12165                 headSet = ascendingSubMapEntrySet.headSet(entry, true);
12166                 headSetIterator = headSet.iterator();
12167                 for (value = 100; headSetIterator.hasNext(); value++) {
12168                     assertEquals(value, ((Entry) headSetIterator.next())
12169                             .getValue());
12170                 }
12171                 assertEquals(entry.getValue(), value - 1);
12172                 try {
12173                     headSetIterator.next();
12174                     fail("should throw NoSuchElementException");
12175                 } catch (NoSuchElementException e) {
12176                     // Expected
12177                 }
12178             }
12179         }
12180 
12181         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12182         if (entrySet instanceof NavigableSet) {
12183             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12184             iterator = ascendingSubMapEntrySet.iterator();
12185             while (iterator.hasNext()) {
12186                 entry = (Entry) iterator.next();
12187                 headSet = ascendingSubMapEntrySet.headSet(entry);
12188                 headSetIterator = headSet.iterator();
12189                 for (value = 100; headSetIterator.hasNext(); value++) {
12190                     assertEquals(value, ((Entry) headSetIterator.next())
12191                             .getValue());
12192                 }
12193                 assertEquals(entry.getValue(), value);
12194                 try {
12195                     headSetIterator.next();
12196                     fail("should throw NoSuchElementException");
12197                 } catch (NoSuchElementException e) {
12198                     // Expected
12199                 }
12200 
12201                 headSet = ascendingSubMapEntrySet.headSet(entry, false);
12202                 headSetIterator = headSet.iterator();
12203                 for (value = 100; headSetIterator.hasNext(); value++) {
12204                     assertEquals(value, ((Entry) headSetIterator.next())
12205                             .getValue());
12206                 }
12207                 assertEquals(entry.getValue(), value);
12208                 try {
12209                     headSetIterator.next();
12210                     fail("should throw NoSuchElementException");
12211                 } catch (NoSuchElementException e) {
12212                     // Expected
12213                 }
12214 
12215                 headSet = ascendingSubMapEntrySet.headSet(entry, true);
12216                 headSetIterator = headSet.iterator();
12217                 for (value = 100; headSetIterator.hasNext(); value++) {
12218                     assertEquals(value, ((Entry) headSetIterator.next())
12219                             .getValue());
12220                 }
12221                 assertEquals(entry.getValue(), value - 1);
12222                 try {
12223                     headSetIterator.next();
12224                     fail("should throw NoSuchElementException");
12225                 } catch (NoSuchElementException e) {
12226                     // Expected
12227                 }
12228             }
12229         }
12230 
12231         // NavigableMap ascendingSubMap = tm.headMap("1", true);
12232         // entrySet = ascendingSubMap.entrySet();
12233         // if (entrySet instanceof SortedSet) {
12234         // Iterator it = entrySet.iterator();
12235         // it.next();
12236         // Object end = it.next();// 1=1
12237         // Set headSet = ((NavigableSet) entrySet).headSet(end);// inclusive
12238         // // false
12239         // assertEquals(1, headSet.size());
12240         // }
12241     }
12242 
12243     public void test_AscendingSubMapEntrySet_tailSet() {
12244         Set entrySet, tailSet;
12245         NavigableSet ascendingSubMapEntrySet;
12246         Iterator iterator, tailSetIterator;
12247         Entry entry;
12248         int value;
12249 
12250         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12251         if (entrySet instanceof NavigableSet) {
12252             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12253             iterator = entrySet.iterator();
12254             while (iterator.hasNext()) {
12255                 entry = (Entry) iterator.next();
12256                 tailSet = ascendingSubMapEntrySet.tailSet(entry);
12257                 tailSetIterator = tailSet.iterator();
12258                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12259                         .hasNext(); value++) {
12260                     assertEquals(value, ((Entry) tailSetIterator.next())
12261                             .getValue());
12262                 }
12263                 assertEquals(109, value);
12264                 try {
12265                     tailSetIterator.next();
12266                     fail("should throw NoSuchElementException");
12267                 } catch (NoSuchElementException e) {
12268                     // Expected
12269                 }
12270 
12271                 tailSet = ascendingSubMapEntrySet.tailSet(entry, false);
12272                 tailSetIterator = tailSet.iterator();
12273                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12274                         .hasNext(); value++) {
12275                     assertEquals(value, ((Entry) tailSetIterator.next())
12276                             .getValue());
12277                 }
12278                 assertEquals(109, value);
12279                 try {
12280                     tailSetIterator.next();
12281                     fail("should throw NoSuchElementException");
12282                 } catch (NoSuchElementException e) {
12283                     // Expected
12284                 }
12285 
12286                 tailSet = ascendingSubMapEntrySet.tailSet(entry, true);
12287                 tailSetIterator = tailSet.iterator();
12288                 for (value = (Integer) entry.getValue(); tailSetIterator
12289                         .hasNext(); value++) {
12290                     assertEquals(value, ((Entry) tailSetIterator.next())
12291                             .getValue());
12292                 }
12293                 assertEquals(109, value);
12294                 try {
12295                     tailSetIterator.next();
12296                     fail("should throw NoSuchElementException");
12297                 } catch (NoSuchElementException e) {
12298                     // Expected
12299                 }
12300             }
12301         }
12302 
12303         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
12304         if (entrySet instanceof NavigableSet) {
12305             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12306             iterator = entrySet.iterator();
12307             while (iterator.hasNext()) {
12308                 entry = (Entry) iterator.next();
12309                 tailSet = ascendingSubMapEntrySet.tailSet(entry);
12310                 tailSetIterator = tailSet.iterator();
12311                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12312                         .hasNext(); value++) {
12313                     assertEquals(value, ((Entry) tailSetIterator.next())
12314                             .getValue());
12315                 }
12316                 assertEquals(110, value);
12317                 try {
12318                     tailSetIterator.next();
12319                     fail("should throw NoSuchElementException");
12320                 } catch (NoSuchElementException e) {
12321                     // Expected
12322                 }
12323 
12324                 tailSet = ascendingSubMapEntrySet.tailSet(entry, false);
12325                 tailSetIterator = tailSet.iterator();
12326                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12327                         .hasNext(); value++) {
12328                     assertEquals(value, ((Entry) tailSetIterator.next())
12329                             .getValue());
12330                 }
12331                 assertEquals(110, value);
12332                 try {
12333                     tailSetIterator.next();
12334                     fail("should throw NoSuchElementException");
12335                 } catch (NoSuchElementException e) {
12336                     // Expected
12337                 }
12338 
12339                 tailSet = ascendingSubMapEntrySet.tailSet(entry, true);
12340                 tailSetIterator = tailSet.iterator();
12341                 for (value = (Integer) entry.getValue(); tailSetIterator
12342                         .hasNext(); value++) {
12343                     assertEquals(value, ((Entry) tailSetIterator.next())
12344                             .getValue());
12345                 }
12346                 assertEquals(110, value);
12347                 try {
12348                     tailSetIterator.next();
12349                     fail("should throw NoSuchElementException");
12350                 } catch (NoSuchElementException e) {
12351                     // Expected
12352                 }
12353             }
12354         }
12355 
12356         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
12357         if (entrySet instanceof NavigableSet) {
12358             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12359             iterator = entrySet.iterator();
12360             while (iterator.hasNext()) {
12361                 entry = (Entry) iterator.next();
12362                 tailSet = ascendingSubMapEntrySet.tailSet(entry);
12363                 tailSetIterator = tailSet.iterator();
12364                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12365                         .hasNext(); value++) {
12366                     assertEquals(value, ((Entry) tailSetIterator.next())
12367                             .getValue());
12368                 }
12369                 assertEquals(109, value);
12370                 try {
12371                     tailSetIterator.next();
12372                     fail("should throw NoSuchElementException");
12373                 } catch (NoSuchElementException e) {
12374                     // Expected
12375                 }
12376 
12377                 tailSet = ascendingSubMapEntrySet.tailSet(entry, false);
12378                 tailSetIterator = tailSet.iterator();
12379                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12380                         .hasNext(); value++) {
12381                     assertEquals(value, ((Entry) tailSetIterator.next())
12382                             .getValue());
12383                 }
12384                 assertEquals(109, value);
12385                 try {
12386                     tailSetIterator.next();
12387                     fail("should throw NoSuchElementException");
12388                 } catch (NoSuchElementException e) {
12389                     // Expected
12390                 }
12391 
12392                 tailSet = ascendingSubMapEntrySet.tailSet(entry, true);
12393                 tailSetIterator = tailSet.iterator();
12394                 for (value = (Integer) entry.getValue(); tailSetIterator
12395                         .hasNext(); value++) {
12396                     assertEquals(value, ((Entry) tailSetIterator.next())
12397                             .getValue());
12398                 }
12399                 assertEquals(109, value);
12400                 try {
12401                     tailSetIterator.next();
12402                     fail("should throw NoSuchElementException");
12403                 } catch (NoSuchElementException e) {
12404                     // Expected
12405                 }
12406             }
12407         }
12408 
12409         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12410         if (entrySet instanceof NavigableSet) {
12411             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12412             iterator = entrySet.iterator();
12413             while (iterator.hasNext()) {
12414                 entry = (Entry) iterator.next();
12415                 tailSet = ascendingSubMapEntrySet.tailSet(entry);
12416                 tailSetIterator = tailSet.iterator();
12417                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12418                         .hasNext(); value++) {
12419                     assertEquals(value, ((Entry) tailSetIterator.next())
12420                             .getValue());
12421                 }
12422                 assertEquals(110, value);
12423                 try {
12424                     tailSetIterator.next();
12425                     fail("should throw NoSuchElementException");
12426                 } catch (NoSuchElementException e) {
12427                     // Expected
12428                 }
12429 
12430                 tailSet = ascendingSubMapEntrySet.tailSet(entry, false);
12431                 tailSetIterator = tailSet.iterator();
12432                 for (value = (Integer) entry.getValue() + 1; tailSetIterator
12433                         .hasNext(); value++) {
12434                     assertEquals(value, ((Entry) tailSetIterator.next())
12435                             .getValue());
12436                 }
12437                 assertEquals(110, value);
12438                 try {
12439                     tailSetIterator.next();
12440                     fail("should throw NoSuchElementException");
12441                 } catch (NoSuchElementException e) {
12442                     // Expected
12443                 }
12444 
12445                 tailSet = ascendingSubMapEntrySet.tailSet(entry, true);
12446                 tailSetIterator = tailSet.iterator();
12447                 for (value = (Integer) entry.getValue(); tailSetIterator
12448                         .hasNext(); value++) {
12449                     assertEquals(value, ((Entry) tailSetIterator.next())
12450                             .getValue());
12451                 }
12452                 assertEquals(110, value);
12453                 try {
12454                     tailSetIterator.next();
12455                     fail("should throw NoSuchElementException");
12456                 } catch (NoSuchElementException e) {
12457                     // Expected
12458                 }
12459             }
12460         }
12461 
12462         // NavigableMap ascendingSubMap = tm.headMap("1", true);
12463         // Set entrySet = ascendingSubMap.entrySet();
12464         // if (entrySet instanceof NavigableSet) {
12465         // Iterator it = entrySet.iterator();
12466         // Object start = it.next();// 0=0
12467         // Set tailSet = ((NavigableSet) entrySet).tailSet(start);// default
12468         // // inclusive
12469         // // false
12470         // assertEquals(1, tailSet.size());
12471         // }
12472     }
12473 
12474     public void test_AscendingSubMapEntrySet_subSet() {
12475         Set entrySet, subSet;
12476         NavigableSet ascendingSubMapEntrySet;
12477 
12478         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12479         if (entrySet instanceof NavigableSet) {
12480             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12481             Iterator iteratorStart = ascendingSubMapEntrySet.iterator();
12482             while (iteratorStart.hasNext()) {
12483                 Entry startEntry = (Entry) iteratorStart.next();
12484                 Iterator iteratorEnd = ascendingSubMapEntrySet.iterator();
12485                 while (iteratorEnd.hasNext()) {
12486                     Entry endEntry = (Entry) iteratorEnd.next();
12487                     int startIndex = (Integer) startEntry.getValue();
12488                     int endIndex = (Integer) endEntry.getValue();
12489                     if (startIndex > endIndex) {
12490                         try {
12491                             ascendingSubMapEntrySet
12492                                     .subSet(startEntry, endEntry);
12493                             fail("should throw IllegalArgumentException");
12494                         } catch (IllegalArgumentException e) {
12495                             // Expected
12496                         }
12497 
12498                         try {
12499                             ascendingSubMapEntrySet.subSet(startEntry, false,
12500                                     endEntry, false);
12501                             fail("should throw IllegalArgumentException");
12502                         } catch (IllegalArgumentException e) {
12503                             // Expected
12504                         }
12505 
12506                         try {
12507                             ascendingSubMapEntrySet.subSet(startEntry, false,
12508                                     endEntry, true);
12509                             fail("should throw IllegalArgumentException");
12510                         } catch (IllegalArgumentException e) {
12511                             // Expected
12512                         }
12513 
12514                         try {
12515                             ascendingSubMapEntrySet.subSet(startEntry, true,
12516                                     endEntry, false);
12517                             fail("should throw IllegalArgumentException");
12518                         } catch (IllegalArgumentException e) {
12519                             // Expected
12520                         }
12521 
12522                         try {
12523                             ascendingSubMapEntrySet.subSet(startEntry, true,
12524                                     endEntry, true);
12525                             fail("should throw IllegalArgumentException");
12526                         } catch (IllegalArgumentException e) {
12527                             // Expected
12528                         }
12529                     } else {
12530                         subSet = ascendingSubMapEntrySet.subSet(startEntry,
12531                                 endEntry);
12532                         Iterator subSetIterator = subSet.iterator();
12533                         for (int index = startIndex + 1; subSetIterator
12534                                 .hasNext(); index++) {
12535                             assertEquals(index, ((Entry) subSetIterator.next())
12536                                     .getValue());
12537                         }
12538 
12539                         subSet = ascendingSubMapEntrySet.subSet(startEntry,
12540                                 false, endEntry, false);
12541                         subSetIterator = subSet.iterator();
12542                         for (int index = startIndex + 1; subSetIterator
12543                                 .hasNext(); index++) {
12544                             assertEquals(index, ((Entry) subSetIterator.next())
12545                                     .getValue());
12546                         }
12547 
12548                         subSet = ascendingSubMapEntrySet.subSet(startEntry,
12549                                 false, endEntry, true);
12550                         subSetIterator = subSet.iterator();
12551                         for (int index = startIndex + 1; subSetIterator
12552                                 .hasNext(); index++) {
12553                             assertEquals(index, ((Entry) subSetIterator.next())
12554                                     .getValue());
12555                         }
12556 
12557                         subSet = ascendingSubMapEntrySet.subSet(startEntry,
12558                                 true, endEntry, false);
12559                         subSetIterator = subSet.iterator();
12560                         for (int index = startIndex; subSetIterator.hasNext(); index++) {
12561                             assertEquals(index, ((Entry) subSetIterator.next())
12562                                     .getValue());
12563                         }
12564 
12565                         subSet = ascendingSubMapEntrySet.subSet(startEntry,
12566                                 true, endEntry, true);
12567                         subSetIterator = subSet.iterator();
12568                         for (int index = startIndex; subSetIterator.hasNext(); index++) {
12569                             assertEquals(index, ((Entry) subSetIterator.next())
12570                                     .getValue());
12571                         }
12572                     }
12573                 }
12574             }
12575         }
12576 
12577         String endKey = new Integer(2).toString();
12578         entrySet = tm.headMap(endKey, true).entrySet();
12579         if (entrySet instanceof NavigableSet) {
12580             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12581             Iterator iterator = entrySet.iterator();
12582             Object startEntry = iterator.next();
12583             iterator.next();
12584             Object endEntry = iterator.next();
12585             subSet = ascendingSubMapEntrySet.subSet(startEntry, endEntry);
12586             assertEquals(1, subSet.size());
12587 
12588             subSet = ascendingSubMapEntrySet.subSet(startEntry, false,
12589                     endEntry, false);
12590             assertEquals(1, subSet.size());
12591 
12592             subSet = ascendingSubMapEntrySet.subSet(startEntry, false,
12593                     endEntry, true);
12594             assertEquals(2, subSet.size());
12595 
12596             subSet = ascendingSubMapEntrySet.subSet(startEntry, true, endEntry,
12597                     false);
12598             assertEquals(2, subSet.size());
12599 
12600             subSet = ascendingSubMapEntrySet.subSet(startEntry, true, endEntry,
12601                     true);
12602             assertEquals(3, subSet.size());
12603         }
12604     }
12605 
12606     public void test_AscendingSubMapEntrySet_lower() {
12607         Set entrySet;
12608         NavigableSet ascendingSubMapEntrySet;
12609         Iterator iterator;
12610         Entry entry, lowerEntry;
12611         int value;
12612 
12613         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12614         if (entrySet instanceof NavigableSet) {
12615             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12616             iterator = ascendingSubMapEntrySet.iterator();
12617             while (iterator.hasNext()) {
12618                 entry = (Entry) iterator.next();
12619                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12620                 value = (Integer) entry.getValue();
12621                 if (value > 101) {
12622                     assertEquals(value - 1, lowerEntry.getValue());
12623                 } else {
12624                     assertNull(lowerEntry);
12625                 }
12626             }
12627         }
12628 
12629         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
12630         if (entrySet instanceof NavigableSet) {
12631             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12632             iterator = ascendingSubMapEntrySet.iterator();
12633             while (iterator.hasNext()) {
12634                 entry = (Entry) iterator.next();
12635                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12636                 value = (Integer) entry.getValue();
12637                 if (value > 101) {
12638                     assertEquals(value - 1, lowerEntry.getValue());
12639                 } else {
12640                     assertNull(lowerEntry);
12641                 }
12642             }
12643         }
12644 
12645         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
12646         if (entrySet instanceof NavigableSet) {
12647             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12648             iterator = ascendingSubMapEntrySet.iterator();
12649             while (iterator.hasNext()) {
12650                 entry = (Entry) iterator.next();
12651                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12652                 value = (Integer) entry.getValue();
12653                 if (value > 100) {
12654                     assertEquals(value - 1, lowerEntry.getValue());
12655                 } else {
12656                     assertNull(lowerEntry);
12657                 }
12658             }
12659         }
12660 
12661         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12662         if (entrySet instanceof NavigableSet) {
12663             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12664             iterator = ascendingSubMapEntrySet.iterator();
12665             while (iterator.hasNext()) {
12666                 entry = (Entry) iterator.next();
12667                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12668                 value = (Integer) entry.getValue();
12669                 if (value > 100) {
12670                     assertEquals(value - 1, lowerEntry.getValue());
12671                 } else {
12672                     assertNull(lowerEntry);
12673                 }
12674             }
12675         }
12676 
12677         String endKey = new Integer(2).toString();
12678         entrySet = tm.headMap(endKey, true).entrySet();
12679         if (entrySet instanceof NavigableSet) {
12680             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12681             iterator = entrySet.iterator();
12682             Entry expectedEntry = (Entry) iterator.next();
12683             entry = (Entry) iterator.next();
12684             assertEquals(expectedEntry, ascendingSubMapEntrySet.lower(entry));
12685         }
12686 
12687         // With Comparator
12688 
12689         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
12690         if (entrySet instanceof NavigableSet) {
12691             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12692             iterator = ascendingSubMapEntrySet.iterator();
12693             while (iterator.hasNext()) {
12694                 entry = (Entry) iterator.next();
12695                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12696                 value = (Integer) entry.getValue();
12697                 if (value > 101) {
12698                     assertEquals(value - 1, lowerEntry.getValue());
12699                 } else {
12700                     assertNull(lowerEntry);
12701                 }
12702             }
12703         }
12704 
12705         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
12706         if (entrySet instanceof NavigableSet) {
12707             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12708             iterator = ascendingSubMapEntrySet.iterator();
12709             while (iterator.hasNext()) {
12710                 entry = (Entry) iterator.next();
12711                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12712                 value = (Integer) entry.getValue();
12713                 if (value > 101) {
12714                     assertEquals(value - 1, lowerEntry.getValue());
12715                 } else {
12716                     assertNull(lowerEntry);
12717                 }
12718             }
12719         }
12720 
12721         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
12722         if (entrySet instanceof NavigableSet) {
12723             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12724             iterator = ascendingSubMapEntrySet.iterator();
12725             while (iterator.hasNext()) {
12726                 entry = (Entry) iterator.next();
12727                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12728                 value = (Integer) entry.getValue();
12729                 if (value > 100) {
12730                     assertEquals(value - 1, lowerEntry.getValue());
12731                 } else {
12732                     assertNull(lowerEntry);
12733                 }
12734             }
12735         }
12736 
12737         entrySet = subMap_startIncluded_endIncluded_comparator.entrySet();
12738         if (entrySet instanceof NavigableSet) {
12739             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12740             iterator = ascendingSubMapEntrySet.iterator();
12741             while (iterator.hasNext()) {
12742                 entry = (Entry) iterator.next();
12743                 lowerEntry = (Entry) ascendingSubMapEntrySet.lower(entry);
12744                 value = (Integer) entry.getValue();
12745                 if (value > 100) {
12746                     assertEquals(value - 1, lowerEntry.getValue());
12747                 } else {
12748                     assertNull(lowerEntry);
12749                 }
12750             }
12751         }
12752     }
12753 
12754     public void test_AscendingSubMapEntrySet_higher() {
12755         Set entrySet;
12756         NavigableSet ascendingSubMapEntrySet;
12757         Iterator iterator;
12758         Entry entry, lowerEntry;
12759         int value;
12760 
12761         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12762         if (entrySet instanceof NavigableSet) {
12763             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12764             iterator = ascendingSubMapEntrySet.iterator();
12765             while (iterator.hasNext()) {
12766                 entry = (Entry) iterator.next();
12767                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12768                 value = (Integer) entry.getValue();
12769                 if (value < 108) {
12770                     assertEquals(value + 1, lowerEntry.getValue());
12771                 } else {
12772                     assertNull(lowerEntry);
12773                 }
12774             }
12775         }
12776 
12777         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
12778         if (entrySet instanceof NavigableSet) {
12779             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12780             iterator = ascendingSubMapEntrySet.iterator();
12781             while (iterator.hasNext()) {
12782                 entry = (Entry) iterator.next();
12783                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12784                 value = (Integer) entry.getValue();
12785                 if (value < 109) {
12786                     assertEquals(value + 1, lowerEntry.getValue());
12787                 } else {
12788                     assertNull(lowerEntry);
12789                 }
12790             }
12791         }
12792 
12793         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
12794         if (entrySet instanceof NavigableSet) {
12795             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12796             iterator = ascendingSubMapEntrySet.iterator();
12797             while (iterator.hasNext()) {
12798                 entry = (Entry) iterator.next();
12799                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12800                 value = (Integer) entry.getValue();
12801                 if (value < 108) {
12802                     assertEquals(value + 1, lowerEntry.getValue());
12803                 } else {
12804                     assertNull(lowerEntry);
12805                 }
12806             }
12807         }
12808 
12809         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12810         if (entrySet instanceof NavigableSet) {
12811             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12812             iterator = ascendingSubMapEntrySet.iterator();
12813             while (iterator.hasNext()) {
12814                 entry = (Entry) iterator.next();
12815                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12816                 value = (Integer) entry.getValue();
12817                 if (value < 109) {
12818                     assertEquals(value + 1, lowerEntry.getValue());
12819                 } else {
12820                     assertNull(lowerEntry);
12821                 }
12822             }
12823         }
12824 
12825         String endKey = new Integer(2).toString();
12826         entrySet = tm.headMap(endKey, true).entrySet();
12827         if (entrySet instanceof NavigableSet) {
12828             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12829             iterator = entrySet.iterator();
12830             entry = (Entry) iterator.next();
12831             Entry expectedEntry = (Entry) iterator.next();
12832             assertEquals(expectedEntry, ascendingSubMapEntrySet.higher(entry));
12833         }
12834 
12835         // With Comparator
12836         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
12837         if (entrySet instanceof NavigableSet) {
12838             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12839             iterator = ascendingSubMapEntrySet.iterator();
12840             while (iterator.hasNext()) {
12841                 entry = (Entry) iterator.next();
12842                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12843                 value = (Integer) entry.getValue();
12844                 if (value < 108) {
12845                     assertEquals(value + 1, lowerEntry.getValue());
12846                 } else {
12847                     assertNull(lowerEntry);
12848                 }
12849             }
12850         }
12851 
12852         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
12853         if (entrySet instanceof NavigableSet) {
12854             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12855             iterator = ascendingSubMapEntrySet.iterator();
12856             while (iterator.hasNext()) {
12857                 entry = (Entry) iterator.next();
12858                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12859                 value = (Integer) entry.getValue();
12860                 if (value < 109) {
12861                     assertEquals(value + 1, lowerEntry.getValue());
12862                 } else {
12863                     assertNull(lowerEntry);
12864                 }
12865             }
12866         }
12867 
12868         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
12869         if (entrySet instanceof NavigableSet) {
12870             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12871             iterator = ascendingSubMapEntrySet.iterator();
12872             while (iterator.hasNext()) {
12873                 entry = (Entry) iterator.next();
12874                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12875                 value = (Integer) entry.getValue();
12876                 if (value < 108) {
12877                     assertEquals(value + 1, lowerEntry.getValue());
12878                 } else {
12879                     assertNull(lowerEntry);
12880                 }
12881             }
12882         }
12883 
12884         entrySet = subMap_startIncluded_endIncluded_comparator.entrySet();
12885         if (entrySet instanceof NavigableSet) {
12886             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12887             iterator = ascendingSubMapEntrySet.iterator();
12888             while (iterator.hasNext()) {
12889                 entry = (Entry) iterator.next();
12890                 lowerEntry = (Entry) ascendingSubMapEntrySet.higher(entry);
12891                 value = (Integer) entry.getValue();
12892                 if (value < 109) {
12893                     assertEquals(value + 1, lowerEntry.getValue());
12894                 } else {
12895                     assertNull(lowerEntry);
12896                 }
12897             }
12898         }
12899     }
12900 
12901     public void test_AscendingSubMapEntrySet_ceiling() {
12902         Set entrySet;
12903         NavigableSet ascendingSubMapEntrySet;
12904         Iterator iterator;
12905 
12906         Set entrySet_beyondBound;
12907         Iterator iterator_beyondBound;
12908         Entry beyondBoundEntry;
12909 
12910         Entry entry, lowerEntry;
12911         int value = 0;
12912 
12913         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
12914         if (entrySet instanceof NavigableSet) {
12915             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12916             try {
12917                 ascendingSubMapEntrySet.ceiling(null);
12918                 fail("should throw NullPointerException");
12919             } catch (NullPointerException e) {
12920                 // Expected
12921             }
12922 
12923             iterator = ascendingSubMapEntrySet.iterator();
12924             while (iterator.hasNext()) {
12925                 entry = (Entry) iterator.next();
12926                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
12927                 value = (Integer) entry.getValue();
12928                 assertEquals(value, lowerEntry.getValue());
12929             }
12930             assertEquals(108, value);
12931 
12932         }
12933 
12934         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
12935         if (entrySet instanceof NavigableSet) {
12936             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12937             try {
12938                 ascendingSubMapEntrySet.ceiling(null);
12939                 fail("should throw NullPointerException");
12940             } catch (NullPointerException e) {
12941                 // Expected
12942             }
12943 
12944             iterator = ascendingSubMapEntrySet.iterator();
12945             while (iterator.hasNext()) {
12946                 entry = (Entry) iterator.next();
12947                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
12948                 value = (Integer) entry.getValue();
12949                 assertEquals(value, lowerEntry.getValue());
12950             }
12951             assertEquals(109, value);
12952         }
12953 
12954         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
12955         if (entrySet instanceof NavigableSet) {
12956             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12957             try {
12958                 ascendingSubMapEntrySet.ceiling(null);
12959                 fail("should throw NullPointerException");
12960             } catch (NullPointerException e) {
12961                 // Expected
12962             }
12963 
12964             iterator = ascendingSubMapEntrySet.iterator();
12965             while (iterator.hasNext()) {
12966                 entry = (Entry) iterator.next();
12967                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
12968                 value = (Integer) entry.getValue();
12969                 assertEquals(value, lowerEntry.getValue());
12970             }
12971             assertEquals(108, value);
12972         }
12973 
12974         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
12975         if (entrySet instanceof NavigableSet) {
12976             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12977             try {
12978                 ascendingSubMapEntrySet.ceiling(null);
12979                 fail("should throw NullPointerException");
12980             } catch (NullPointerException e) {
12981                 // Expected
12982             }
12983 
12984             iterator = ascendingSubMapEntrySet.iterator();
12985             while (iterator.hasNext()) {
12986                 entry = (Entry) iterator.next();
12987                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
12988                 value = (Integer) entry.getValue();
12989                 assertEquals(value, lowerEntry.getValue());
12990             }
12991             assertEquals(109, value);
12992         }
12993 
12994         // With Comparator
12995         entrySet = subMap_startIncluded_endIncluded_comparator.entrySet();
12996         if (entrySet instanceof NavigableSet) {
12997             ascendingSubMapEntrySet = (NavigableSet) entrySet;
12998             try {
12999                 ascendingSubMapEntrySet.ceiling(null);
13000                 fail("should throw NullPointerException");
13001             } catch (NullPointerException e) {
13002                 // Expected
13003             }
13004 
13005             iterator = ascendingSubMapEntrySet.iterator();
13006             while (iterator.hasNext()) {
13007                 entry = (Entry) iterator.next();
13008                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
13009                 value = (Integer) entry.getValue();
13010                 assertEquals(value, lowerEntry.getValue());
13011             }
13012             assertEquals(109, value);
13013         }
13014 
13015         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
13016         if (entrySet instanceof NavigableSet) {
13017             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13018             try {
13019                 ascendingSubMapEntrySet.ceiling(null);
13020                 fail("should throw NullPointerException");
13021             } catch (NullPointerException e) {
13022                 // Expected
13023             }
13024 
13025             iterator = ascendingSubMapEntrySet.iterator();
13026             while (iterator.hasNext()) {
13027                 entry = (Entry) iterator.next();
13028                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
13029                 value = (Integer) entry.getValue();
13030                 assertEquals(value, lowerEntry.getValue());
13031             }
13032             assertEquals(108, value);
13033         }
13034 
13035         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
13036         if (entrySet instanceof NavigableSet) {
13037             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13038             try {
13039                 ascendingSubMapEntrySet.ceiling(null);
13040                 fail("should throw NullPointerException");
13041             } catch (NullPointerException e) {
13042                 // Expected
13043             }
13044 
13045             iterator = ascendingSubMapEntrySet.iterator();
13046             while (iterator.hasNext()) {
13047                 entry = (Entry) iterator.next();
13048                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
13049                 value = (Integer) entry.getValue();
13050                 assertEquals(value, lowerEntry.getValue());
13051             }
13052             assertEquals(109, value);
13053         }
13054 
13055         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
13056         if (entrySet instanceof NavigableSet) {
13057             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13058             try {
13059                 ascendingSubMapEntrySet.ceiling(null);
13060                 fail("should throw NullPointerException");
13061             } catch (NullPointerException e) {
13062                 // Expected
13063             }
13064 
13065             iterator = ascendingSubMapEntrySet.iterator();
13066             while (iterator.hasNext()) {
13067                 entry = (Entry) iterator.next();
13068                 lowerEntry = (Entry) ascendingSubMapEntrySet.ceiling(entry);
13069                 value = (Integer) entry.getValue();
13070                 assertEquals(value, lowerEntry.getValue());
13071             }
13072             assertEquals(108, value);
13073         }
13074     }
13075 
13076     public void test_AscendingSubMapEntrySet_floor() {
13077         Set entrySet;
13078         NavigableSet ascendingSubMapEntrySet;
13079         Iterator iterator;
13080         Entry entry, floorEntry;
13081         int value;
13082 
13083         entrySet = navigableMap_startExcluded_endExcluded.entrySet();
13084         if (entrySet instanceof NavigableSet) {
13085             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13086             try {
13087                 ascendingSubMapEntrySet.floor(null);
13088                 fail("should throw NullPointerException");
13089             } catch (NullPointerException e) {
13090                 // Expected
13091             }
13092 
13093             iterator = ascendingSubMapEntrySet.iterator();
13094             for (int i = 101; i < 109; i++) {
13095                 entry = (Entry) iterator.next();
13096                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13097                 assertEquals(entry.getValue(), floorEntry.getValue());
13098             }
13099             assertFalse(iterator.hasNext());
13100         }
13101 
13102         entrySet = navigableMap_startExcluded_endIncluded.entrySet();
13103         if (entrySet instanceof NavigableSet) {
13104             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13105             try {
13106                 ascendingSubMapEntrySet.floor(null);
13107                 fail("should throw NullPointerException");
13108             } catch (NullPointerException e) {
13109                 // Expected
13110             }
13111 
13112             iterator = ascendingSubMapEntrySet.iterator();
13113             for (int i = 101; i < 110; i++) {
13114                 entry = (Entry) iterator.next();
13115                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13116                 assertEquals(entry.getValue(), floorEntry.getValue());
13117             }
13118             assertFalse(iterator.hasNext());
13119         }
13120 
13121         entrySet = navigableMap_startIncluded_endExcluded.entrySet();
13122         if (entrySet instanceof NavigableSet) {
13123             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13124             try {
13125                 ascendingSubMapEntrySet.floor(null);
13126                 fail("should throw NullPointerException");
13127             } catch (NullPointerException e) {
13128                 // Expected
13129             }
13130 
13131             iterator = ascendingSubMapEntrySet.iterator();
13132             for (int i = 100; i < 109; i++) {
13133                 entry = (Entry) iterator.next();
13134                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13135                 assertEquals(entry.getValue(), floorEntry.getValue());
13136             }
13137             assertFalse(iterator.hasNext());
13138         }
13139 
13140         entrySet = navigableMap_startIncluded_endIncluded.entrySet();
13141         if (entrySet instanceof NavigableSet) {
13142             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13143             try {
13144                 ascendingSubMapEntrySet.floor(null);
13145                 fail("should throw NullPointerException");
13146             } catch (NullPointerException e) {
13147                 // Expected
13148             }
13149 
13150             iterator = ascendingSubMapEntrySet.iterator();
13151             for (int i = 100; i < 110; i++) {
13152                 entry = (Entry) iterator.next();
13153                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13154                 assertEquals(entry.getValue(), floorEntry.getValue());
13155             }
13156             assertFalse(iterator.hasNext());
13157         }
13158 
13159         // With Comparator
13160         entrySet = subMap_startExcluded_endExcluded_comparator.entrySet();
13161         if (entrySet instanceof NavigableSet) {
13162             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13163             try {
13164                 ascendingSubMapEntrySet.floor(null);
13165                 fail("should throw NullPointerException");
13166             } catch (NullPointerException e) {
13167                 // Expected
13168             }
13169 
13170             iterator = ascendingSubMapEntrySet.iterator();
13171             for (int i = 101; i < 109; i++) {
13172                 entry = (Entry) iterator.next();
13173                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13174                 assertEquals(entry.getValue(), floorEntry.getValue());
13175             }
13176             assertFalse(iterator.hasNext());
13177         }
13178 
13179         entrySet = subMap_startExcluded_endIncluded_comparator.entrySet();
13180         if (entrySet instanceof NavigableSet) {
13181             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13182             try {
13183                 ascendingSubMapEntrySet.floor(null);
13184                 fail("should throw NullPointerException");
13185             } catch (NullPointerException e) {
13186                 // Expected
13187             }
13188 
13189             iterator = ascendingSubMapEntrySet.iterator();
13190             for (int i = 101; i < 110; i++) {
13191                 entry = (Entry) iterator.next();
13192                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13193                 assertEquals(entry.getValue(), floorEntry.getValue());
13194             }
13195             assertFalse(iterator.hasNext());
13196         }
13197 
13198         entrySet = subMap_startIncluded_endExcluded_comparator.entrySet();
13199         if (entrySet instanceof NavigableSet) {
13200             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13201             try {
13202                 ascendingSubMapEntrySet.floor(null);
13203                 fail("should throw NullPointerException");
13204             } catch (NullPointerException e) {
13205                 // Expected
13206             }
13207 
13208             iterator = ascendingSubMapEntrySet.iterator();
13209             for (int i = 100; i < 109; i++) {
13210                 entry = (Entry) iterator.next();
13211                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13212                 assertEquals(entry.getValue(), floorEntry.getValue());
13213             }
13214             assertFalse(iterator.hasNext());
13215         }
13216 
13217         entrySet = subMap_startIncluded_endIncluded.entrySet();
13218         if (entrySet instanceof NavigableSet) {
13219             ascendingSubMapEntrySet = (NavigableSet) entrySet;
13220             try {
13221                 ascendingSubMapEntrySet.floor(null);
13222                 fail("should throw NullPointerException");
13223             } catch (NullPointerException e) {
13224                 // Expected
13225             }
13226 
13227             iterator = ascendingSubMapEntrySet.iterator();
13228             for (int i = 100; i < 110; i++) {
13229                 entry = (Entry) iterator.next();
13230                 floorEntry = (Entry) ascendingSubMapEntrySet.floor(entry);
13231                 assertEquals(entry.getValue(), floorEntry.getValue());
13232             }
13233             assertFalse(iterator.hasNext());
13234         }
13235     }
13236 
13237     @Override
13238     protected void setUp() {
13239         tm = new TreeMap();
13240         tm_comparator = new TreeMap(new MockComparator());
13241         for (int i = 0; i < objArray.length; i++) {
13242             Object x = objArray[i] = new Integer(i);
13243             tm.put(x.toString(), x);
13244             tm_comparator.put(x.toString(), x);
13245         }
13246 
13247         subMap_default = tm.subMap(objArray[100].toString(), objArray[109]
13248                 .toString());
13249         subMap_startExcluded_endExcluded = tm.subMap(objArray[100].toString(),
13250                 false, objArray[109].toString(), false);
13251         subMap_startExcluded_endIncluded = tm.subMap(objArray[100].toString(),
13252                 false, objArray[109].toString(), true);
13253         subMap_startIncluded_endExcluded = tm.subMap(objArray[100].toString(),
13254                 true, objArray[109].toString(), false);
13255         subMap_startIncluded_endIncluded = tm.subMap(objArray[100].toString(),
13256                 true, objArray[109].toString(), true);
13257 
13258         subMap_default_beforeStart_100 = tm.subMap(objArray[0].toString(),
13259                 objArray[1].toString());
13260 
13261         subMap_default_afterEnd_109 = tm.subMap(objArray[110].toString(),
13262                 objArray[119].toString());
13263 
13264         assertTrue(subMap_startExcluded_endExcluded instanceof NavigableMap);
13265         assertTrue(subMap_startExcluded_endIncluded instanceof NavigableMap);
13266         assertTrue(subMap_startIncluded_endExcluded instanceof NavigableMap);
13267         assertTrue(subMap_startIncluded_endIncluded instanceof NavigableMap);
13268 
13269         navigableMap_startExcluded_endExcluded = (NavigableMap) subMap_startExcluded_endExcluded;
13270         navigableMap_startExcluded_endIncluded = (NavigableMap) subMap_startExcluded_endIncluded;
13271         navigableMap_startIncluded_endExcluded = (NavigableMap) subMap_startIncluded_endExcluded;
13272         navigableMap_startIncluded_endIncluded = (NavigableMap) subMap_startIncluded_endIncluded;
13273 
13274         subMap_default_comparator = tm_comparator.subMap(objArray[100]
13275                 .toString(), objArray[109].toString());
13276         subMap_startExcluded_endExcluded_comparator = tm_comparator.subMap(
13277                 objArray[100].toString(), false, objArray[109].toString(),
13278                 false);
13279 
13280         subMap_startExcluded_endIncluded_comparator = tm_comparator
13281                 .subMap(objArray[100].toString(), false, objArray[109]
13282                         .toString(), true);
13283         subMap_startIncluded_endExcluded_comparator = tm_comparator
13284                 .subMap(objArray[100].toString(), true, objArray[109]
13285                         .toString(), false);
13286         subMap_startIncluded_endIncluded_comparator = tm_comparator.subMap(
13287                 objArray[100].toString(), true, objArray[109].toString(), true);
13288     }
13289 
13290     @Override
13291     protected void tearDown() {
13292         tm = null;
13293         tm_comparator = null;
13294 
13295         subMap_default = null;
13296         subMap_startExcluded_endExcluded = null;
13297         subMap_startExcluded_endIncluded = null;
13298         subMap_startIncluded_endExcluded = null;
13299         subMap_startIncluded_endIncluded = null;
13300 
13301         subMap_default_beforeStart_100 = null;
13302         subMap_default_afterEnd_109 = null;
13303 
13304         subMap_default_comparator = null;
13305         subMap_startExcluded_endExcluded_comparator = null;
13306         subMap_startExcluded_endIncluded_comparator = null;
13307         subMap_startIncluded_endExcluded_comparator = null;
13308         subMap_startIncluded_endIncluded_comparator = null;
13309     }
13310 
13311     public void test_lower_null() throws Exception {
13312         NavigableMap map = tm.subMap(objArray[100].toString(), true,
13313                 objArray[100].toString(), false);
13314         assertNull(map.ceilingKey(objArray[100].toString()));
13315         assertNull(map.floorKey(objArray[100].toString()));
13316         assertNull(map.lowerKey(objArray[100].toString()));
13317         assertNull(map.higherKey(objArray[100].toString()));
13318         assertNull(map.ceilingKey(objArray[111].toString()));
13319         assertNull(map.floorKey(objArray[111].toString()));
13320         assertNull(map.lowerKey(objArray[111].toString()));
13321         assertNull(map.higherKey(objArray[111].toString()));
13322         assertNull(map.ceilingKey(objArray[1].toString()));
13323         assertNull(map.floorKey(objArray[1].toString()));
13324         assertNull(map.lowerKey(objArray[1].toString()));
13325         assertNull(map.higherKey(objArray[1].toString()));
13326         map = map.descendingMap();
13327         assertNull(map.ceilingKey(objArray[100].toString()));
13328         assertNull(map.floorKey(objArray[100].toString()));
13329         assertNull(map.lowerKey(objArray[100].toString()));
13330         assertNull(map.higherKey(objArray[100].toString()));
13331         assertNull(map.ceilingKey(objArray[111].toString()));
13332         assertNull(map.floorKey(objArray[111].toString()));
13333         assertNull(map.lowerKey(objArray[111].toString()));
13334         assertNull(map.higherKey(objArray[111].toString()));
13335         assertNull(map.ceilingKey(objArray[1].toString()));
13336         assertNull(map.floorKey(objArray[1].toString()));
13337         assertNull(map.lowerKey(objArray[1].toString()));
13338         assertNull(map.higherKey(objArray[1].toString()));
13339     }
13340 
13341     public void test_lower_tail() throws Exception {
13342         NavigableMap map = tm.subMap(objArray[102].toString(), true,
13343                 objArray[103].toString(), false);
13344         assertTrue(map.containsKey(objArray[102].toString()));
13345         assertFalse(map.containsKey(objArray[101].toString()));
13346         assertFalse(map.containsKey(objArray[103].toString()));
13347         assertFalse(map.containsKey(objArray[104].toString()));
13348         map = map.descendingMap();
13349         assertTrue(map.containsKey(objArray[102].toString()));
13350         assertFalse(map.containsKey(objArray[101].toString()));
13351         assertFalse(map.containsKey(objArray[103].toString()));
13352         assertFalse(map.containsKey(objArray[104].toString()));
13353         map = tm.subMap(objArray[102].toString(), true, objArray[102]
13354                 .toString(), false);
13355         assertFalse(map.containsKey(objArray[102].toString()));
13356         assertFalse(map.containsKey(objArray[101].toString()));
13357         assertFalse(map.containsKey(objArray[103].toString()));
13358         assertFalse(map.containsKey(objArray[104].toString()));
13359         map = map.descendingMap();
13360         assertFalse(map.containsKey(objArray[102].toString()));
13361         assertFalse(map.containsKey(objArray[101].toString()));
13362         assertFalse(map.containsKey(objArray[103].toString()));
13363         assertFalse(map.containsKey(objArray[104].toString()));
13364     }
13365 
13366     public void test_contains_null() throws Exception {
13367         NavigableMap map = tm.subMap(objArray[100].toString(), true,
13368                 objArray[100].toString(), false);
13369         assertFalse(map.containsKey(objArray[100].toString()));
13370         assertFalse(map.containsKey(objArray[10].toString()));
13371         assertFalse(map.containsKey(objArray[101].toString()));
13372         assertFalse(map.containsKey(objArray[102].toString()));
13373         assertFalse(map.containsKey(objArray[1].toString()));
13374         map = map.descendingMap();
13375         assertFalse(map.containsKey(objArray[100].toString()));
13376         assertFalse(map.containsKey(objArray[10].toString()));
13377         assertFalse(map.containsKey(objArray[101].toString()));
13378         assertFalse(map.containsKey(objArray[102].toString()));
13379         assertFalse(map.containsKey(objArray[1].toString()));
13380     }
13381 
13382     public void test_contains() throws Exception {
13383         NavigableMap map = tm.subMap(objArray[102].toString(), true,
13384                 objArray[103].toString(), false);
13385         assertFalse(map.containsKey(objArray[100].toString()));
13386         assertFalse(map.containsKey(objArray[104].toString()));
13387         assertFalse(map.containsKey(objArray[101].toString()));
13388         assertTrue(map.containsKey(objArray[102].toString()));
13389         map = map.descendingMap();
13390         assertFalse(map.containsKey(objArray[100].toString()));
13391         assertFalse(map.containsKey(objArray[104].toString()));
13392         assertFalse(map.containsKey(objArray[101].toString()));
13393         assertTrue(map.containsKey(objArray[102].toString()));
13394     }
13395 
13396     public void test_size() throws Exception {
13397         NavigableMap map = tm.subMap(objArray[102].toString(), true,
13398                 objArray[103].toString(), false);
13399         assertEquals(0, map.headMap(objArray[102].toString(), false).size());
13400         assertEquals(1, map.headMap(objArray[102].toString(), true).size());
13401         try {
13402             assertEquals(1, map.headMap(objArray[103].toString(), true).size());
13403             fail("should throw IAE");
13404         } catch (IllegalArgumentException e) {
13405         }
13406         assertEquals(1, map.headMap(objArray[103].toString(), false).size());
13407         assertEquals(1, map.tailMap(objArray[102].toString(), true).size());
13408         assertEquals(0, map.tailMap(objArray[102].toString(), false).size());
13409         assertTrue(map.headMap(objArray[103].toString(), false).containsKey(
13410                 objArray[102].toString()));
13411         try {
13412             assertTrue(map.headMap(objArray[103].toString(), true).containsKey(
13413                     objArray[102].toString()));
13414             fail("should throw IAE");
13415         } catch (IllegalArgumentException e) {
13416         }
13417         assertFalse(map.headMap(objArray[102].toString(), false).containsKey(
13418                 objArray[102].toString()));
13419         assertTrue(map.headMap(objArray[102].toString(), true).containsKey(
13420                 objArray[102].toString()));
13421         assertTrue(map.tailMap(objArray[102].toString(), true).containsKey(
13422                 objArray[102].toString()));
13423         assertFalse(map.tailMap(objArray[102].toString(), true).containsKey(
13424                 objArray[103].toString()));
13425         try {
13426             assertEquals(0, map.tailMap(objArray[101].toString()).size());
13427             fail("should throw IAE");
13428         } catch (IllegalArgumentException e) {
13429         }
13430         map = map.descendingMap();
13431         try {
13432             map = map.subMap(objArray[103].toString(), true, objArray[102]
13433                     .toString(), true);
13434             fail("should throw IAE");
13435         } catch (IllegalArgumentException e) {
13436         }
13437         map = map.subMap(objArray[102].toString(), true, objArray[102]
13438                 .toString(), true);
13439         assertEquals(1, map.headMap(objArray[102].toString(), true).size());
13440         assertEquals(0, map.headMap(objArray[102].toString(), false).size());
13441         try {
13442             assertEquals(0, map.headMap(objArray[103].toString(), true).size());
13443             fail("should throw IAE");
13444         } catch (IllegalArgumentException e) {
13445         }
13446 
13447         assertEquals(1, map.tailMap(objArray[102].toString(), true).size());
13448         try {
13449             assertFalse(map.headMap(objArray[103].toString(), true)
13450                     .containsKey(objArray[102].toString()));
13451             fail("should throw IAE");
13452         } catch (IllegalArgumentException e) {
13453         }
13454         assertTrue(map.headMap(objArray[102].toString(), true).containsKey(
13455                 objArray[102].toString()));
13456         assertFalse(map.headMap(objArray[102].toString(), false).containsKey(
13457                 objArray[102].toString()));
13458         assertTrue(map.tailMap(objArray[102].toString(), true).containsKey(
13459                 objArray[102].toString()));
13460         assertFalse(map.tailMap(objArray[102].toString(), true).containsKey(
13461                 objArray[103].toString()));
13462         try {
13463             assertEquals(0, map.tailMap(objArray[101].toString()).size());
13464             fail("should throw IAE");
13465         } catch (IllegalArgumentException e) {
13466         }
13467     }
13468 
13469     public void test_lower() throws Exception {
13470         NavigableMap map = tm.subMap(objArray[102].toString(), true,
13471                 objArray[103].toString(), false);
13472         assertEquals(objArray[102].toString(), map.higherKey(objArray[101]
13473                 .toString()));
13474         assertEquals(null, map.higherKey(objArray[102].toString()));
13475         assertEquals(null, map.higherKey(objArray[103].toString()));
13476         assertEquals(null, map.higherKey(objArray[104].toString()));
13477         assertEquals(objArray[102].toString(), map.ceilingKey(objArray[101]
13478                 .toString()));
13479         assertEquals(objArray[102].toString(), map.ceilingKey(objArray[102]
13480                 .toString()));
13481         assertEquals(null, map.ceilingKey(objArray[103].toString()));
13482         assertEquals(null, map.ceilingKey(objArray[104].toString()));
13483         assertEquals(null, map.lowerKey(objArray[101].toString()));
13484         assertEquals(null, map.lowerKey(objArray[102].toString()));
13485         assertEquals(objArray[102].toString(), map.lowerKey(objArray[103]
13486                 .toString()));
13487         assertEquals(objArray[102].toString(), map.lowerKey(objArray[104]
13488                 .toString()));
13489         assertEquals(null, map.floorKey(objArray[101].toString()));
13490         assertEquals(objArray[102].toString(), map.floorKey(objArray[102]
13491                 .toString()));
13492         assertEquals(objArray[102].toString(), map.floorKey(objArray[103]
13493                 .toString()));
13494         assertEquals(objArray[102].toString(), map.floorKey(objArray[104]
13495                 .toString()));
13496         map = map.descendingMap();
13497         assertEquals(null, map.higherKey(objArray[101].toString()));
13498         assertEquals(null, map.higherKey(objArray[102].toString()));
13499         assertEquals(objArray[102].toString(), map.higherKey(objArray[103]
13500                 .toString()));
13501         assertEquals(objArray[102].toString(), map.higherKey(objArray[104]
13502                 .toString()));
13503         assertEquals(null, map.ceilingKey(objArray[101].toString()));
13504         assertEquals(objArray[102].toString(), map.ceilingKey(objArray[102]
13505                 .toString()));
13506         assertEquals(objArray[102].toString(), map.ceilingKey(objArray[103]
13507                 .toString()));
13508         assertEquals(objArray[102].toString(), map.ceilingKey(objArray[104]
13509                 .toString()));
13510         assertEquals(objArray[102].toString(), map.lowerKey(objArray[101]
13511                 .toString()));
13512         assertEquals(null, map.lowerKey(objArray[102].toString()));
13513         assertEquals(null, map.lowerKey(objArray[103].toString()));
13514         assertEquals(null, map.lowerKey(objArray[104].toString()));
13515         assertEquals(objArray[102].toString(), map.floorKey(objArray[101]
13516                 .toString()));
13517         assertEquals(objArray[102].toString(), map.floorKey(objArray[102]
13518                 .toString()));
13519         assertEquals(null, map.floorKey(objArray[103].toString()));
13520         assertEquals(null, map.floorKey(objArray[104].toString()));
13521     }
13522 
13523     public void test_lowerkey() throws Exception {
13524         try {
13525             tm.subMap(objArray[100].toString(), true, objArray[100].toString(),
13526                     false).descendingMap().firstKey();
13527             fail("should throw NoSuchElementException");
13528         } catch (Exception e) {
13529             // expected
13530         }
13531         try {
13532             tm.subMap(objArray[100].toString(), true, objArray[100].toString(),
13533                     false).descendingMap().lastKey();
13534             fail("should throw NoSuchElementException");
13535         } catch (Exception e) {
13536             // expected
13537         }
13538         try {
13539             tm.subMap(objArray[100].toString(), true, objArray[100].toString(),
13540                     false).firstKey();
13541             fail("should throw NoSuchElementException");
13542         } catch (Exception e) {
13543             // expected
13544         }
13545         try {
13546             tm.subMap(objArray[100].toString(), true, objArray[100].toString(),
13547                     false).lastKey();
13548             fail("should throw NoSuchElementException");
13549         } catch (Exception e) {
13550             // expected
13551         }
13552 
13553     }
13554 
13555     public void test_headMap() throws Exception {
13556         TreeMap tree = new TreeMap();
13557         tree.put(new Integer(0), null);
13558         tree.put(new Integer(1), null);
13559         Map submap = tree.subMap(tree.firstKey(), tree.lastKey());
13560         tree.remove(tree.lastKey());
13561         assertEquals(submap, tree);
13562     }
13563 
13564     public void testname() throws Exception {
13565         TreeMap nullTree = new TreeMap(new Comparator() {
13566             public int compare(Object o1, Object o2) {
13567                 if (o1 == null) {
13568                     return o2 == null ? 0 : -1;
13569                 }
13570                 return ((String) o1).compareTo((String) o2);
13571             }
13572         });
13573         nullTree.put(new String("One"), 1);
13574         nullTree.put(new String("Two"), 2);
13575         nullTree.put(new String("Three"), 3);
13576         nullTree.put(new String("Four"), 4);
13577         nullTree.put(null, 0);
13578         nullTree.subMap(null, "two").size();
13579     }
13580 
13581 }
13582