Skip to content

Commit

Permalink
Only apply type bounds optimizations on FastValidation mode (#1280)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Oct 10, 2024
1 parent 37aff6f commit e1fbd4b
Show file tree
Hide file tree
Showing 2 changed files with 181 additions and 9 deletions.
27 changes: 18 additions & 9 deletions src/jsonschema/default_compiler_draft4.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ auto compiler_draft4_validation_type(
unsigned_integer_property(schema_context.schema, "minProperties", 0)};
const auto maximum{
unsigned_integer_property(schema_context.schema, "maxProperties")};
if (minimum > 0 || maximum.has_value()) {
if (context.mode == SchemaCompilerMode::FastValidation &&
(minimum > 0 || maximum.has_value())) {
return {make<SchemaCompilerAssertionTypeObjectBounded>(
true, context, schema_context, dynamic_context,
{minimum, maximum, false})};
Expand All @@ -147,7 +148,8 @@ auto compiler_draft4_validation_type(
unsigned_integer_property(schema_context.schema, "minItems", 0)};
const auto maximum{
unsigned_integer_property(schema_context.schema, "maxItems")};
if (minimum > 0 || maximum.has_value()) {
if (context.mode == SchemaCompilerMode::FastValidation &&
(minimum > 0 || maximum.has_value())) {
return {make<SchemaCompilerAssertionTypeArrayBounded>(
true, context, schema_context, dynamic_context,
{minimum, maximum, false})};
Expand All @@ -167,7 +169,8 @@ auto compiler_draft4_validation_type(
unsigned_integer_property(schema_context.schema, "minLength", 0)};
const auto maximum{
unsigned_integer_property(schema_context.schema, "maxLength")};
if (minimum > 0 || maximum.has_value()) {
if (context.mode == SchemaCompilerMode::FastValidation &&
(minimum > 0 || maximum.has_value())) {
return {make<SchemaCompilerAssertionTypeStringBounded>(
true, context, schema_context, dynamic_context,
{minimum, maximum, false})};
Expand Down Expand Up @@ -1123,7 +1126,8 @@ auto compiler_draft4_validation_maxlength(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "string") {
return {};
Expand Down Expand Up @@ -1153,7 +1157,8 @@ auto compiler_draft4_validation_minlength(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "string") {
return {};
Expand Down Expand Up @@ -1183,7 +1188,8 @@ auto compiler_draft4_validation_maxitems(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "array") {
return {};
Expand Down Expand Up @@ -1213,7 +1219,8 @@ auto compiler_draft4_validation_minitems(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "array") {
return {};
Expand Down Expand Up @@ -1243,7 +1250,8 @@ auto compiler_draft4_validation_maxproperties(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "object") {
return {};
Expand Down Expand Up @@ -1273,7 +1281,8 @@ auto compiler_draft4_validation_minproperties(
}

// We'll handle it at the type level as an optimization
if (schema_context.schema.defines("type") &&
if (context.mode == SchemaCompilerMode::FastValidation &&
schema_context.schema.defines("type") &&
schema_context.schema.at("type").is_string() &&
schema_context.schema.at("type").to_string() == "object") {
return {};
Expand Down
163 changes: 163 additions & 0 deletions test/evaluator/evaluator_draft4_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3283,6 +3283,33 @@ TEST(JSONSchema_evaluator_draft4, minLength_4) {
"The value was expected to consist of a string of at least 1 character");
}

TEST(JSONSchema_evaluator_draft4, minLength_4_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "string",
"minLength": 1
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{"xx"};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionStringSizeGreater, "/minLength", "#/minLength",
"");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionStringSizeGreater, "/minLength",
"#/minLength", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type string");
EVALUATE_TRACE_POST_DESCRIBE(
instance, 1,
"The string value \"xx\" was expected to consist of at least 1 character "
"and it consisted of 2 characters");
}

TEST(JSONSchema_evaluator_draft4, minLength_5) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down Expand Up @@ -3372,6 +3399,33 @@ TEST(JSONSchema_evaluator_draft4, maxLength_4) {
"The value was expected to consist of a string of at most 2 characters");
}

TEST(JSONSchema_evaluator_draft4, maxLength_4_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "string",
"maxLength": 2
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{"xx"};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionStringSizeLess, "/maxLength", "#/maxLength",
"");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionStringSizeLess, "/maxLength",
"#/maxLength", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type string");
EVALUATE_TRACE_POST_DESCRIBE(
instance, 1,
"The string value \"xx\" was expected to consist of at most 2 characters "
"and it consisted of 2 characters");
}

TEST(JSONSchema_evaluator_draft4, maxLength_5) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down Expand Up @@ -3504,6 +3558,33 @@ TEST(JSONSchema_evaluator_draft4, minItems_5) {
"The value was expected to consist of an array of at least 2 items");
}

TEST(JSONSchema_evaluator_draft4, minItems_5_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"minItems": 2
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{
sourcemeta::jsontoolkit::parse("[ 1, 2, 3 ]")};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionArraySizeGreater, "/minItems", "#/minItems",
"");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionArraySizeGreater, "/minItems",
"#/minItems", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type array");
EVALUATE_TRACE_POST_DESCRIBE(instance, 1,
"The array value was expected to contain at "
"least 2 items and it contained 3 items");
}

TEST(JSONSchema_evaluator_draft4, minItems_6) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down Expand Up @@ -3614,6 +3695,32 @@ TEST(JSONSchema_evaluator_draft4, maxItems_5) {
"The value was expected to consist of an array of at most 2 items");
}

TEST(JSONSchema_evaluator_draft4, maxItems_5_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"maxItems": 2
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{
sourcemeta::jsontoolkit::parse("[ 1, 2 ]")};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionArraySizeLess, "/maxItems", "#/maxItems", "");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionArraySizeLess, "/maxItems",
"#/maxItems", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type array");
EVALUATE_TRACE_POST_DESCRIBE(instance, 1,
"The array value was expected to contain at "
"most 2 items and it contained 2 items");
}

TEST(JSONSchema_evaluator_draft4, maxItems_6) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down Expand Up @@ -3732,6 +3839,34 @@ TEST(JSONSchema_evaluator_draft4, minProperties_4) {
"The value was expected to consist of an object of at least 1 property");
}

TEST(JSONSchema_evaluator_draft4, minProperties_4_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"minProperties": 1
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{
sourcemeta::jsontoolkit::parse("{ \"foo\": 1 }")};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionObjectSizeGreater, "/minProperties",
"#/minProperties", "");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionObjectSizeGreater, "/minProperties",
"#/minProperties", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type object");
EVALUATE_TRACE_POST_DESCRIBE(
instance, 1,
"The object value was expected to contain at least 1 property and it "
"contained 1 property: \"foo\"");
}

TEST(JSONSchema_evaluator_draft4, minProperties_5) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down Expand Up @@ -3826,6 +3961,34 @@ TEST(JSONSchema_evaluator_draft4, maxProperties_4) {
"The value was expected to consist of an object of at most 2 properties");
}

TEST(JSONSchema_evaluator_draft4, maxProperties_4_exhaustive) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"maxProperties": 2
})JSON")};

const sourcemeta::jsontoolkit::JSON instance{
sourcemeta::jsontoolkit::parse("{ \"bar\": 2, \"foo\": 1 }")};
EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, 2);

