diff --git a/benchmark/jsonschema_validator.cc b/benchmark/jsonschema_validator.cc index 7e7f59626..1ea30e190 100644 --- a/benchmark/jsonschema_validator.cc +++ b/benchmark/jsonschema_validator.cc @@ -711,6 +711,56 @@ JSONSchema_Validate_Draft4_Ref_To_Single_Property(benchmark::State &state) { } } +static void +JSONSchema_Validate_Draft4_Additional_Properties_Type(benchmark::State &state) { + const sourcemeta::jsontoolkit::JSON schema{ + sourcemeta::jsontoolkit::parse(R"JSON({ + "$schema": "http://json-schema.org/draft-04/schema#", + "additionalProperties": { "type": "boolean" } + })JSON")}; + + const sourcemeta::jsontoolkit::JSON instance{ + sourcemeta::jsontoolkit::parse(R"JSON({ + "a": true, + "b": true, + "c": true, + "d": true, + "e": true, + "f": true, + "g": true, + "h": true, + "i": true, + "j": true, + "k": true, + "l": true, + "m": true, + "n": true, + "o": true, + "p": true, + "q": true, + "r": true, + "s": true, + "t": true, + "u": true, + "v": true, + "w": true, + "x": true, + "y": true, + "z": true + })JSON")}; + + const auto schema_template{sourcemeta::jsontoolkit::compile( + schema, sourcemeta::jsontoolkit::default_schema_walker, + sourcemeta::jsontoolkit::official_resolver, + sourcemeta::jsontoolkit::default_schema_compiler)}; + + for (auto _ : state) { + auto result{sourcemeta::jsontoolkit::evaluate(schema_template, instance)}; + assert(result); + benchmark::DoNotOptimize(result); + } +} + BENCHMARK(JSONSchema_Validate_Draft4_Meta_1_No_Callback); BENCHMARK(JSONSchema_Validate_Draft4_Required_Properties); BENCHMARK(JSONSchema_Validate_Draft4_Many_Optional_Properties_Minimal_Match); @@ -723,3 +773,4 @@ BENCHMARK(JSONSchema_Validate_Draft4_Properties_Triad_Required); BENCHMARK(JSONSchema_Validate_Draft4_Non_Recursive_Ref); BENCHMARK(JSONSchema_Validate_Draft4_Pattern_Properties_True); BENCHMARK(JSONSchema_Validate_Draft4_Ref_To_Single_Property); +BENCHMARK(JSONSchema_Validate_Draft4_Additional_Properties_Type);