You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2017/08/26 19:31:49 UTC
[1/2] groovy git commit: migrate benchmarks to JMH (closes #583)
Repository: groovy
Updated Branches:
refs/heads/master 010624d92 -> d20c047d3
migrate benchmarks to JMH (closes #583)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d8705436
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d8705436
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d8705436
Branch: refs/heads/master
Commit: d8705436ec0631a816ba0a4f88acd0b0797d6fe1
Parents: 010624d
Author: John Wagenleitner <jw...@apache.org>
Authored: Sun Jul 23 12:54:48 2017 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat Aug 26 12:00:26 2017 -0700
----------------------------------------------------------------------
.../org/apache/groovy/bench/AckermannBench.java | 63 ++++++++++++++++++
.../java/org/apache/groovy/bench/AryBench.java | 70 ++++++++++++++++++++
.../java/org/apache/groovy/bench/FiboBench.java | 62 +++++++++++++++++
.../groovy/bench/dispatch/CallsiteBench.java | 14 ++--
.../plugin/GroovyRunnerRegistryBench.java | 4 +-
.../org/apache/groovy/bench/Ackermann.groovy | 29 ++++++++
.../groovy/org/apache/groovy/bench/Ary.groovy | 36 ++++++++++
.../groovy/org/apache/groovy/bench/Fibo.groovy | 28 ++++++++
8 files changed, 298 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AckermannBench.java
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AckermannBench.java b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AckermannBench.java
new file mode 100644
index 0000000..a49b69b
--- /dev/null
+++ b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AckermannBench.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench;
+
+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.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.concurrent.TimeUnit;
+
+@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Fork(3)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+public class AckermannBench {
+
+ @Param({"5", "6", "7", "8"})
+ private int n;
+
+ @Benchmark
+ public int java() {
+ return JavaAckermann.ack(3, n);
+ }
+
+ @Benchmark
+ public int groovy() {
+ return Ackermann.ack(3, n);
+ }
+
+ private static class JavaAckermann {
+ static int ack(int m, int n) {
+ if (m == 0) return n + 1;
+ if (n == 0) return ack(m - 1, 1);
+ return ack(m - 1, ack(m, n - 1));
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AryBench.java
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AryBench.java b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AryBench.java
new file mode 100644
index 0000000..73b088e
--- /dev/null
+++ b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/AryBench.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench;
+
+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.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.concurrent.TimeUnit;
+
+@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Fork(3)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+public class AryBench {
+
+ @Param({"10", "100", "1000", "1000000"})
+ private int n;
+
+ @Benchmark
+ public int java() {
+ return JavaAry.ary(n);
+ }
+
+ @Benchmark
+ public int groovy() {
+ return Ary.ary(n);
+ }
+
+ private static class JavaAry {
+ static int ary(int n) {
+ int[] x = new int[n];
+ int[] y = new int[n];
+
+ for (int i = 0; i < n; i++)
+ x[i] = i + 1;
+ for (int k = 0; k < 1000; k++ )
+ for (int j = n-1; j >= 0; j--)
+ y[j] += x[j];
+
+ return y[0] + y[n-1];
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/jmh/java/org/apache/groovy/bench/FiboBench.java
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/jmh/java/org/apache/groovy/bench/FiboBench.java b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/FiboBench.java
new file mode 100644
index 0000000..e834779
--- /dev/null
+++ b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/FiboBench.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench;
+
+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.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.concurrent.TimeUnit;
+
+@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
+@Fork(3)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+public class FiboBench {
+
+ @Param({"30", "31", "32", "33", "34"})
+ private int n;
+
+ @Benchmark
+ public int java() {
+ return JavaFibo.fib(n);
+ }
+
+ @Benchmark
+ public int groovy() {
+ return Fibo.fib(n);
+ }
+
+ private static class JavaFibo {
+ static int fib(int n) {
+ if (n < 2) return 1;
+ return fib(n - 2) + fib(n - 1);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/jmh/java/org/apache/groovy/bench/dispatch/CallsiteBench.java
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/jmh/java/org/apache/groovy/bench/dispatch/CallsiteBench.java b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/dispatch/CallsiteBench.java
index c6b0b80..ae68c92 100644
--- a/subprojects/performance/src/jmh/java/org/apache/groovy/bench/dispatch/CallsiteBench.java
+++ b/subprojects/performance/src/jmh/java/org/apache/groovy/bench/dispatch/CallsiteBench.java
@@ -39,7 +39,7 @@ public class CallsiteBench {
@Benchmark
public void dispatch_1_monomorphic_java(MonomorphicState state, Blackhole bh) {
- dispatch(state.receivers, bh);
+ JavaDispatch.dispatch(state.receivers, bh);
}
@Benchmark
@@ -49,7 +49,7 @@ public class CallsiteBench {
@Benchmark
public void dispatch_3_polymorphic_java(PolymorphicState state, Blackhole bh) {
- dispatch(state.receivers, bh);
+ JavaDispatch.dispatch(state.receivers, bh);
}
@Benchmark
@@ -59,12 +59,14 @@ public class CallsiteBench {
@Benchmark
public void dispatch_8_megamorphic_java(MegamorphicState state, Blackhole bh) {
- dispatch(state.receivers, bh);
+ JavaDispatch.dispatch(state.receivers, bh);
}
- private void dispatch(Object[] receivers, Blackhole bh) {
- for (Object receiver : receivers) {
- bh.consume(receiver.toString());
+ private static class JavaDispatch {
+ static void dispatch(Object[] receivers, Blackhole bh) {
+ for (Object receiver : receivers) {
+ bh.consume(receiver.toString());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/jmh/java/org/apache/groovy/plugin/GroovyRunnerRegistryBench.java
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/jmh/java/org/apache/groovy/plugin/GroovyRunnerRegistryBench.java b/subprojects/performance/src/jmh/java/org/apache/groovy/plugin/GroovyRunnerRegistryBench.java
index a419e54..606fa91 100644
--- a/subprojects/performance/src/jmh/java/org/apache/groovy/plugin/GroovyRunnerRegistryBench.java
+++ b/subprojects/performance/src/jmh/java/org/apache/groovy/plugin/GroovyRunnerRegistryBench.java
@@ -29,7 +29,7 @@ import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.infra.Blackhole;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -41,7 +41,7 @@ import java.util.concurrent.TimeUnit;
@State(Scope.Thread)
public class GroovyRunnerRegistryBench {
- static List<Object> control = new LinkedList<>();
+ static List<Object> control = new ArrayList<>();
static GroovyRunnerRegistry registry = GroovyRunnerRegistry.getInstance();
static {
control.add(new Object());
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ackermann.groovy
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ackermann.groovy b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ackermann.groovy
new file mode 100644
index 0000000..61470ee
--- /dev/null
+++ b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ackermann.groovy
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench
+
+class Ackermann {
+
+ static int ack(int m, int n) {
+ if (m == 0) return n + 1
+ if (n == 0) return ack(m - 1, 1)
+ return ack(m - 1, ack(m, n - 1))
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ary.groovy
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ary.groovy b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ary.groovy
new file mode 100644
index 0000000..97c804f
--- /dev/null
+++ b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Ary.groovy
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench
+
+class Ary {
+
+ static int ary(int n) {
+ int[] x = new int[n]
+ int[] y = new int[n]
+
+ for (int i = 0; i < n; i++)
+ x[i] = i + 1
+ for (int k = 0; k < 1000; k++ )
+ for (int j = n-1; j >= 0; j--)
+ y[j] += x[j]
+
+ return y[0] + y[n-1]
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/d8705436/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Fibo.groovy
----------------------------------------------------------------------
diff --git a/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Fibo.groovy b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Fibo.groovy
new file mode 100644
index 0000000..4602599
--- /dev/null
+++ b/subprojects/performance/src/test/groovy/org/apache/groovy/bench/Fibo.groovy
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy.bench
+
+class Fibo {
+
+ static int fib(int n) {
+ if (n < 2) return 1
+ return fib(n - 2) + fib(n - 1)
+ }
+
+}
[2/2] groovy git commit: GROOVY-8205: Regression test for STC Enum
values DGM methods (closes #592)
Posted by jw...@apache.org.
GROOVY-8205: Regression test for STC Enum values DGM methods (closes #592)
Issue fixed by commit 8c218dec34 (GROOVY-7283)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d20c047d
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d20c047d
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d20c047d
Branch: refs/heads/master
Commit: d20c047d3fbee196192ea94726a4648adcb5ae40
Parents: d870543
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat Aug 26 11:55:25 2017 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat Aug 26 12:00:27 2017 -0700
----------------------------------------------------------------------
.../stc/DefaultGroovyMethodsSTCTest.groovy | 23 +++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/d20c047d/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy b/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
index db43b5b..81eb450 100644
--- a/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
@@ -179,5 +179,26 @@ class DefaultGroovyMethodsSTCTest extends StaticTypeCheckingTestCase {
assert sorted3*.value == [10, 5, 20, 15]
'''
}
-}
+ // GROOVY-8205
+ void testEachOnEnumValues() {
+ assertScript '''
+ enum Functions {
+ A, B, C
+ }
+ def m() {
+ def results = []
+ Functions.values().each { results << it.name() }
+ results
+ }
+ def m2() {
+ def results = [:]
+ Functions.values().eachWithIndex { val, idx -> results[idx] = val.name() }
+ results
+ }
+ assert m() == ['A', 'B', 'C']
+ assert m2() == [0: 'A', 1: 'B', 2: 'C']
+ '''
+ }
+
+}