Skip to content

Commit f1825e9

Browse files
authored
Merge pull request #7 from Hetshah1998/benchmark
benchmark
2 parents 958e224 + 1852b27 commit f1825e9

File tree

6 files changed

+182
-1
lines changed

6 files changed

+182
-1
lines changed

build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,15 @@ 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+
testImplementation 'org.openjdk.jmh:jmh-core:1.35'
44+
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
4345

44-
compileOnly 'org.projectlombok:lombok:1.18.26'
46+
implementation 'org.projectlombok:lombok:1.18.26'
4547
annotationProcessor 'org.projectlombok:lombok:1.18.26'
48+
testAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.36'
4649

50+
testImplementation 'org.openjdk.jmh:jmh-core:1.35'
51+
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
4752
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.4.2'
4853
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.4.2'
4954
testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.3.3'
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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.github.sidhant92.boolparser.parser.antlr.BoolParser;
19+
import com.github.sidhant92.boolparser.provider.BoolParserDataProvider;
20+
import lombok.SneakyThrows;
21+
22+
/**
23+
* @author Het Shah
24+
* @since 08/02/2023
25+
*/
26+
@State (Scope.Benchmark)
27+
@OutputTimeUnit (TimeUnit.MICROSECONDS)
28+
public class EvaluationBenchmarkService {
29+
private static Map<String, Object> data;
30+
31+
private static BoolParser parser;
32+
33+
private static BooleanExpressionEvaluator evaluator;
34+
35+
public static void main(String[] args) throws RunnerException, IOException {
36+
37+
Options opt = new OptionsBuilder()
38+
.include(EvaluationBenchmarkService.class.getSimpleName())
39+
.forks(1)
40+
.build();
41+
new Runner(opt).run();
42+
}
43+
44+
@SneakyThrows
45+
@Setup
46+
public void setup() {
47+
data = BoolParserDataProvider.getData();
48+
parser = new BoolParser();
49+
evaluator = new BooleanExpressionEvaluator(parser);
50+
}
51+
52+
@Benchmark
53+
@Warmup(iterations = 2)
54+
@BenchmarkMode (Mode.SampleTime) //change here to check for specific mode
55+
public void benchmarkEvaluation() {
56+
final String rule = "b>0 AND z IN ('c1', 'c2')";
57+
evaluator.evaluate(rule, data);
58+
}
59+
60+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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.github.sidhant92.boolparser.parser.antlr.BoolParser;
19+
import com.github.sidhant92.boolparser.provider.BoolParserDataProvider;
20+
import lombok.SneakyThrows;
21+
22+
/**
23+
* @author Het Shah
24+
* @since 09/02/2023
25+
*/
26+
@State (Scope.Benchmark)
27+
@OutputTimeUnit (TimeUnit.MICROSECONDS)
28+
public class ParserBenchmarkService {
29+
private static Map<String, Object> data;
30+
31+
private static BoolParser parser;
32+
33+
34+
public static void main(String[] args) throws RunnerException, IOException {
35+
Options opt = new OptionsBuilder().include(ParserBenchmarkService.class.getSimpleName()).forks(1).build();
36+
new Runner(opt).run();
37+
}
38+
39+
@SneakyThrows
40+
@Setup
41+
public void setup() {
42+
data = BoolParserDataProvider.getData();
43+
parser = new BoolParser();
44+
}
45+
46+
@Benchmark
47+
@Warmup (iterations = 2)
48+
@BenchmarkMode (Mode.SampleTime) //change here to check for specific mode
49+
public void benchmarkEvaluation() {
50+
final String rule = "b>0 AND z IN ('c1', 'c2')";
51+
parser.parseExpression(rule);
52+
}
53+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.sidhant92.boolparser.provider;
2+
3+
import java.io.File;
4+
import java.util.Map;
5+
import com.fasterxml.jackson.core.type.TypeReference;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import io.vavr.control.Try;
8+
9+
/**
10+
* @author Het Shah
11+
* @since 08/02/2023
12+
*/
13+
public class BoolParserDataProvider {
14+
public static Map<String, Object> getData() {
15+
final ObjectMapper objectMapper = CommonsDataProvider.getObjectMapper();
16+
return Try.of(() -> objectMapper.readValue(new File("src/test/resources/data.json"), new TypeReference<Map<String, Object>>() {}))
17+
.getOrElseGet(ex -> null);
18+
}
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.sidhant92.boolparser.provider;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
5+
6+
/**
7+
* @author Het Shah
8+
* @since 08/02/2023
9+
*/
10+
public class CommonsDataProvider {
11+
public static ObjectMapper getObjectMapper() {
12+
return new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
13+
}
14+
}

src/test/resources/data.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"b":1,
3+
"c":{
4+
"d":[
5+
"x",
6+
"y"
7+
],
8+
"e":"xyz"
9+
},
10+
"f":{
11+
"g":[
12+
"arr1",
13+
"arr2"
14+
],
15+
"h":{
16+
"a":"b",
17+
"c":"d",
18+
"e":true
19+
},
20+
"j":24
21+
},
22+
"x":[
23+
"a1",
24+
"a2",
25+
"a3",
26+
"a4"
27+
],
28+
"y":24,
29+
"z":"c1"
30+
}

0 commit comments

Comments
 (0)