# HG changeset patch # User smarks # Date 1431564478 25200 # Wed May 13 17:47:58 2015 -0700 # Node ID 3809d3138c46ebfb2bd19c76f5f05747a17e8593 # Parent d40f1245a1f17c8a0b8958e3ff20b2e80a8f5690 8078463: TEST_BUG: optimize java/util/Map/Collisions.java Reviewed-by: XXX diff --git a/test/java/util/Map/Collisions.java b/test/java/util/Map/Collisions.java --- a/test/java/util/Map/Collisions.java +++ b/test/java/util/Map/Collisions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -198,138 +198,125 @@ } private static void testInsertion(Map map, String keys_desc, T[] keys) { - check("map empty", (map.size() == 0) && map.isEmpty()); + check(map.size() == 0 && map.isEmpty(), "map empty"); for (int i = 0; i < keys.length; i++) { - check(String.format("insertion: map expected size m%d != i%d", map.size(), i), - map.size() == i); - check(String.format("insertion: put(%s[%d])", keys_desc, i), null == map.put(keys[i], keys[i])); - check(String.format("insertion: containsKey(%s[%d])", keys_desc, i), map.containsKey(keys[i])); - check(String.format("insertion: containsValue(%s[%d])", keys_desc, i), map.containsValue(keys[i])); + check(map.size() == i, "insertion: map expected size m%d != i%d", map.size(), i); + check(null == map.put(keys[i], keys[i]), "insertion: put(%s[%d])", keys_desc, i); + check(map.containsKey(keys[i]), "insertion: containsKey(%s[%d])", keys_desc, i); + check(map.containsValue(keys[i]), "insertion: containsValue(%s[%d])", keys_desc, i); } - check(String.format("map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length); } private static void testIntegerIteration(Map map, HashableInteger[] keys) { - check(String.format("map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length); BitSet all = new BitSet(keys.length); for (Map.Entry each : map.entrySet()) { - check("Iteration: key already seen", !all.get(each.getKey().value)); + check(!all.get(each.getKey().value), "Iteration: key already seen"); all.set(each.getKey().value); } all.flip(0, keys.length); - check("Iteration: some keys not visited", all.isEmpty()); + check(all.isEmpty(), "Iteration: some keys not visited"); for (HashableInteger each : map.keySet()) { - check("Iteration: key already seen", !all.get(each.value)); + check(!all.get(each.value), "Iteration: key already seen"); all.set(each.value); } all.flip(0, keys.length); - check("Iteration: some keys not visited", all.isEmpty()); + check(all.isEmpty(), "Iteration: some keys not visited"); int count = 0; for (HashableInteger each : map.values()) { count++; } - check(String.format("Iteration: value count matches size m%d != c%d", map.size(), count), - map.size() == count); + check(map.size() == count, "Iteration: value count matches size m%d != c%d", map.size(), count); } private static void testStringIteration(Map map, String[] keys) { - check(String.format("map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length); BitSet all = new BitSet(keys.length); for (Map.Entry each : map.entrySet()) { String key = each.getKey(); boolean longKey = key.length() > 5; int index = key.hashCode() + (longKey ? keys.length / 2 : 0); - check("key already seen", !all.get(index)); + check(!all.get(index), "key already seen"); all.set(index); } all.flip(0, keys.length); - check("some keys not visited", all.isEmpty()); + check(all.isEmpty(), "some keys not visited"); for (String each : map.keySet()) { boolean longKey = each.length() > 5; int index = each.hashCode() + (longKey ? keys.length / 2 : 0); - check("key already seen", !all.get(index)); + check(!all.get(index), "key already seen"); all.set(index); } all.flip(0, keys.length); - check("some keys not visited", all.isEmpty()); + check(all.isEmpty(), "some keys not visited"); int count = 0; for (String each : map.values()) { count++; } - check(String.format("value count matches size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "value count matches size m%d != k%d", map.size(), keys.length); } private static void testContainsKey(Map map, String keys_desc, T[] keys) { for (int i = 0; i < keys.length; i++) { T each = keys[i]; - check("containsKey: " + keys_desc + "[" + i + "]" + each, map.containsKey(each)); + check(map.containsKey(each), "containsKey: %s[%d]%s", keys_desc, i, each); } } private static void testRemove(Map map, String keys_desc, T[] keys) { - check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length); for (int i = 0; i < keys.length; i++) { T each = keys[i]; - check("remove: " + keys_desc + "[" + i + "]" + each, null != map.remove(each)); + check(null != map.remove(each), "remove: %s[%d]%s", keys_desc, i, each); } - check(String.format("remove: map empty. size=%d", map.size()), - (map.size() == 0) && map.isEmpty()); + check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size()); } private static void testKeysIteratorRemove(Map map, String keys_desc, T[] keys) { - check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length); Iterator each = map.keySet().iterator(); while (each.hasNext()) { T t = each.next(); each.remove(); - check("not removed: " + each, !map.containsKey(t) ); + check(!map.containsKey(t), "not removed: %s", each); } - check(String.format("remove: map empty. size=%d", map.size()), - (map.size() == 0) && map.isEmpty()); + check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size()); } private static void testValuesIteratorRemove(Map map, String keys_desc, T[] keys) { - check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length); Iterator each = map.values().iterator(); while (each.hasNext()) { T t = each.next(); each.remove(); - check("not removed: " + each, !map.containsValue(t) ); + check(!map.containsValue(t), "not removed: %s", each); } - check(String.format("remove: map empty. size=%d", map.size()), - (map.size() == 0) && map.isEmpty()); + check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size()); } private static void testEntriesIteratorRemove(Map map, String keys_desc, T[] keys) { - check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length), - map.size() == keys.length); + check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length); Iterator> each = map.entrySet().iterator(); while (each.hasNext()) { @@ -337,13 +324,12 @@ T key = t.getKey(); T value = t.getValue(); each.remove(); - check("not removed: " + each, (map instanceof IdentityHashMap) || !map.entrySet().contains(t) ); - check("not removed: " + each, !map.containsKey(key) ); - check("not removed: " + each, !map.containsValue(value)); + check((map instanceof IdentityHashMap) || !map.entrySet().contains(t), "not removed: %s", each); + check(!map.containsKey(key), "not removed: %s", each); + check(!map.containsValue(value), "not removed: %s", each); } - check(String.format("remove: map empty. size=%d", map.size()), - (map.size() == 0) && map.isEmpty()); + check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size()); } //--------------------- Infrastructure --------------------------- @@ -391,7 +377,7 @@ } } - static void check(String desc, boolean cond) { + static void check(boolean cond, String desc) { if (cond) { pass(); } else { @@ -399,6 +385,46 @@ } } + static void check(boolean cond, String fmt, int i) { + if (cond) { + pass(); + } else { + fail(String.format(fmt, i)); + } + } + + static void check(boolean cond, String fmt, Object o) { + if (cond) { + pass(); + } else { + fail(String.format(fmt, o)); + } + } + + static void check(boolean cond, String fmt, int i1, int i2) { + if (cond) { + pass(); + } else { + fail(String.format(fmt, i1, i2)); + } + } + + static void check(boolean cond, String fmt, String s, int i) { + if (cond) { + pass(); + } else { + fail(String.format(fmt, s, i)); + } + } + + static void check(boolean cond, String fmt, String s, int i, Object o) { + if (cond) { + pass(); + } else { + fail(String.format(fmt, s, i, o)); + } + } + static void equal(Object x, Object y) { if (Objects.equals(x, y)) { pass();