From 5515523100479f64191db61279ef9f8c3250988e Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sun, 21 Jan 2018 19:53:15 +0100 Subject: [PATCH] add simple benchmarking helper --- .../lucares/collections/BenchmarkHarness.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java diff --git a/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java b/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java new file mode 100644 index 0000000..858e50f --- /dev/null +++ b/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java @@ -0,0 +1,88 @@ +package org.lucares.collections; + +import java.util.ArrayList; +import java.util.DoubleSummaryStatistics; +import java.util.List; +import java.util.stream.IntStream; + +public class BenchmarkHarness { + + static class IntListPair { + IntList a, b; + } + + interface Generator { + T generateInput(); + } + + interface Invocation { + void run(T input); + } + + public

void test(final String name, final Generator

generator, final Invocation

invoker, + final int iterations) { + + final List 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 harness = new BenchmarkHarness<>(); + + final Generator generatorSorted = () -> { + final int values = 100_000; + final IntList result = IntList.of(); + IntStream.range(0, values).forEachOrdered(i -> result.add(i)); + result.sort(); + return result; + }; + final Generator generatorUnsorted = () -> { + final IntList result = generatorSorted.generateInput(); + result.shuffle(); + return result; + }; + + final Generator generatorSortedPair = () -> { + final IntListPair result = new IntListPair(); + + result.a = generatorSorted.generateInput(); + result.b = generatorSorted.generateInput(); + + return result; + }; + + final Generator generatorUnsortedPair = () -> { + final IntListPair result = new IntListPair(); + + result.a = generatorUnsorted.generateInput(); + result.b = generatorUnsorted.generateInput(); + + return result; + }; + + final Invocation union = p -> IntList.union(p.a, p.b); + + for (int i = 0; i < 10; i++) { + harness.test("union(): unsorted" + i, generatorUnsortedPair, union, 100); + } + for (int i = 0; i < 10; i++) { + harness.test("union(): sorted" + i, generatorSortedPair, union, 100); + } + } +}