From 7ba33e2eb96dc2f8a7adf3d77771dc0fa13ddae6 Mon Sep 17 00:00:00 2001 From: James Ring Date: Mon, 31 May 2021 00:01:21 -0700 Subject: [PATCH] add Pattern.split benchmark --- .../google/re2j/benchmark/BenchmarkSplit.java | 45 +++++++++++++++++++ .../re2j/benchmark/Implementations.java | 12 +++++ 2 files changed, 57 insertions(+) create mode 100644 benchmarks/src/main/java/com/google/re2j/benchmark/BenchmarkSplit.java diff --git a/benchmarks/src/main/java/com/google/re2j/benchmark/BenchmarkSplit.java b/benchmarks/src/main/java/com/google/re2j/benchmark/BenchmarkSplit.java new file mode 100644 index 00000000..14bd95ed --- /dev/null +++ b/benchmarks/src/main/java/com/google/re2j/benchmark/BenchmarkSplit.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 The Go Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ +package com.google.re2j.benchmark; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.concurrent.TimeUnit; + +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) +public class BenchmarkSplit { + @Param({"JDK", "RE2J"}) + private Implementations impl; + + private Implementations.Pattern pattern; + + private String input; + + @Setup + public void setup() { + pattern = Implementations.Pattern.compile(impl, "a"); + + StringBuilder b = new StringBuilder(); + for (int i = 0; i < 100; i++) { + b.append("this should be a pretty big string containing a few delimiters to split on"); + } + + input = b.toString(); + } + + @Benchmark + public void benchmarkSplit(Blackhole bh) { + bh.consume(pattern.split(input)); + } +} diff --git a/benchmarks/src/main/java/com/google/re2j/benchmark/Implementations.java b/benchmarks/src/main/java/com/google/re2j/benchmark/Implementations.java index 2fff1dbb..5cb00c4d 100644 --- a/benchmarks/src/main/java/com/google/re2j/benchmark/Implementations.java +++ b/benchmarks/src/main/java/com/google/re2j/benchmark/Implementations.java @@ -82,6 +82,8 @@ public static Pattern compile(Implementations impl, String pattern) { public abstract Matcher matcher(byte[] bytes); + public abstract String[] split(String str); + public static class JdkPattern extends Pattern { private final java.util.regex.Pattern pattern; @@ -99,6 +101,11 @@ public Matcher matcher(String str) { public Matcher matcher(byte[] bytes) { return new Matcher.JdkMatcher(pattern.matcher(new String(bytes))); } + + @Override + public String[] split(String str) { + return pattern.split(str); + } } public static class Re2Pattern extends Pattern { @@ -118,6 +125,11 @@ public Matcher matcher(String str) { public Matcher matcher(byte[] bytes) { return new Matcher.Re2Matcher(pattern.matcher(bytes)); } + + @Override + public String[] split(String str) { + return pattern.split(str); + } } } }