7189926: Reduce test size for default run. Add additional run enabling alternative hashing.
Reviewed-by: alanb
--- a/jdk/test/java/util/Map/Collisions.java Fri Sep 14 10:14:02 2012 -0700
+++ b/jdk/test/java/util/Map/Collisions.java Tue Sep 11 07:42:02 2012 -0700
@@ -24,6 +24,8 @@
/*
* @test
* @bug 7126277
+ * @run main Collisions -shortrun
+ * @run main Collisions -Djdk.map.althashing.threshold=0 -shortrun
* @summary Ensure Maps behave well with lots of hashCode() collisions.
* @author Mike Duigou
*/
@@ -33,6 +35,11 @@
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;
@@ -64,20 +71,19 @@
return value - o.value;
}
+ @Override
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];
+ 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 < ITEMS; i++) {
+ 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);
@@ -86,7 +92,7 @@
: "\u0000\u0000\u0000\u0000\u0000" + COLLIDING_STRINGS[i - 1];
}
- KEYS = new Object[][] {
+ return new Object[][] {
new Object[]{"Unique Objects", UNIQUE_OBJECTS},
new Object[]{"Colliding Objects", COLLIDING_OBJECTS},
new Object[]{"Unique Strings", UNIQUE_STRINGS},
@@ -132,23 +138,29 @@
}
private static void realMain(String[] args) throws Throwable {
- for (Object[] keys_desc : KEYS) {
- Map<Object, Object>[] MAPS = (Map<Object, Object>[]) new Map[]{
+ boolean shortRun = args.length > 0 && args[0].equals("-shortrun");
+
+ Object[][] mapKeys = makeTestData(shortRun ? (TEST_SIZE / 2) : TEST_SIZE);
+
+ // loop through data sets
+ for (Object[] keys_desc : mapKeys) {
+ Map<Object, Object>[] maps = (Map<Object, Object>[]) new Map[]{
+ new HashMap<>(),
new Hashtable<>(),
- new HashMap<>(),
new IdentityHashMap<>(),
new LinkedHashMap<>(),
- new ConcurrentHashMap<>(),
+ new TreeMap<>(),
new WeakHashMap<>(),
- new TreeMap<>(),
+ new ConcurrentHashMap<>(),
new ConcurrentSkipListMap<>()
};
- for (Map<Object, Object> map : MAPS) {
+ // for each map type.
+ for (Map<Object, Object> map : maps) {
String desc = (String) keys_desc[0];
Object[] keys = (Object[]) keys_desc[1];
try {
- testMap(map, desc, keys);
+ testMap(map, desc, keys);
} catch(Exception all) {
unexpected("Failed for " + map.getClass().getName() + " with " + desc, all);
}
@@ -397,7 +409,7 @@
}
public static void main(String[] args) throws Throwable {
- Thread.currentThread().setName("Collisions");
+ Thread.currentThread().setName(Collisions.class.getName());
// Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
try {
realMain(args);