diff --git a/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java b/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java index 858e50f..dcb1249 100644 --- a/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java +++ b/primitiveCollections/src/test/java/org/lucares/collections/BenchmarkHarness.java @@ -19,6 +19,66 @@ public class BenchmarkHarness { void run(T input); } + static class SortedListGenerator implements Generator { + + 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 { + + 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 { + + private final Generator generatorA; + private final Generator generatorB; + + public ListPairGenerator(final Generator generator) { + this(generator, generator); + } + + public ListPairGenerator(final Generator generatorA, final Generator 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

void test(final String name, final Generator

generator, final Invocation

invoker, final int iterations) { @@ -45,44 +105,25 @@ public class BenchmarkHarness { 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 IntList sizes = IntList.of(10, 100, 1000, 10_000, 100_000); - final Generator generatorSortedPair = () -> { - final IntListPair result = new IntListPair(); + for (int l = 0; l < sizes.size(); l++) { - result.a = generatorSorted.generateInput(); - result.b = generatorSorted.generateInput(); + final int size = sizes.get(l); - return result; - }; + final Generator generatorSorted = new SortedListGenerator(size); + final Generator generatorUnsorted = new UnsortedListGenerator(size); + final Generator generatorSortedPair = new ListPairGenerator(generatorSorted); + final Generator generatorUnsortedPair = new ListPairGenerator(generatorUnsorted); - final Generator generatorUnsortedPair = () -> { - final IntListPair result = new IntListPair(); + final Invocation union = p -> IntList.union(p.a, p.b); - 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); + 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); + } } } }