Skip to content

Commit 5e09e06

Browse files
author
Het
committed
benchmark
1 parent 958e224 commit 5e09e06

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@ dependencies {
4040
implementation 'org.apache.maven:maven-artifact:3.5.2'
4141
implementation 'org.antlr:antlr4-runtime:4.11.1'
4242
implementation 'io.vavr:vavr:0.10.4'
43+
implementation 'org.openjdk.jmh:jmh-core:1.35'
44+
implementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
4345

4446
compileOnly 'org.projectlombok:lombok:1.18.26'
4547
annotationProcessor 'org.projectlombok:lombok:1.18.26'
48+
annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.36'
4649

4750
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.4.2'
4851
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.4.2'
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.github.sidhant92.boolparser.application;
2+
3+
import java.io.IOException;
4+
import java.util.Map;
5+
import java.util.concurrent.TimeUnit;
6+
import org.openjdk.jmh.annotations.Benchmark;
7+
import org.openjdk.jmh.annotations.BenchmarkMode;
8+
import org.openjdk.jmh.annotations.Mode;
9+
import org.openjdk.jmh.annotations.OutputTimeUnit;
10+
import org.openjdk.jmh.annotations.Scope;
11+
import org.openjdk.jmh.annotations.Setup;
12+
import org.openjdk.jmh.annotations.State;
13+
import org.openjdk.jmh.annotations.Warmup;
14+
import org.openjdk.jmh.runner.Runner;
15+
import org.openjdk.jmh.runner.RunnerException;
16+
import org.openjdk.jmh.runner.options.Options;
17+
import org.openjdk.jmh.runner.options.OptionsBuilder;
18+
import com.fasterxml.jackson.core.type.TypeReference;
19+
import com.fasterxml.jackson.databind.ObjectMapper;
20+
import com.github.sidhant92.boolparser.parser.antlr.BoolParser;
21+
import lombok.SneakyThrows;
22+
23+
/**
24+
* @author Het Shah
25+
* @since 08/02/2023
26+
*/
27+
@State (Scope.Benchmark)
28+
@OutputTimeUnit (TimeUnit.MICROSECONDS)
29+
public class BoolParserBenchmarkService {
30+
private static Map<String, Object> data;
31+
32+
private static String dataString;
33+
34+
private static BoolParser parser;
35+
36+
private static BooleanExpressionEvaluator evaluator;
37+
38+
public static void main(String[] args) throws RunnerException, IOException {
39+
40+
Options opt = new OptionsBuilder()
41+
.include(BoolParserBenchmarkService.class.getSimpleName())
42+
.forks(1)
43+
.build();
44+
new Runner(opt).run();
45+
}
46+
47+
@SneakyThrows
48+
@Setup
49+
public void setup() {
50+
final ObjectMapper objectMapper = new ObjectMapper();
51+
dataString = "{\"b\":1,\"c\":{\"d\":[\"x\",\"y\"],\"e\":\"xyz\"},\"f\":{\"g\":[\"arr1\",\"arr2\"],\"h\":{\"a\":\"b\",\"c\":\"d\",\"e\":true},\"j\":24},\"x\":[\"a1\",\"a2\",\"a3\",\"a4\"],\"y\":24, \"z\": \"c1\"}";
52+
data = objectMapper.readValue(dataString, new TypeReference<Map<String, Object>>() {});
53+
parser = new BoolParser();
54+
evaluator = new BooleanExpressionEvaluator(parser);
55+
}
56+
57+
@Benchmark
58+
@Warmup(iterations = 2)
59+
@BenchmarkMode (Mode.SampleTime) //change here to check for specific mode
60+
public void benchmarkEvaluation() {
61+
final String rule = "b>0 AND z IN ('c1', 'c2')";
62+
evaluator.evaluate(rule, data);
63+
}
64+
65+
@Benchmark
66+
@Warmup(iterations = 2)
67+
@BenchmarkMode(Mode.SampleTime) // change here to check for specific mode
68+
public void benchmarkParsing() {
69+
final String rule = "b>0 AND z IN ('c1', 'c2')";
70+
parser.parseExpression(rule);
71+
}
72+
73+
}

0 commit comments

Comments
 (0)