1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util; 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectInputStream; 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectOutputStream; 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.lang.reflect.Method; 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Collection; 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.HashMap; 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Iterator; 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Map; 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.NoSuchElementException; 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Random; 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Set; 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.SortedMap; 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.TreeMap; 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase; 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic abstract class SortedMapTestBase extends TestCase { 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int N = 1000; 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final int TRIES = 100; 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SortedMap<Integer, Integer> map; 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SortedMap<Integer, Integer> ref; 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Random rnd; 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void setUp() throws Exception { 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath rnd = new Random(-1); 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < N; i++) { 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ref.put(rnd.nextInt(N) * 2, rnd.nextBoolean() ? null : rnd.nextInt(N) * 2); 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testClear() { 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.clear(); 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(map.isEmpty()); 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testContainsKey() { 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.containsKey(key), map.containsKey(key)); 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testContainsValue() { 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int value = rnd.nextInt(N); 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.containsValue(value), map.containsValue(value)); 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testEntrySet() { 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Set<Map.Entry<Integer, Integer>> refSet = ref.entrySet(); 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Set<Map.Entry<Integer, Integer>> mapSet = map.entrySet(); 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (Map.Entry<Integer, Integer> e : refSet) { 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(mapSet.contains(e)); 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (Map.Entry<Integer, Integer> e : mapSet) { 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(refSet.contains(e)); 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.entrySet(), map.entrySet()); 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testGet() { 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.get(key), map.get(key)); 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testKeySet() { 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.keySet(), map.keySet()); 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator<Integer> i = ref.keySet().iterator(); 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator<Integer> j = map.keySet().iterator(); 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (i.hasNext()) { 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(i.next(), j.next()); 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (rnd.nextBoolean()) { 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath j.remove(); 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath i.remove(); 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testPut() { 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int value = rnd.nextInt(N); 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.put(key, value), map.put(key, value)); 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.get(key), map.get(key)); 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref, map); 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testPut0() { 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ref.clear(); 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.clear(); 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < N; i++) { 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int value = rnd.nextInt(N); 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.put(key, value), map.put(key, value)); 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.get(key), map.get(key)); 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testPutAll() { 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Map<Integer, Integer> mixin = new HashMap<Integer, Integer>(TRIES); 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath mixin.put(rnd.nextInt(N), rnd.nextInt(N)); 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ref.putAll(mixin); 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.putAll(mixin); 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref, map); 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testRemove() { 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < N; i++) { 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.remove(key), map.remove(key)); 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (i % (N / TRIES) == 0) { 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref, map); 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testRemove0() { 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!ref.isEmpty()) { 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = ref.tailMap((ref.firstKey() + ref.lastKey()) / 2) 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .firstKey(); 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.remove(key), map.remove(key)); 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testSize() { 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.size(), map.size()); 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testValues() { 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.values().size(), map.values().size()); 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(ref.values().containsAll(map.values())); 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(map.values().containsAll(ref.values())); 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator<Integer> i = ref.values().iterator(); 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator<Integer> j = map.values().iterator(); 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (i.hasNext()) { 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(i.next(), j.next()); 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (rnd.nextBoolean()) { 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath j.remove(); 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath i.remove(); 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testComparator() { 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.comparator(), map.comparator()); 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testFirstKey() { 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.firstKey(), map.firstKey()); 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testHeadMap() { 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(N); 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkSubMap(ref.headMap(key), map.headMap(key)); 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkSubMap(ref.headMap(-1), map.headMap(-1)); 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testLastKey() { 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.lastKey(), map.lastKey()); 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testSubMap() { 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key0 = rnd.nextInt(N / 2); 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key1 = rnd.nextInt(N / 2) + N / 2; 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (ref.comparator() != null && 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ref.comparator().compare(key0, key1) > 0) { 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int tmp = key0; 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath key0 = key1; 213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath key1 = tmp; 214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkSubMap(ref.subMap(key0, key1), map.subMap(key0, key1)); 216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean caught = false; 218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (ref.comparator() != null && ref.comparator().compare(100, 0) < 0) { 220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.subMap(0, 100); 221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } else { 222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.subMap(100, 0); 223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IllegalArgumentException e) { 225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath caught = true; 226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(caught); 228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int firstKey = ref.firstKey(); 230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Map.Entry<Integer, Integer> refE = ref.entrySet().iterator().next(); 231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Map.Entry<Integer, Integer> mapE = map.entrySet().iterator().next(); 232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath mapE.setValue(-1); 233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath refE.setValue(-1); 234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.get(firstKey), map.get(firstKey)); 235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testTailMap() { 239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TRIES; i++) { 240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int key = rnd.nextInt(2 * N); 241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkSubMap(ref.tailMap(key), map.tailMap(key)); 242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkSubMap(ref.tailMap(2 * N + 1), map.tailMap(2 * N + 1)); 244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testHashCode() { 248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.hashCode(), map.hashCode()); 249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testEqualsObject() { 252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(map.equals(ref)); 253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.put(N + 1, N + 1); 254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(map.equals(ref)); 255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testIsEmpty() { 259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.isEmpty(), map.isEmpty()); 260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testIsEmpty2() { 263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath TreeMap<String, String> map = new TreeMap<String, String>(); 264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.put("one", "1"); 265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("size should be one", 1, map.size()); 266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.clear(); 267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("size should be zero", 0, map.size()); 268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Should not have entries", !map.entrySet().iterator() 269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .hasNext()); 270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.put("one", "1"); 272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("size should be one", 1, map.size()); 273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.remove("one"); 274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("size should be zero", 0, map.size()); 275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Should not have entries", !map.entrySet().iterator() 276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .hasNext()); 277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.clear(); 279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.put("0", "1"); 280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.clear(); 281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(map.isEmpty()); 282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(map.entrySet().iterator().hasNext()); 283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(map.keySet().iterator().hasNext()); 284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(map.values().iterator().hasNext()); 285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testToString() { 288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.toString(), map.toString()); 289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private void checkSubMap(SortedMap<Integer, Integer> ref, 292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SortedMap<Integer, Integer> map) { 293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.size(), map.size()); 295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref, map); 296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.isEmpty(), map.isEmpty()); 297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (!ref.isEmpty()) { 298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.firstKey(), map.firstKey()); 299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.lastKey(), map.lastKey()); 300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath testViews(ref, map); 302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } else { 303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean caught = false; 304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.firstKey(); 306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NoSuchElementException e) { 307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath caught = true; 308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath caught = false; 310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map.lastKey(); 312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NoSuchElementException e) { 313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath caught = true; 314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(caught); 316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testViews() { 321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath testViews(ref, map); 322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private void testViews(SortedMap<Integer, Integer> ref, SortedMap<Integer, Integer> map) { 325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.keySet().size(), map.keySet().size()); 326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.keySet(), map.keySet()); 327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath compareIterators(ref.keySet(), map.keySet()); 328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.values().size(), map.values().size()); 330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath compareIterators(ref.values(), map.values()); 331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.entrySet(), map.entrySet()); 333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath compareIterators(ref.entrySet(), map.entrySet()); 334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private void compareIterators(Collection ref, Collection map) { 337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator i = ref.iterator(); 338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Iterator j = map.iterator(); 339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (i.hasNext()) { 340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(i.next(), j.next()); 341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (rnd.nextBoolean()) { 342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath j.remove(); 343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath i.remove(); 344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref.size(), map.size()); 345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("unchecked") 350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testSerialization() throws IOException, ClassNotFoundException { 351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ByteArrayOutputStream baos = new ByteArrayOutputStream(); 352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ObjectOutputStream oos = new ObjectOutputStream(baos); 353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath oos.writeObject(map); 354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath oos.close(); 355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Object read = ois.readObject(); 357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(ref, read); 358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public final void testClone() throws Exception { 361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Method refClone = ref.getClass().getMethod("clone", new Class[0]); 362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Method mapClone = map.getClass().getMethod("clone", new Class[0]); 363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SortedMap<Integer, Integer> map2 = (SortedMap<Integer, Integer>) mapClone.invoke(map, new Object[0]); 364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(refClone.invoke(ref, new Object[0]), map2); 365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath map2.remove(map2.lastKey()); 366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(ref.equals(map2)); 367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 370