Skip to content

Commit 3156d9e

Browse files
committed
HV-2127 Add a missing SimpleSingleElementValidation/CascadedWithLotsOfItemsAndCyclesValidation for javax benchmarks
Signed-off-by: marko-bekhta <[email protected]>
1 parent 51b40d2 commit 3156d9e

File tree

3 files changed

+241
-0
lines changed

3 files changed

+241
-0
lines changed

performance/src/main/jakarta/org/hibernate/validator/performance/simple/SimpleSingleElementValidation.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,39 @@ public User(String name, String email, int age) {
5656
}
5757
}
5858

59+
private static class UserNoInterpolation {
60+
@NotNull(message = "must be not null")
61+
@Size(min = 3, max = 50, message = "size must be between 3 and 50")
62+
private String name;
63+
64+
@Size(min = 3, max = 50, message = "size must be between 3 and 50")
65+
@NotNull(message = "must be not null")
66+
private String email;
67+
68+
@Min(value = 20, message = "must be at least 20")
69+
private int age;
70+
71+
public UserNoInterpolation(String name, String email, int age) {
72+
this.name = name;
73+
this.email = email;
74+
this.age = age;
75+
}
76+
}
77+
5978
@State(Scope.Benchmark)
6079
public static class BenchmarkState {
6180
Validator validator;
6281
User validUser;
6382
User invalidUser;
83+
UserNoInterpolation invalidUserNoInterpolation;
6484

6585
@Setup
6686
public void setup() {
6787
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
6888
this.validator = factory.getValidator();
6989
this.validUser = new User( "John Doe", "[email protected]", 25 );
7090
this.invalidUser = new User( "Jo", "invalid-email", 19 );
91+
this.invalidUserNoInterpolation = new UserNoInterpolation( "Jo", "invalid-email", 19 );
7192
}
7293
}
7394

