Home | History | Annotate | Download | only in util
      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 
     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 
    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 
    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 
    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 
    162     public void test_TreeMap_clear() {
    163         tm.clear();
    164         assertEquals(0, tm.size());
    165     }
    166 
    167     public void test_TreeMap_clone() {
    168         TreeMap cloneTreeMap = (TreeMap) tm.clone();
    169         assertEquals(tm, cloneTreeMap);
    170     }
    171 
    172     public void test_SubMap_Constructor() {
    173     }
    174 
    175     public void test_SubMap_clear() {
    176         subMap_default.clear();
    177         assertEquals(0, subMap_default.size());
    178     }
    179 
    180     public void test_SubMap_comparator() {
    181         assertEquals(tm.comparator(), subMap_default.comparator());
    182     }
    183 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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 
   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