test/java/util/Map/Collisions.java

Print this page
rev 5714 : 7189926: Reduce test size for default run.
Reviewed-by: duke

*** 22,40 **** --- 22,46 ---- */ /* * @test * @bug 7126277 + * @run main Collisions -shortrun * @summary Ensure Maps behave well with lots of hashCode() collisions. * @author Mike Duigou */ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListMap; public class Collisions { + /** + * Number of elements per map. + */ + private static final int TEST_SIZE = 5000; + final static class HashableInteger implements Comparable<HashableInteger> { final int value; final int hashmask; //yes duplication
*** 62,94 **** @Override public int compareTo(HashableInteger o) { return value - o.value; } public String toString() { return Integer.toString(value); } } - private static final int ITEMS = 5000; - private static final Object KEYS[][]; ! static { ! HashableInteger UNIQUE_OBJECTS[] = new HashableInteger[ITEMS]; ! HashableInteger COLLIDING_OBJECTS[] = new HashableInteger[ITEMS]; ! String UNIQUE_STRINGS[] = new String[ITEMS]; ! String COLLIDING_STRINGS[] = new String[ITEMS]; ! for (int i = 0; i < ITEMS; i++) { UNIQUE_OBJECTS[i] = new HashableInteger(i, Integer.MAX_VALUE); COLLIDING_OBJECTS[i] = new HashableInteger(i, 10); UNIQUE_STRINGS[i] = unhash(i); COLLIDING_STRINGS[i] = (0 == i % 2) ? UNIQUE_STRINGS[i / 2] : "\u0000\u0000\u0000\u0000\u0000" + COLLIDING_STRINGS[i - 1]; } ! KEYS = new Object[][] { new Object[]{"Unique Objects", UNIQUE_OBJECTS}, new Object[]{"Colliding Objects", COLLIDING_OBJECTS}, new Object[]{"Unique Strings", UNIQUE_STRINGS}, new Object[]{"Colliding Strings", COLLIDING_STRINGS} }; --- 68,99 ---- @Override public int compareTo(HashableInteger o) { return value - o.value; } + @Override public String toString() { return Integer.toString(value); } } ! private static Object[][] makeTestData(int size) { ! HashableInteger UNIQUE_OBJECTS[] = new HashableInteger[size]; ! HashableInteger COLLIDING_OBJECTS[] = new HashableInteger[size]; ! String UNIQUE_STRINGS[] = new String[size]; ! String COLLIDING_STRINGS[] = new String[size]; ! for (int i = 0; i < size; i++) { UNIQUE_OBJECTS[i] = new HashableInteger(i, Integer.MAX_VALUE); COLLIDING_OBJECTS[i] = new HashableInteger(i, 10); UNIQUE_STRINGS[i] = unhash(i); COLLIDING_STRINGS[i] = (0 == i % 2) ? UNIQUE_STRINGS[i / 2] : "\u0000\u0000\u0000\u0000\u0000" + COLLIDING_STRINGS[i - 1]; } ! return new Object[][] { new Object[]{"Unique Objects", UNIQUE_OBJECTS}, new Object[]{"Colliding Objects", COLLIDING_OBJECTS}, new Object[]{"Unique Strings", UNIQUE_STRINGS}, new Object[]{"Colliding Strings", COLLIDING_STRINGS} };
*** 130,139 **** --- 135,147 ---- partial.append((char) rem); } } private static void realMain(String[] args) throws Throwable { + boolean shortRun = args.length > 0 && args[0].equals("-shortrun"); + + Object[][] KEYS = makeTestData(shortRun ? (TEST_SIZE / 2) : TEST_SIZE); for (Object[] keys_desc : KEYS) { Map<Object, Object>[] MAPS = (Map<Object, Object>[]) new Map[]{ new Hashtable<>(), new HashMap<>(), new IdentityHashMap<>(),