diff --git a/build.gradle b/build.gradle index ced2eb3..c30c485 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,16 @@ + +buildscript { + repositories { + maven { + url "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "me.champeau.gradle:jmh-gradle-plugin:0.4.5" + } +} + + apply plugin: 'java' apply plugin: 'eclipse' @@ -9,6 +22,7 @@ subprojects { apply plugin: 'eclipse' apply plugin: 'maven' apply plugin: 'maven-publish' + apply plugin: 'me.champeau.gradle.jmh' // java compatibility version sourceCompatibility = 1.8 @@ -49,6 +63,10 @@ subprojects { dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } + + jmh { + jvmArgsAppend = "-ea" + } } task wrapper(type: Wrapper) { diff --git a/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkRemoveAll.java b/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkRemoveAll.java new file mode 100644 index 0000000..c5ec49f --- /dev/null +++ b/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkRemoveAll.java @@ -0,0 +1,59 @@ +package org.lucares.collections; + +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; + +@State(Scope.Benchmark) +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Fork(1) +public class BenchmarkRemoveAll { + + private IntList base = null; + private IntList remove = null; + + @Setup + public void setup() throws Exception { + + final int values = 100_000; + base = IntList.of(); + IntStream.range(0, values).forEachOrdered(i -> base.add(i)); + base.sort(); + + remove = IntList.of(); + IntStream.range(0, 50).forEachOrdered(i -> remove.add(i)); + remove.sort(); + } + + @TearDown + public void tearDown() { + base = null; + remove = null; + } + + @Benchmark + public void testRemoveAll() throws Exception { + + final IntList tmp = base.clone(); + tmp.removeAll(remove); + } + + @Benchmark + public void testRemoveAll_withRemoveIf() throws Exception { + + final IntList tmp = base.clone(); + tmp.removeIf((val, index) -> remove.indexOf(val) >= 0); + } +}