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<>(),