navigablemapcheck.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 529 行 · 第 1/2 页
JAVA
529 行
/**
* @test
* @synopsis Times and checks basic map operations
*/
import java.util.*;
import java.io.*;
import edu.emory.mathcs.backport.java.util.*;
public class NavigableMapCheck {
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 = null;
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]);
System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size);
absentSize = 8;
while (absentSize < size) absentSize <<= 1;
absentMask = absentSize - 1;
absent = new Integer[absentSize];
for (int i = 0; i < absentSize; ++i)
absent[i] = new Integer(i * 2);
Integer[] key = new Integer[size];
for (int i = 0; i < size; ++i)
key[i] = new Integer(i * 2 + 1);
for (int rep = 0; rep < numTests; ++rep) {
runTest(newMap(mapClass), key);
}
TestTimer.printStats();
}
static NavigableMap newMap(Class cl) {
try {
NavigableMap m = (NavigableMap)cl.newInstance();
return m;
} catch(Exception e) {
throw new RuntimeException("Can't instantiate " + cl + ": " + e);
}
}
static void runTest(NavigableMap s, Integer[] key) {
shuffle(key);
int size = key.length;
long startTime = System.currentTimeMillis();
test(s, key);
long time = System.currentTimeMillis() - startTime;
}
static void t1(String nm, int n, NavigableMap 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, NavigableMap 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, NavigableMap s, Integer[] key, int expect) {
int sum = 0;
timer.start(nm, n);
for (int i = 0; i < n; i++) {
if (s.put(key[i], absent[i & absentMask]) == null) ++sum;
}
timer.finish();
reallyAssert (sum == expect);
}
static void t4(String nm, int n, NavigableMap 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, NavigableMap 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, NavigableMap 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, NavigableMap 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, NavigableMap 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(NavigableMap 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 higherTest(NavigableMap s) {
int sum = 0;
int iters = s.size();
timer.start("Higher ", iters);
Map.Entry e = s.firstEntry();
while (e != null) {
++sum;
e = s.higherEntry(e.getKey());
}
timer.finish();
reallyAssert (sum == iters);
}
static void lowerTest(NavigableMap s) {
int sum = 0;
int iters = s.size();
timer.start("Lower ", iters);
Map.Entry e = s.firstEntry();
while (e != null) {
++sum;
e = s.higherEntry(e.getKey());
}
timer.finish();
reallyAssert (sum == iters);
}
static void ceilingTest(NavigableMap s) {
int sum = 0;
int iters = s.size();
if (iters > absentSize) iters = absentSize;
timer.start("Ceiling ", iters);
for (int i = 0; i < iters; ++i) {
Map.Entry e = s.ceilingEntry(absent[i]);
if (e != null)
++sum;
}
timer.finish();
reallyAssert (sum == iters);
}
static void floorTest(NavigableMap s) {
int sum = 0;
int iters = s.size();
if (iters > absentSize) iters = absentSize;
timer.start("Floor ", iters);
for (int i = 1; i < iters; ++i) {
Map.Entry e = s.floorEntry(absent[i]);
if (e != null)
++sum;
}
timer.finish();
reallyAssert (sum == iters-1);
}
static void ktest(NavigableMap 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(NavigableMap 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(NavigableMap s, int size) {
int sum = 0;
timer.start("Iter Value ", size);
for (Iterator it = s.values().iterator(); it.hasNext(); ) {
if(it.next() != MISSING)
++sum;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?