remove benchmark harness

we are using JMH instead
This commit is contained in:
2019-09-07 17:52:14 +02:00
parent 9f60c59aca
commit 6421b82ce1

View File

@@ -1,129 +0,0 @@
package org.lucares.collections;
import java.util.ArrayList;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.stream.IntStream;
public class BenchmarkHarness<T> {
static class IntListPair {
IntList a, b;
}
interface Generator<T> {
T generateInput();
}
interface Invocation<T> {
void run(T input);
}
static class SortedListGenerator implements Generator<IntList> {
private final int size;
public SortedListGenerator(final int size) {
this.size = size;
}
@Override
public IntList generateInput() {
final IntList result = IntList.of();
IntStream.range(0, size).forEachOrdered(i -> result.add(i));
result.sort();
return result;
}
};
static class UnsortedListGenerator implements Generator<IntList> {
private final int size;
public UnsortedListGenerator(final int size) {
this.size = size;
}
@Override
public IntList generateInput() {
final SortedListGenerator sortedListGenerator = new SortedListGenerator(size);
final IntList list = sortedListGenerator.generateInput();
list.shuffle();
return list;
}
};
static class ListPairGenerator implements Generator<IntListPair> {
private final Generator<IntList> generatorA;
private final Generator<IntList> generatorB;
public ListPairGenerator(final Generator<IntList> generator) {
this(generator, generator);
}
public ListPairGenerator(final Generator<IntList> generatorA, final Generator<IntList> generatorB) {
this.generatorA = generatorA;
this.generatorB = generatorB;
}
@Override
public IntListPair generateInput() {
final IntListPair result = new IntListPair();
result.a = generatorA.generateInput();
result.b = generatorB.generateInput();
return result;
}
}
public <P> void test(final String name, final Generator<P> generator, final Invocation<P> invoker,
final int iterations) {
final List<Double> durationsInMs = new ArrayList<>();
for (int i = 0; i < iterations; i++) {
final P input = generator.generateInput();
final long start = System.nanoTime();
invoker.run(input);
final long duration = (System.nanoTime() - start);
durationsInMs.add(duration / 1_000_000.0);
}
final DoubleSummaryStatistics statistics = durationsInMs.stream().mapToDouble(l -> l).summaryStatistics();
System.out.println(name + ": " + statistics.toString());
}
public static void main(final String[] args) {
final BenchmarkHarness<Object> harness = new BenchmarkHarness<>();
final IntList sizes = IntList.of(10, 100, 1000, 10_000, 100_000);
for (int l = 0; l < sizes.size(); l++) {
final int size = sizes.get(l);
final Generator<IntList> generatorSorted = new SortedListGenerator(size);
final Generator<IntList> generatorUnsorted = new UnsortedListGenerator(size);
final Generator<IntListPair> generatorSortedPair = new ListPairGenerator(generatorSorted);
final Generator<IntListPair> generatorUnsortedPair = new ListPairGenerator(generatorUnsorted);
final Invocation<IntListPair> union = p -> IntList.union(p.a, p.b);
for (int i = 0; i < 5; i++) {
harness.test("union(" + size + "): unsorted" + i, generatorUnsortedPair, union, 100);
}
for (int i = 0; i < 5; i++) {
harness.test("union(" + size + "): sorted" + i, generatorSortedPair, union, 100);
}
}
}
}