1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.util;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.InvocationHandler;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Method;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Proxy;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.AbstractMap;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.TreeMap;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_MapTest2;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_UnmodifiableCollectionTest;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class HashMapTest extends junit.framework.TestCase {
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class MockMap extends AbstractMap {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Set entrySet() {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int size(){
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return 0;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static class MockMapNull extends AbstractMap {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Set entrySet() {
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int size() {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return 10;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    interface MockInterface {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String mockMethod();
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class MockClass implements MockInterface {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String mockMethod() {
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "This is a MockClass";
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class MockHandler implements InvocationHandler {
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object obj;
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MockHandler(Object o) {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            obj = o;
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object invoke(Object proxy, Method m, Object[] args)
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throws Throwable {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Object result = null;
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                result = m.invoke(obj, args);
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (Exception e) {
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                e.printStackTrace();
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } finally {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return result;
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	HashMap hm;
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	final static int hmSize = 1000;
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	static Object[] objArray;
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	static Object[] objArray2;
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	{
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		objArray = new Object[hmSize];
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		objArray2 = new Object[hmSize];
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < objArray.length; i++) {
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			objArray[i] = new Integer(i);
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			objArray2[i] = objArray[i].toString();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#HashMap()
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_Constructor() {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.HashMap()
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new Support_MapTest2(new HashMap()).runTest();
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = new HashMap();
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect HashMap", 0, hm2.size());
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#HashMap(int)
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorI() {
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.HashMap(int)
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = new HashMap(5);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect HashMap", 0, hm2.size());
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			new HashMap(-1);
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IllegalArgumentException e) {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail(
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Failed to throw IllegalArgumentException for initial capacity < 0");
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap empty = new HashMap(0);
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty hashmap access", empty.get("nothing"));
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#HashMap(int, float)
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorIF() {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.HashMap(int, float)
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = new HashMap(5, (float) 0.5);
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect HashMap", 0, hm2.size());
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			new HashMap(0, 0);
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IllegalArgumentException e) {
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail(
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Failed to throw IllegalArgumentException for initial load factor <= 0");
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap empty = new HashMap(0, 0.75f);
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty hashtable access", empty.get("nothing"));
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#HashMap(java.util.Map)
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_util_Map() {
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.HashMap(java.util.Map)
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map myMap = new TreeMap();
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int counter = 0; counter < hmSize; counter++)
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			myMap.put(objArray2[counter], objArray[counter]);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = new HashMap(myMap);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int counter = 0; counter < hmSize; counter++)
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to construct correct HashMap", hm
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.get(objArray2[counter]) == hm2.get(objArray2[counter]));
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Map mockMap = new MockMap();
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hm = new HashMap(mockMap);
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //empty
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap map = new HashMap();
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put("a", "a");
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SubMap map2 = new SubMap(map);
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(map2.containsKey("a"));
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(map2.containsValue("a"));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#clear()
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_clear() {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm.clear();
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Clear failed to reset size", 0, hm.size());
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < hmSize; i++)
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("Failed to clear all elements",
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					hm.get(objArray2[i]));
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Check clear on a large loaded map of Integer keys
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap<Integer, String> map = new HashMap<Integer, String>();
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = -32767; i < 32768; i++) {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            map.put(i, "foobar");
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.clear();
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed to reset size on large integer map", 0, hm.size());
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = -32767; i < 32768; i++) {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNull("Failed to clear integer map values", map.get(i));
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#clone()
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_clone() {
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object java.util.HashMap.clone()
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = (HashMap) hm.clone();
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Clone answered equivalent HashMap", hm2 != hm);
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int counter = 0; counter < hmSize; counter++)
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Clone answered unequal HashMap", hm
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.get(objArray2[counter]) == hm2.get(objArray2[counter]));
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap map = new HashMap();
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put("key", "value");
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// get the keySet() and values() on the original Map
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set keys = map.keySet();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection values = map.values();
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("values() does not work",
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"value", values.iterator().next());
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("keySet() does not work",
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"key", keys.iterator().next());
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		AbstractMap map2 = (AbstractMap) map.clone();
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put("key", "value2");
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection values2 = map2.values();
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("values() is identical", values2 != values);
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// values() and keySet() on the cloned() map should be different
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("values() was not cloned",
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"value2", values2.iterator().next());
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.clear();
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put("key2", "value3");
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set key2 = map2.keySet();
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("keySet() is identical", key2 != keys);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("keySet() was not cloned",
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"key2", key2.iterator().next());
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regresion test for HARMONY-4603
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap hashmap = new HashMap();
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockClonable mock = new MockClonable(1);
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashmap.put(1, mock);
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, ((MockClonable) hashmap.get(1)).i);
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap hm3 = (HashMap)hashmap.clone();
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, ((MockClonable) hm3.get(1)).i);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        mock.i = 0;
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, ((MockClonable) hashmap.get(1)).i);
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, ((MockClonable) hm3.get(1)).i);
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#containsKey(java.lang.Object)
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsKeyLjava_lang_Object() {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.HashMap.containsKey(java.lang.Object)
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned false for valid key", hm.containsKey(new Integer(
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				876).toString()));
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned true for invalid key", !hm.containsKey("KKDKDKD"));
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap m = new HashMap();
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		m.put(null, "test");
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed with null key", m.containsKey(null));
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed with missing key matching null hash", !m
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.containsKey(new Integer(0)));
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#containsValue(java.lang.Object)
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsValueLjava_lang_Object() {
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.HashMap.containsValue(java.lang.Object)
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned false for valid value", hm
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.containsValue(new Integer(875)));
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned true for invalid valie", !hm
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.containsValue(new Integer(-9)));
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#entrySet()
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_entrySet() {
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.HashMap.entrySet()
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s = hm.entrySet();
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator i = s.iterator();
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned set of incorrect size", hm.size() == s.size());
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (i.hasNext()) {
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Map.Entry m = (Map.Entry) i.next();
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned incorrect entry set", hm.containsKey(m
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.getKey())
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					&& hm.containsValue(m.getValue()));
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator iter = s.iterator();
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s.remove(iter.next());
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1001, s.size());
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#get(java.lang.Object)
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getLjava_lang_Object() {
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.HashMap.get(java.lang.Object)
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Get returned non-null for non existent key",
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				hm.get("T"));
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm.put("T", "HELLO");
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Get returned incorrect value for existing key", "HELLO", hm.get("T")
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				);
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap m = new HashMap();
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		m.put(null, "test");
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Failed with null key", "test", m.get(null));
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Failed with missing key matching null hash", m
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.get(new Integer(0)));
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Regression for HARMONY-206
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ReusableKey k = new ReusableKey();
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap map = new HashMap();
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(1);
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(k, "value1");
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(18);
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(map.get(k));
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(17);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(map.get(k));
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Tests for proxy object keys and values
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_proxies() {
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-6237
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockInterface proxyKey = (MockInterface) Proxy.newProxyInstance(
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                MockInterface.class.getClassLoader(),
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new Class[] { MockInterface.class }, new MockHandler(
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        new MockClass()));
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockInterface proxyValue = (MockInterface) Proxy.newProxyInstance(
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                MockInterface.class.getClassLoader(),
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new Class[] { MockInterface.class }, new MockHandler(
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        new MockClass()));
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Proxy key
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object val = new Object();
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put(proxyKey, val);
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed with proxy object key", val, hm
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .get(proxyKey));
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to find proxy key", hm.containsKey(proxyKey));
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed to remove proxy object key", val,
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                hm.remove(proxyKey));
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Should not have found proxy key", hm.containsKey(proxyKey));
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Proxy value
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object k = new Object();
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put(k, proxyValue);
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to find proxy object as value", hm.containsValue(proxyValue));
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Proxy key and value
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap map = new HashMap();
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(proxyKey, proxyValue);
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to find proxy key", map.containsKey(proxyKey));
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, map.size());
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object[] entries = map.entrySet().toArray();
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Map.Entry entry = (Map.Entry)entries[0];
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to find proxy association", map.entrySet().contains(entry));
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#isEmpty()
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_isEmpty() {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.HashMap.isEmpty()
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned false for new map", new HashMap().isEmpty());
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned true for non-empty", !hm.isEmpty());
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#keySet()
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keySet() {
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.HashMap.keySet()
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s = hm.keySet();
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned set of incorrect size()", s.size() == hm.size());
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < objArray.length; i++)
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned set does not contain all keys", s
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(objArray[i].toString()));
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap m = new HashMap();
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		m.put(null, "test");
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed with null key", m.keySet().contains(null));
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Failed with null key", m.keySet().iterator().next());
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map map = new HashMap(101);
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(1), "1");
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(102), "102");
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(203), "203");
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = map.keySet().iterator();
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove1 = (Integer) it.next();
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.hasNext();
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.remove();
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove2 = (Integer) it.next();
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.remove();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ArrayList list = new ArrayList(Arrays.asList(new Integer[] {
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new Integer(1), new Integer(102), new Integer(203) }));
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		list.remove(remove1);
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		list.remove(remove2);
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong result", it.next().equals(list.get(0)));
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Wrong size", 1, map.size());
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong contents", map.keySet().iterator().next().equals(
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				list.get(0)));
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map map2 = new HashMap(101);
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put(new Integer(1), "1");
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put(new Integer(4), "4");
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it2 = map2.keySet().iterator();
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove3 = (Integer) it2.next();
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer next;
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (remove3.intValue() == 1)
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			next = new Integer(4);
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		else
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			next = new Integer(1);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it2.hasNext();
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it2.remove();
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong result 2", it2.next().equals(next));
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Wrong size 2", 1, map2.size());
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals(
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				next));
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#put(java.lang.Object, java.lang.Object)
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_putLjava_lang_ObjectLjava_lang_Object() {
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put("KEY", "VALUE");
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed to install key/value pair", "VALUE", hm.get("KEY"));
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<Object,Object> m = new HashMap<Object,Object>();
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        m.put(new Short((short) 0), "short");
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        m.put(null, "test");
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        m.put(new Integer(0), "int");
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed adding to bucket containing null", "short", m
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .get(new Short((short) 0)));
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Failed adding to bucket containing null2", "int", m
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .get(new Integer(0)));
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check my actual key instance is returned
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<Integer, String> map = new HashMap<Integer, String>();
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = -32767; i < 32768; i++) {
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            map.put(i, "foobar");
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer myKey = new Integer(0);
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Put a new value at the old key position
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(myKey, "myValue");
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(map.containsKey(myKey));
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("myValue", map.get(myKey));
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean found = false;
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext();) {
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Integer key = itr.next();
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (found = key == myKey) {
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                break;
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Should not find new key instance in hashmap", found);
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Add a new key instance and check it is returned
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(map.remove(myKey));
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(myKey, "myValue");
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(map.containsKey(myKey));
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("myValue", map.get(myKey));
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext();) {
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Integer key = itr.next();
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (found = key == myKey) {
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                break;
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Did not find new key instance in hashmap", found);
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Ensure keys with identical hashcode are stored separately
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<Object,Object> objmap = new HashMap<Object, Object>();
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 32768; i++) {
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            objmap.put(i, "foobar");
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Put non-equal object with same hashcode
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MyKey aKey = new MyKey();
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(objmap.put(aKey, "value"));
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(objmap.remove(new MyKey()));
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("foobar", objmap.get(0));
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("value", objmap.get(aKey));
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class MyKey {
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MyKey() {
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super();
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int hashCode() {
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return 0;
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#putAll(java.util.Map)
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_putAllLjava_util_Map() {
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.util.HashMap.putAll(java.util.Map)
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap hm2 = new HashMap();
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm2.putAll(hm);
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 1000; i++)
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to clear all elements", hm2.get(
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new Integer(i).toString()).equals((new Integer(i))));
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Map mockMap = new MockMap();
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm2 = new HashMap();
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm2.putAll(mockMap);
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Size should be 0", 0, hm2.size());
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.HashMap#putAll(java.util.Map)
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_putAllLjava_util_Map_Null() {
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap hashMap = new HashMap();
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hashMap.putAll(new MockMapNull());
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected.
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hashMap = new HashMap(new MockMapNull());
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected.
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#remove(java.lang.Object)
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_removeLjava_lang_Object() {
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int size = hm.size();
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer y = new Integer(9);
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer x = ((Integer) hm.remove(y.toString()));
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Remove returned incorrect value", x.equals(new Integer(9)));
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Failed to remove given key", hm.get(new Integer(9)));
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed to decrement size", hm.size() == (size - 1));
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Remove of non-existent key returned non-null", hm
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.remove("LCLCLC"));
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap m = new HashMap();
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		m.put(null, "test");
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Failed with same hash as null",
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				m.remove(new Integer(0)));
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Failed with null key", "test", m.remove(null));
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap<Integer, Object> map = new HashMap<Integer, Object>();
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 32768; i++) {
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            map.put(i, "const");
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object[] values = new Object[32768];
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 32768; i++) {
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            values[i] = new Object();
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            map.put(i, values[i]);
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 32767; i >= 0; i--) {
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Failed to remove same value", values[i], map.remove(i));
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Ensure keys with identical hashcode are removed properly
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map = new HashMap<Integer, Object>();
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = -32767; i < 32768; i++) {
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            map.put(i, "foobar");
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Remove non equal object with same hashcode
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(map.remove(new MyKey()));
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("foobar", map.get(0));
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.remove(0);
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(map.get(0));
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Compatibility test to ensure we rehash the same way as the RI.
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Not required by the spec, but some apps seem sensitive to it.
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_rehash() {
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // This map should rehash on adding the ninth element.
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<MyKey, Integer> hm = new HashMap<MyKey, Integer>(10, 0.5f);
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Ordered set of keys.
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MyKey[] keyOrder = new MyKey[9];
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < keyOrder.length; i++) {
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            keyOrder[i] = new MyKey();
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Store eight elements
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 8; i++) {
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hm.put(keyOrder[i], i);
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check expected ordering (inverse of adding order)
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MyKey[] returnedKeys = hm.keySet().toArray(new MyKey[8]);
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 8; i++) {
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertSame(keyOrder[i], returnedKeys[7 - i]);
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The next put causes a rehash
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put(keyOrder[8], 8);
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check expected new ordering (adding order)
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        returnedKeys = hm.keySet().toArray(new MyKey[8]);
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 9; i++) {
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertSame(keyOrder[i], returnedKeys[i]);
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#size()
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_size() {
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.util.HashMap.size()
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned incorrect size",
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				hm.size() == (objArray.length + 2));
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.HashMap#values()
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_values() {
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Collection java.util.HashMap.values()
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection c = hm.values();
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned collection of incorrect size()", c.size() == hm
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.size());
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < objArray.length; i++)
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned collection does not contain all keys", c
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(objArray[i]));
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		HashMap myHashMap = new HashMap();
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			myHashMap.put(objArray2[i], objArray[i]);
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection values = myHashMap.values();
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new Support_UnmodifiableCollectionTest(
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Test Returned Collection From HashMap.values()", values)
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.runTest();
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		values.remove(new Integer(0));
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Removing from the values collection should remove from the original map",
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				!myHashMap.containsValue(new Integer(0)));
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.AbstractMap#toString()
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toString() {
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap m = new HashMap();
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        m.put(m, m);
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String result = m.toString();
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("should contain self ref", result.indexOf("(this") > -1);
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	static class ReusableKey {
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		private int key = 0;
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void setKey(int key) {
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			this.key = key;
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public int hashCode() {
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return key;
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public boolean equals(Object o) {
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (o == this) {
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				return true;
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (!(o instanceof ReusableKey)) {
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				return false;
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return key == ((ReusableKey) o).key;
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_Map_Entry_hashCode() {
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //Related to HARMONY-403
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(10);
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    Integer key = new Integer(1);
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    Integer val = new Integer(2);
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    map.put(key, val);
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    int expected = key.hashCode() ^ val.hashCode();
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    assertEquals(expected, map.hashCode());
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    key = new Integer(4);
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    val = new Integer(8);
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    map.put(key, val);
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    expected += key.hashCode() ^ val.hashCode();
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	    assertEquals(expected, map.hashCode());
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class MockClonable implements Cloneable{
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int i;
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MockClonable(int i) {
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.i = i;
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        protected Object clone() throws CloneNotSupportedException {
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return new MockClonable(i);
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Regression test for HY-4750
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_EntrySet() {
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap map = new HashMap();
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(new Integer(1), "ONE");
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set entrySet = map.entrySet();
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator e = entrySet.iterator();
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object real = e.next();
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Map.Entry copyEntry = new MockEntry();
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(real, copyEntry);
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(entrySet.contains(copyEntry));
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        entrySet.remove(copyEntry);
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(entrySet.contains(copyEntry));
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static class MockEntry implements Map.Entry {
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object getKey() {
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return new Integer(1);
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object getValue() {
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "ONE";
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object setValue(Object object) {
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Sets up the fixture, for example, open a network connection. This method
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * is called before a test is executed.
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() {
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm = new HashMap();
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < objArray.length; i++)
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			hm.put(objArray2[i], objArray[i]);
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm.put("test", null);
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		hm.put(null, "test");
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class SubMap<K, V> extends HashMap<K, V> {
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public SubMap(Map<? extends K, ? extends V> m) {
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super(m);
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public V put(K key, V value) {
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new UnsupportedOperationException();
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests serialization/deserialization.
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationSelf() throws Exception {
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<String, String> hm = new HashMap<String, String>();
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put("key", "value");
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifySelf(hm);
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //  regression for HARMONY-1583
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put(null, "null");
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifySelf(hm);
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests serialization/deserialization compatibility with RI.
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationCompatibility() throws Exception {
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashMap<String, String> hm = new HashMap<String, String>();
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hm.put("key", "value");
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifyGolden(this, hm);
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
805