intmapcheck.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 576 行 · 第 1/2 页
JAVA
576 行
/**
* @test
* @synopsis Times and checks basic map operations
*/
import java.util.*;
import java.io.*;
import edu.emory.mathcs.backport.java.util.concurrent.helpers.*;
public class IntMapCheck {
static int absentSize;
static int absentMask;
static Integer[] absent;
static final Integer MISSING = new Integer(Integer.MIN_VALUE);
static TestTimer timer = new TestTimer();
static void reallyAssert(boolean b) {
if (!b) throw new Error("Failed Assertion");
}
public static void main(String[] args) throws Exception {
Class mapClass =edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.class;
int numTests = 50;
int size = 50000;
if (args.length > 0) {
try {
mapClass = Class.forName(args[0]);
} catch(ClassNotFoundException e) {
throw new RuntimeException("Class " + args[0] + " not found.");
}
}
if (args.length > 1)
numTests = Integer.parseInt(args[1]);
if (args.length > 2)
size = Integer.parseInt(args[2]);
boolean doSerializeTest = args.length > 3;
System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size);
absentSize = 4;
while (absentSize <= size) absentSize <<= 1;
absentMask = absentSize-1;
absent = new Integer[absentSize];
for (int i = 0; i < absentSize; ++i)
absent[i] = new Integer(2 * (i - 1) + 1);
Integer[] key = new Integer[size];
for (int i = 0; i < size; ++i)
key[i] = new Integer(2 * i);
for (int rep = 0; rep < numTests; ++rep) {
shuffle(absent);
runTest(newMap(mapClass), key);
}
TestTimer.printStats();
if (doSerializeTest)
stest(newMap(mapClass), size);
}
static Map newMap(Class cl) {
try {
Map m = (Map)cl.newInstance();
return m;
} catch(Exception e) {
throw new RuntimeException("Can't instantiate " + cl + ": " + e);
}
}
static void runTest(Map s, Integer[] key) {
shuffle(key);
int size = key.length;
long startTime = Utils.nanoTime();
test(s, key);
long time = Utils.nanoTime() - startTime;
}
static void t1(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
int iters = 4;
timer.start(nm, n * iters);
for (int j = 0; j < iters; ++j) {
for (int i = 0; i < n; i++) {
if (s.get(key[i]) != null) ++sum;
}
}
timer.finish();
reallyAssert (sum == expect * iters);
}
static void t2(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n);
for (int i = 0; i < n; i++) {
if (s.remove(key[i]) != null) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t3(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n);
for (int i = 0; i < n; i++) {
Integer k = key[i];
Integer v = absent[i & absentMask];
if (s.put(k, v) == null) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t4(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n);
for (int i = 0; i < n; i++) {
if (s.containsKey(key[i])) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t5(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n/2);
for (int i = n-2; i >= 0; i-=2) {
if (s.remove(key[i]) != null) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t6(String nm, int n, Map s, Integer[] k1, Integer[] k2) {
int sum = 0;
timer.start(nm, n * 2);
for (int i = 0; i < n; i++) {
if (s.get(k1[i]) != null) ++sum;
if (s.get(k2[i & absentMask]) != null) ++sum;
}
timer.finish();
reallyAssert (sum == n);
}
static void t7(String nm, int n, Map s, Integer[] k1, Integer[] k2) {
int sum = 0;
timer.start(nm, n * 2);
for (int i = 0; i < n; i++) {
if (s.containsKey(k1[i])) ++sum;
if (s.containsKey(k2[i & absentMask])) ++sum;
}
timer.finish();
reallyAssert (sum == n);
}
static void t8(String nm, int n, Map s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n);
for (int i = 0; i < n; i++) {
if (s.get(key[i]) != null) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t9(Map s) {
int sum = 0;
int iters = 20;
timer.start("ContainsValue (/n) ", iters * s.size());
int step = absentSize / iters;
for (int i = 0; i < absentSize; i += step)
if (s.containsValue(absent[i])) ++sum;
timer.finish();
reallyAssert (sum != 0);
}
static void ktest(Map s, int size, Integer[] key) {
timer.start("ContainsKey ", size);
Set ks = s.keySet();
int sum = 0;
for (int i = 0; i < size; i++) {
if (ks.contains(key[i])) ++sum;
}
timer.finish();
reallyAssert (sum == size);
}
static void ittest1(Map s, int size) {
int sum = 0;
timer.start("Iter Key ", size);
for (Iterator it = s.keySet().iterator(); it.hasNext(); ) {
if(it.next() != MISSING)
++sum;
}
timer.finish();
reallyAssert (sum == size);
}
static void ittest2(Map s, int size) {
int sum = 0;
timer.start("Iter Value ", size);
for (Iterator it = s.values().iterator(); it.hasNext(); ) {
if(it.next() != MISSING)
++sum;
}
timer.finish();
reallyAssert (sum == size);
}
static void ittest3(Map s, int size) {
int sum = 0;
timer.start("Iter Entry ", size);
for (Iterator it = s.entrySet().iterator(); it.hasNext(); ) {
if(it.next() != MISSING)
++sum;
}
timer.finish();
reallyAssert (sum == size);
}
static void ittest4(Map s, int size, int pos) {
IdentityHashMap seen = new IdentityHashMap(size);
reallyAssert (s.size() == size);
int sum = 0;
timer.start("Iter XEntry ", size);
Iterator it = s.entrySet().iterator();
Integer k = null;
Integer v = null;
for (int i = 0; i < size-pos; ++i) {
Map.Entry x = (Map.Entry)(it.next());
k = (Integer)x.getKey();
v = (Integer)x.getValue();
seen.put(k, k);
if (v != MISSING)
++sum;
}
reallyAssert (s.containsKey(k));
it.remove();
reallyAssert (!s.containsKey(k));
while (it.hasNext()) {
Map.Entry x = (Map.Entry)(it.next());
Integer k2 = (Integer)x.getKey();
seen.put(k2, k2);
if (k2 != MISSING)
++sum;
}
reallyAssert (s.size() == size-1);
s.put(k, v);
reallyAssert (seen.size() == size);
timer.finish();
reallyAssert (sum == size);
reallyAssert (s.size() == size);
}
static void ittest(Map s, int size) {
ittest1(s, size);
ittest2(s, size);
ittest3(s, size);
// for (int i = 0; i < size-1; ++i)
// ittest4(s, size, i);
}
static void entest1(Hashtable ht, int size) {
int sum = 0;
timer.start("Iter Enumeration Key ", size);
for (Enumeration en = ht.keys(); en.hasMoreElements(); ) {
if (en.nextElement() != MISSING)
++sum;
}
timer.finish();
reallyAssert (sum == size);
}
static void entest2(Hashtable ht, int size) {
int sum = 0;
timer.start("Iter Enumeration Value ", size);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?