@@ -5,7 +5,7 @@ extern crate test;
5
5
use test:: { black_box, Bencher } ;
6
6
7
7
use pyo3:: prelude:: * ;
8
- use pyo3:: types:: PyDict ;
8
+ use pyo3:: types:: { PyDict , PyString } ;
9
9
10
10
use _pydantic_core:: SchemaValidator ;
11
11
@@ -14,17 +14,21 @@ fn build_schema_validator(py: Python, code: &str) -> SchemaValidator {
14
14
SchemaValidator :: py_new ( py, schema) . unwrap ( )
15
15
}
16
16
17
+ fn json < ' a > ( py : Python < ' a > , code : & ' a str ) -> & ' a PyAny {
18
+ black_box ( PyString :: new ( py, code) )
19
+ }
20
+
17
21
#[ bench]
18
22
fn ints_json ( bench : & mut Bencher ) {
19
23
let gil = Python :: acquire_gil ( ) ;
20
24
let py = gil. python ( ) ;
21
25
let validator = build_schema_validator ( py, "{'type': 'int'}" ) ;
22
26
23
- let result = validator. validate_json ( py, black_box ( "123" . to_string ( ) ) ) . unwrap ( ) ;
27
+ let result = validator. validate_json ( py, json ( py , "123" ) ) . unwrap ( ) ;
24
28
let result_int: i64 = result. extract ( py) . unwrap ( ) ;
25
29
assert_eq ! ( result_int, 123 ) ;
26
30
27
- bench. iter ( || black_box ( validator. validate_json ( py, black_box ( "123" . to_string ( ) ) ) . unwrap ( ) ) )
31
+ bench. iter ( || black_box ( validator. validate_json ( py, json ( py , "123" ) ) . unwrap ( ) ) )
28
32
}
29
33
30
34
#[ bench]
@@ -53,10 +57,7 @@ fn list_int_json(bench: &mut Bencher) {
53
57
( 0 ..100 ) . map( |x| x. to_string( ) ) . collect:: <Vec <String >>( ) . join( "," )
54
58
) ;
55
59
56
- bench. iter ( || {
57
- let input = black_box ( code. clone ( ) ) ;
58
- black_box ( validator. validate_json ( py, input) . unwrap ( ) )
59
- } )
60
+ bench. iter ( || black_box ( validator. validate_json ( py, json ( py, & code) ) . unwrap ( ) ) )
60
61
}
61
62
62
63
fn list_int_input ( py : Python < ' _ > ) -> ( SchemaValidator , PyObject ) {
@@ -110,8 +111,7 @@ fn list_error_json(bench: &mut Bencher) {
110
111
. join( ", " )
111
112
) ;
112
113
113
- let input = black_box ( code. clone ( ) ) ;
114
- match validator. validate_json ( py, input) {
114
+ match validator. validate_json ( py, json ( py, & code) ) {
115
115
Ok ( _) => panic ! ( "unexpectedly valid" ) ,
116
116
Err ( e) => {
117
117
let v = e. value ( py) ;
@@ -122,12 +122,9 @@ fn list_error_json(bench: &mut Bencher) {
122
122
}
123
123
} ;
124
124
125
- bench. iter ( || {
126
- let input = black_box ( code. clone ( ) ) ;
127
- match validator. validate_json ( py, input) {
128
- Ok ( _) => panic ! ( "unexpectedly valid" ) ,
129
- Err ( e) => black_box ( e) ,
130
- }
125
+ bench. iter ( || match validator. validate_json ( py, json ( py, & code) ) {
126
+ Ok ( _) => panic ! ( "unexpectedly valid" ) ,
127
+ Err ( e) => black_box ( e) ,
131
128
} )
132
129
}
133
130
@@ -197,10 +194,7 @@ fn list_any_json(bench: &mut Bencher) {
197
194
( 0 ..100 ) . map( |x| x. to_string( ) ) . collect:: <Vec <String >>( ) . join( "," )
198
195
) ;
199
196
200
- bench. iter ( || {
201
- let input = black_box ( code. clone ( ) ) ;
202
- black_box ( validator. validate_json ( py, input) . unwrap ( ) )
203
- } )
197
+ bench. iter ( || black_box ( validator. validate_json ( py, json ( py, & code) ) . unwrap ( ) ) )
204
198
}
205
199
206
200
#[ bench]
@@ -242,10 +236,7 @@ fn dict_json(bench: &mut Bencher) {
242
236
. join( ", " )
243
237
) ;
244
238
245
- bench. iter ( || {
246
- let input = black_box ( code. to_string ( ) ) ;
247
- black_box ( validator. validate_json ( py, input) . unwrap ( ) )
248
- } )
239
+ bench. iter ( || black_box ( validator. validate_json ( py, json ( py, & code) ) . unwrap ( ) ) )
249
240
}
250
241
251
242
#[ bench]
@@ -343,10 +334,7 @@ fn typed_dict_json(bench: &mut Bencher) {
343
334
344
335
let code = r#"{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8, "i": 9, "j": 0}"# . to_string ( ) ;
345
336
346
- bench. iter ( || {
347
- let input = black_box ( code. clone ( ) ) ;
348
- black_box ( validator. validate_json ( py, input) . unwrap ( ) )
349
- } )
337
+ bench. iter ( || black_box ( validator. validate_json ( py, json ( py, & code) ) . unwrap ( ) ) )
350
338
}
351
339
352
340
#[ bench]
0 commit comments