@@ -82,4 +103,10 @@ public void invalidObjectValidation(BenchmarkState state, Blackhole blackhole) {
82103
Set<ConstraintViolation<User>> violations = state.validator.validate( state.invalidUser );
83104
blackhole.consume( violations );
84105
}
106+
107+
@Benchmark
108+
public void invalidObjectNoInterpolationValidation(BenchmarkState state, Blackhole blackhole) {
109+
Set<ConstraintViolation<UserNoInterpolation>> violations = state.validator.validate( state.invalidUserNoInterpolation );
110+
blackhole.consume( violations );
111+
}
85112
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.validator.performance.cascaded;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import java.util.ArrayList;
10+
import java.util.HashSet;
11+
import java.util.List;
12+
import java.util.Set;
13+
import java.util.concurrent.TimeUnit;
14+
15+
import javax.validation.ConstraintViolation;
16+
import javax.validation.Valid;
17+
import javax.validation.Validation;
18+
import javax.validation.Validator;
19+
import javax.validation.ValidatorFactory;
20+
import javax.validation.constraints.NotNull;
21+
import org.openjdk.jmh.annotations.Benchmark;
22+
import org.openjdk.jmh.annotations.BenchmarkMode;
23+
import org.openjdk.jmh.annotations.Fork;
24+
import org.openjdk.jmh.annotations.Measurement;
25+
import org.openjdk.jmh.annotations.Mode;
26+
import org.openjdk.jmh.annotations.OutputTimeUnit;
27+
import org.openjdk.jmh.annotations.Scope;
28+
import org.openjdk.jmh.annotations.State;
29+
import org.openjdk.jmh.annotations.Threads;
30+
import org.openjdk.jmh.annotations.Warmup;
31+
import org.openjdk.jmh.infra.Blackhole;
32+
33+
public class CascadedWithLotsOfItemsAndCyclesValidation {
34+
35+
private static final int NUMBER_OF_ARTICLES_PER_SHOP = 2000;
36+
37+
@State(Scope.Benchmark)
38+
public static class CascadedWithLotsOfItemsValidationState {
39+
public volatile Validator validator;
40+
41+
public volatile Shop shop;
42+
43+
public CascadedWithLotsOfItemsValidationState() {
44+
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
45+
validator = factory.getValidator();
46+
47+
shop = createShop();
48+
}
49+
50+
private Shop createShop() {
51+
Shop shop = new Shop( 1 );
52+
53+
for ( int i = 0; i < NUMBER_OF_ARTICLES_PER_SHOP; i++ ) {
54+
shop.addArticle( new Article( i ) );
55+
}
56+
57+
return shop;
58+
}
59+
}
60+
61+
@Benchmark
62+
@BenchmarkMode(Mode.Throughput)
63+
@OutputTimeUnit(TimeUnit.SECONDS)
64+
@Fork(value = 1)
65+
@Threads(20)
66+
@Warmup(iterations = 10)
67+
@Measurement(iterations = 20)
68+
public void testCascadedValidationWithLotsOfItems(CascadedWithLotsOfItemsValidationState state, Blackhole bh) {
69+
Set<ConstraintViolation<Shop>> violations = state.validator.validate( state.shop );
70+
assertThat( violations ).hasSize( 0 );
71+
72+
bh.consume( violations );
73+
}
74+
75+
public static class Shop {
76+
@NotNull
77+
private Integer id;
78+
79+
@NotNull
80+
private List<@Valid @NotNull Article> articles = new ArrayList<>();
81+
82+
public Shop(Integer id) {
83+
this.id = id;
84+
}
85+
86+
public void addArticle(Article article) {
87+
articles.add( article );
88+
article.shops.add( this );
89+
}
90+
}
91+
92+
public static class Article {
93+
@NotNull
94+
private Integer id;
95+
96+
private Set<@Valid Shop> shops = new HashSet<>();
97+
98+
public Article(Integer id) {
99+
this.id = id;
100+
}
101+
}
102+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.validator.performance.simple;
6+
7+
import java.util.Set;
8+
import java.util.concurrent.TimeUnit;
9+
10+
import javax.validation.ConstraintViolation;
11+
import javax.validation.Validation;
12+
import javax.validation.Validator;
13+
import javax.validation.ValidatorFactory;
14+
import javax.validation.constraints.Min;
15+
import javax.validation.constraints.NotNull;
16+
import javax.validation.constraints.Size;
17+
import org.openjdk.jmh.annotations.Benchmark;
18+
import org.openjdk.jmh.annotations.BenchmarkMode;
19+
import org.openjdk.jmh.annotations.Fork;
20+
import org.openjdk.jmh.annotations.Measurement;
21+
import org.openjdk.jmh.annotations.Mode;
22+
import org.openjdk.jmh.annotations.OutputTimeUnit;
23+
import org.openjdk.jmh.annotations.Scope;
24+
import org.openjdk.jmh.annotations.Setup;
25+
import org.openjdk.jmh.annotations.State;
26+
import org.openjdk.jmh.annotations.Threads;
27+
import org.openjdk.jmh.annotations.Warmup;
28+
import org.openjdk.jmh.infra.Blackhole;
29+
30+
@State(Scope.Benchmark)
31+
@BenchmarkMode(Mode.Throughput)
32+
@OutputTimeUnit(TimeUnit.MILLISECONDS)
33+
@Fork(value = 1)
34+
@Threads(50)
35+
@Warmup(iterations = 10)
36+
@Measurement(iterations = 20)
37+
public class SimpleSingleElementValidation {
38+
39+
// The class to be validated
40+
private static class User {
41+
@NotNull
42+
@Size(min = 3, max = 50)
43+
private String name;
44+
45+
@Size(min = 3, max = 50)
46+
@NotNull
47+
private String email;
48+
49+
@Min(value = 20)
50+
private int age;
51+
52+
public User(String name, String email, int age) {
53+
this.name = name;
54+
this.email = email;
55+
this.age = age;
56+
}
57+
}
58+
59+
private static class UserNoInterpolation {
60+
@NotNull(message = "must be not null")
61+
@Size(min = 3, max = 50, message = "size must be between 3 and 50")
62+
private String name;
63+
64+
@Size(min = 3, max = 50, message = "size must be between 3 and 50")
65+
@NotNull(message = "must be not null")
66+
private String email;
67+
68+
@Min(value = 20, message = "must be at least 20")
69+
private int age;
70+
71+
public UserNoInterpolation(String name, String email, int age) {
72+
this.name = name;
73+
this.email = email;
74+
this.age = age;
75+
}
76+
}
77+
78+
@State(Scope.Benchmark)
79+
public static class BenchmarkState {
80+
Validator validator;
81+
User validUser;
82+
User invalidUser;
83+
UserNoInterpolation invalidUserNoInterpolation;
84+
85+
@Setup
86+
public void setup() {
87+
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
88+
this.validator = factory.getValidator();
89+
this.validUser = new User( "John Doe", "[email protected]", 25 );
90+
this.invalidUser = new User( "Jo", "invalid-email", 19 );
91+
this.invalidUserNoInterpolation = new UserNoInterpolation( "Jo", "invalid-email", 19 );
92+
}
93+
}
94+
95+
@Benchmark
96+
public void validObjectValidation(BenchmarkState state, Blackhole blackhole) {
97+
Set<ConstraintViolation<User>> violations = state.validator.validate( state.validUser );
98+
blackhole.consume( violations );
99+
}
100+
101+
@Benchmark
102+
public void invalidObjectValidation(BenchmarkState state, Blackhole blackhole) {
103+
Set<ConstraintViolation<User>> violations = state.validator.validate( state.invalidUser );
104+
blackhole.consume( violations );
105+
}
106+
107+
@Benchmark
108+
public void invalidObjectNoInterpolationValidation(BenchmarkState state, Blackhole blackhole) {
109+
Set<ConstraintViolation<UserNoInterpolation>> violations = state.validator.validate( state.invalidUserNoInterpolation );
110+
blackhole.consume( violations );
111+
}
112+
}

0 commit comments

Comments
 (0)