/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.util; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import junit.framework.TestCase; /** * @author higa * */ public class ArrayMapTest extends TestCase { private ArrayMap _map; /** * @throws Exception */ public void testSize() throws Exception { assertEquals("1", 3, _map.size()); _map.put("3", "test3"); assertEquals("2", 4, _map.size()); } /** * @throws Exception */ public void testIsEmpty() throws Exception { assertTrue("1", !_map.isEmpty()); _map.clear(); assertTrue("2", _map.isEmpty()); } /** * @throws Exception */ public void testContainsValue() throws Exception { assertTrue("1", _map.containsValue("test2")); assertTrue("2", !_map.containsValue("test3")); } /** * @throws Exception */ public void testContainsKey() throws Exception { assertTrue("1", _map.containsKey("2")); assertTrue("2", !_map.containsKey("3")); _map.put("3", null); assertTrue("3", _map.containsKey("3")); } /** * @throws Exception */ public void testIndexOf() throws Exception { assertEquals("1", 1, _map.indexOf("test")); assertEquals("1", 0, _map.indexOf(null)); assertEquals("2", -1, _map.indexOf("test3")); } /** * @throws Exception */ public void testGet() throws Exception { assertEquals("1", "test", _map.get("1")); assertEquals("2", null, _map.get(null)); assertEquals("3", null, _map.get("test3")); assertEquals("4", null, _map.get(0)); } /** * @throws Exception */ public void testPut() throws Exception { assertEquals("1", "test", _map.put("1", "test3")); assertEquals("2", "test3", _map.get("1")); assertEquals("3", "test3", _map.get(1)); _map.put(null, "test4"); _map.put(null, "test5"); } /** * @throws Exception */ public void testRemove() throws Exception { assertEquals("1", "test", _map.remove("1")); assertEquals("2", 2, _map.size()); assertEquals("3", null, _map.remove("dummy")); assertEquals("4", null, _map.remove(0)); } /** * @throws Exception */ public void testRemove2() throws Exception { Map m = new ArrayMap(); m.put("1", "d"); m.remove("1"); assertEquals("1", false, m.containsKey("1")); m.put("1", "d"); m.remove("1"); assertEquals("2", false, m.containsKey("1")); } /** * @throws Exception */ public void testRemove3() throws Exception { Map m = new ArrayMap(); m.put(new MyKey("1"), "d"); m.put(new MyKey("2"), "d"); m.remove(new MyKey("1")); assertEquals("1", false, m.containsKey(new MyKey("1"))); } /** * @throws Exception */ public void testRemove4() throws Exception { ArrayMap m = new ArrayMap(); m.put("1", "d"); m.put("2", "d"); System.out.println("remove before:" + m); m.remove("2"); System.out.println("remove after:" + m); assertEquals("1", false, m.containsKey("2")); assertEquals("2", true, m.containsKey("1")); assertEquals("3", "d", m.get("1")); assertEquals("4", null, m.get("2")); assertEquals("5", "d", m.get(0)); } /** * @throws Exception */ public void testPutAll() throws Exception { Map m = new HashMap(); m.put("3", "test3"); m.put("4", "test4"); _map.putAll(m); assertEquals("1", "test3", _map.get("3")); assertEquals("2", "test4", _map.get("4")); assertEquals("3", 5, _map.size()); } /** * @throws Exception */ public void testEqaulas() throws Exception { Map copy = (ArrayMap) _map.clone(); assertTrue("1", _map.equals(copy)); assertTrue("2", !_map.equals(null)); _map.put("3", "test3"); assertTrue("3", !_map.equals(copy)); } /** * @throws Exception */ public void testToString() throws Exception { assertNotNull("1", _map.toString()); } /** * @throws Exception */ public void testClear() throws Exception { _map.clear(); assertEquals("1", 0, _map.size()); } /** * @throws Exception */ public void testEntrySet() throws Exception { Iterator i = _map.entrySet().iterator(); assertEquals("1", null, ((Map.Entry) i.next()).getKey()); assertEquals("2", "1", ((Map.Entry) i.next()).getKey()); assertEquals("1", "2", ((Map.Entry) i.next()).getKey()); } /** * @throws Exception */ public void testSerialize() throws Exception { ArrayMap copy = (ArrayMap) SerializeUtil.serialize(_map); assertEquals("1", null, copy.get(0)); assertEquals("2", "test", copy.get(1)); assertEquals("3", "test2", copy.get(2)); _map.equals(copy); } /** * @throws Exception */ public void testPerformance() throws Exception { int num = 100000; Map hmap = new HashMap(); Map amap = new ArrayMap(); long start = System.currentTimeMillis(); for (int i = 0; i < num; i++) { hmap.put(String.valueOf(i), null); } System.out.println("HashMap.put:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < num; i++) { amap.put(String.valueOf(i), null); } System.out.println("ArrayMap.put:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < num; i++) { hmap.get(String.valueOf(i)); } System.out.println("HashMap.get:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0; i < num; i++) { amap.get(String.valueOf(i)); } System.out.println("ArrayMap.get:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (Iterator i = hmap.entrySet().iterator(); i.hasNext();) { i.next(); } System.out.println("HashMap iteration:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (Iterator i = amap.entrySet().iterator(); i.hasNext();) { i.next(); } System.out.println("ArrayMap iteration:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); SerializeUtil.serialize(hmap); System.out.println("HashMap serialize:" + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); SerializeUtil.serialize(amap); System.out.println("ArrayMap serialize:" + (System.currentTimeMillis() - start)); } protected void setUp() throws Exception { _map = new ArrayMap(); _map.put(null, null); _map.put("1", "test"); _map.put("2", "test2"); } protected void tearDown() throws Exception { _map = null; } private static class MyKey { Object _key; MyKey(Object key) { _key = key; } public int hashCode() { return 0; } public boolean equals(Object o) { if (o == this) { return true; } if (o == null || !(o instanceof MyKey)) { return false; } return _key.equals(((MyKey) o)._key); } } }