EVALUATE_TRACE_PRE(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_PRE(1, AssertionObjectSizeLess, "/maxProperties",
"#/maxProperties", "");

EVALUATE_TRACE_POST_SUCCESS(0, AssertionTypeStrict, "/type", "#/type", "");
EVALUATE_TRACE_POST_SUCCESS(1, AssertionObjectSizeLess, "/maxProperties",
"#/maxProperties", "");

EVALUATE_TRACE_POST_DESCRIBE(instance, 0,
"The value was expected to be of type object");
EVALUATE_TRACE_POST_DESCRIBE(
instance, 1,
"The object value was expected to contain at most 2 properties and it "
"contained 2 properties: \"bar\", and \"foo\"");
}

TEST(JSONSchema_evaluator_draft4, maxProperties_5) {
const sourcemeta::jsontoolkit::JSON schema{
sourcemeta::jsontoolkit::parse(R"JSON({
Expand Down

4 comments on commit e1fbd4b

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Benchmark suite Current: e1fbd4b Previous: 37aff6f Ratio
JSON_Array_Of_Objects_Unique 3542.5797568279286 ns/iter 4783.578877227337 ns/iter 0.74
JSONSchema_Validate_Draft4_Meta_1_No_Callback 757.3809552328534 ns/iter 925.2822699975223 ns/iter 0.82
JSONSchema_Validate_Draft4_Required_Properties 968.355495416522 ns/iter 1034.7158184268337 ns/iter 0.94
JSONSchema_Validate_Draft4_Many_Optional_Properties_Minimal_Match 156.34823259392374 ns/iter 165.21926272485166 ns/iter 0.95
JSONSchema_Validate_Draft4_Few_Optional_Properties_Minimal_Match 106.07597382735692 ns/iter 111.96255678071621 ns/iter 0.95
JSONSchema_Validate_Draft4_Items_Schema 2767.6847794736827 ns/iter 3114.72661587016 ns/iter 0.89
JSONSchema_Validate_Draft4_Nested_Object 23.03123385949121 ns/iter 25.068596771055155 ns/iter 0.92
JSONSchema_Validate_Draft4_Properties_Triad_Optional 1277.6275903038488 ns/iter 1999.316521895905 ns/iter 0.64
JSONSchema_Validate_Draft4_Properties_Triad_Closed 960.4896487250758 ns/iter 1405.5608246835068 ns/iter 0.68
JSONSchema_Validate_Draft4_Properties_Triad_Required 1307.7536343464242 ns/iter 1463.0862907775188 ns/iter 0.89
JSONSchema_Validate_Draft4_Non_Recursive_Ref 213.93484004924338 ns/iter 231.34435339610073 ns/iter 0.92
JSONSchema_Validate_Draft4_Pattern_Properties_True 1358.3983197232913 ns/iter 1487.1378834159893 ns/iter 0.91
JSONSchema_Validate_Draft4_Ref_To_Single_Property 105.06836684988922 ns/iter 115.15384919791448 ns/iter 0.91
JSONSchema_Validate_Draft4_Additional_Properties_Type 404.78599900114506 ns/iter 541.949449338809 ns/iter 0.75
JSONSchema_Validate_Draft4_Nested_Oneof 369.79399388625916 ns/iter 457.25810138375846 ns/iter 0.81
JSONSchema_Validate_Draft6_Property_Names 780.9149964704314 ns/iter 1079.2418627134848 ns/iter 0.72
JSONSchema_Validate_Draft7_If_Then_Else 169.47619161574724 ns/iter 208.17015817112323 ns/iter 0.81
JSONSchema_Compiler_Draft6_AdaptiveCard 2982391582.9999804 ns/iter 3579290708.0000305 ns/iter 0.83

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Benchmark suite Current: e1fbd4b Previous: 37aff6f Ratio
JSON_Array_Of_Objects_Unique 2128.076861965134 ns/iter 2174.985408046147 ns/iter 0.98
JSONSchema_Validate_Draft4_Meta_1_No_Callback 1002.8146386044235 ns/iter 977.4513869037038 ns/iter 1.03
JSONSchema_Validate_Draft4_Required_Properties 1630.9593186771508 ns/iter 1550.5428167037169 ns/iter 1.05
JSONSchema_Validate_Draft4_Many_Optional_Properties_Minimal_Match 181.08993959471638 ns/iter 180.53857074311838 ns/iter 1.00
JSONSchema_Validate_Draft4_Few_Optional_Properties_Minimal_Match 129.81869169033394 ns/iter 128.79651600542286 ns/iter 1.01
JSONSchema_Validate_Draft4_Items_Schema 3551.6944333116962 ns/iter 3489.733631887188 ns/iter 1.02
JSONSchema_Validate_Draft4_Nested_Object 32.55396513199086 ns/iter 33.4368700655597 ns/iter 0.97
JSONSchema_Validate_Draft4_Properties_Triad_Optional 1786.5987469060244 ns/iter 1782.26120768523 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1503.5467933626228 ns/iter 1485.9218420138002 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Required 1882.173808824814 ns/iter 1883.8885984928488 ns/iter 1.00
JSONSchema_Validate_Draft4_Non_Recursive_Ref 481.657403195996 ns/iter 481.5418599320939 ns/iter 1.00
JSONSchema_Validate_Draft4_Pattern_Properties_True 2423.8484124131837 ns/iter 2447.594610993615 ns/iter 0.99
JSONSchema_Validate_Draft4_Ref_To_Single_Property 133.98170960031456 ns/iter 132.0714280042046 ns/iter 1.01
JSONSchema_Validate_Draft4_Additional_Properties_Type 599.1407891480193 ns/iter 599.0656722803168 ns/iter 1.00
JSONSchema_Validate_Draft4_Nested_Oneof 475.5293533359972 ns/iter 472.2450434111126 ns/iter 1.01
JSONSchema_Validate_Draft6_Property_Names 1248.2066861473375 ns/iter 1226.8275637836662 ns/iter 1.02
JSONSchema_Validate_Draft7_If_Then_Else 210.36840247183747 ns/iter 209.68793416543483 ns/iter 1.00
JSONSchema_Compiler_Draft6_AdaptiveCard 5548031551.999998 ns/iter 5483468854.000023 ns/iter 1.01

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Benchmark suite Current: e1fbd4b Previous: 37aff6f Ratio
JSONSchema_Compiler_Draft6_AdaptiveCard 6097579111.9999485 ns/iter 6102685909.999991 ns/iter 1.00
JSONSchema_Validate_Draft4_Meta_1_No_Callback 1060.4012339073236 ns/iter 1065.4603791484517 ns/iter 1.00
JSONSchema_Validate_Draft4_Required_Properties 2238.8627905046883 ns/iter 2241.519664105006 ns/iter 1.00
JSONSchema_Validate_Draft4_Many_Optional_Properties_Minimal_Match 192.10103785830472 ns/iter 186.8751048294911 ns/iter 1.03
JSONSchema_Validate_Draft4_Few_Optional_Properties_Minimal_Match 138.00162208561028 ns/iter 132.99983007624684 ns/iter 1.04
JSONSchema_Validate_Draft4_Items_Schema 3014.472530214511 ns/iter 2999.2824093086397 ns/iter 1.01
JSONSchema_Validate_Draft4_Nested_Object 22.68977018780971 ns/iter 24.021828934570998 ns/iter 0.94
JSONSchema_Validate_Draft4_Properties_Triad_Optional 1691.1989168123507 ns/iter 1759.5718155656675 ns/iter 0.96
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1408.2112288794392 ns/iter 1442.1280331315686 ns/iter 0.98
JSONSchema_Validate_Draft4_Properties_Triad_Required 1766.3757960979763 ns/iter 1851.2428725673444 ns/iter 0.95
JSONSchema_Validate_Draft4_Non_Recursive_Ref 470.0944695152115 ns/iter 461.26461474018566 ns/iter 1.02
JSONSchema_Validate_Draft4_Pattern_Properties_True 2226.4417491434356 ns/iter 2363.420447805156 ns/iter 0.94
JSONSchema_Validate_Draft4_Ref_To_Single_Property 146.26158567273671 ns/iter 140.30373469008543 ns/iter 1.04
JSONSchema_Validate_Draft4_Additional_Properties_Type 1098.4992648012455 ns/iter 1080.2937232871002 ns/iter 1.02
JSONSchema_Validate_Draft4_Nested_Oneof 425.6813259656307 ns/iter 425.0937193771304 ns/iter 1.00
JSONSchema_Validate_Draft6_Property_Names 1575.2913536458516 ns/iter 1555.8833485225211 ns/iter 1.01
JSONSchema_Validate_Draft7_If_Then_Else 205.92983562539715 ns/iter 193.47477997376217 ns/iter 1.06
JSON_Array_Of_Objects_Unique 3158.5907489694314 ns/iter 3211.57328972226 ns/iter 0.98

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Benchmark suite Current: e1fbd4b Previous: 37aff6f Ratio
JSON_Array_Of_Objects_Unique 5175.736999999572 ns/iter 5265.401999999995 ns/iter 0.98
JSONSchema_Validate_Draft4_Meta_1_No_Callback 2345.2917857144125 ns/iter 2393.770989095413 ns/iter 0.98
JSONSchema_Validate_Draft4_Required_Properties 2013.7666671501734 ns/iter 2023.0065435341899 ns/iter 1.00
JSONSchema_Validate_Draft4_Many_Optional_Properties_Minimal_Match 565.6636607142218 ns/iter 556.4482142856622 ns/iter 1.02
JSONSchema_Validate_Draft4_Few_Optional_Properties_Minimal_Match 410.6144369263109 ns/iter 408.268928202329 ns/iter 1.01
JSONSchema_Validate_Draft4_Items_Schema 6344.918750000618 ns/iter 6485.616071427407 ns/iter 0.98
JSONSchema_Validate_Draft4_Nested_Object 161.67758928570413 ns/iter 160.41886160712082 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Optional 5649.7303571429065 ns/iter 5441.794999999274 ns/iter 1.04
JSONSchema_Validate_Draft4_Properties_Triad_Closed 4529.7006249995775 ns/iter 4441.994375000036 ns/iter 1.02
JSONSchema_Validate_Draft4_Properties_Triad_Required 5484.171999999035 ns/iter 5485.782142855554 ns/iter 1.00
JSONSchema_Validate_Draft4_Non_Recursive_Ref 575.3708035714209 ns/iter 534.0078999997786 ns/iter 1.08
JSONSchema_Validate_Draft4_Pattern_Properties_True 8037.893973215558 ns/iter 8020.671782713101 ns/iter 1.00
JSONSchema_Validate_Draft4_Ref_To_Single_Property 418.78832659640693 ns/iter 416.13310519938176 ns/iter 1.01
JSONSchema_Validate_Draft4_Additional_Properties_Type 742.7126116069819 ns/iter 735.8639508928836 ns/iter 1.01
JSONSchema_Validate_Draft4_Nested_Oneof 1101.4648437498665 ns/iter 1109.7532812499367 ns/iter 0.99
JSONSchema_Validate_Draft6_Property_Names 1856.4913897245672 ns/iter 1865.3130047440675 ns/iter 1.00
JSONSchema_Validate_Draft7_If_Then_Else 554.0840000001026 ns/iter 557.8491999999642 ns/iter 0.99
JSONSchema_Compiler_Draft6_AdaptiveCard 10081019799.999922 ns/iter 10214839699.999857 ns/iter 0.99

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.