Skip to content

Commit

Permalink
Ensure HyperSchema meta-schemas can be bundled (#1432)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Jan 13, 2025
1 parent 74edf62 commit 155f7df
Show file tree
Hide file tree
Showing 7 changed files with 256 additions and 3 deletions.
11 changes: 8 additions & 3 deletions src/jsonschema/bundle.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ auto definitions_keyword(const std::map<std::string, bool> &vocabularies)
}

if (vocabularies.contains("http://json-schema.org/draft-07/schema#") ||
vocabularies.contains("http://json-schema.org/draft-07/hyper-schema#") ||
vocabularies.contains("http://json-schema.org/draft-06/schema#") ||
vocabularies.contains("http://json-schema.org/draft-04/schema#")) {
vocabularies.contains("http://json-schema.org/draft-06/hyper-schema#") ||
vocabularies.contains("http://json-schema.org/draft-04/schema#") ||
vocabularies.contains("http://json-schema.org/draft-04/hyper-schema#")) {
return "definitions";
}

Expand Down Expand Up @@ -57,8 +60,10 @@ auto bundle_schema(sourcemeta::jsontoolkit::JSON &root,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect) -> void {
frame.analyse(subschema, walker, resolver, default_dialect);

for (const auto &[key, reference] : frame.references()) {
// Otherwise, given recursion, we would be modifying the
// references list *while* looping on it
const auto references_copy = frame.references();
for (const auto &[key, reference] : references_copy) {
if (frame.traverse(reference.destination).has_value() ||

// We don't want to bundle official schemas, as we can expect
Expand Down
52 changes: 52 additions & 0 deletions test/jsonschema/jsonschema_bundle_2019_09_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -526,3 +526,55 @@ TEST(JSONSchema_bundle_2019_09, relative_base_uri_with_ref) {

EXPECT_EQ(document, expected);
}

TEST(JSONSchema_bundle_2019_09, hyperschema_smoke) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "https://json-schema.org/draft/2019-09/schema",
"$ref": "https://json-schema.org/draft/2019-09/hyper-schema"
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.is_object());
}

TEST(JSONSchema_bundle_2019_09, hyperschema_1) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "https://json-schema.org/draft/2019-09/schema",
"allOf": [
{ "$ref": "https://json-schema.org/draft/2019-09/schema" },
{ "$ref": "https://json-schema.org/draft/2019-09/meta/hyper-schema" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.defines("$defs"));
EXPECT_TRUE(document.at("$defs").is_object());
EXPECT_EQ(document.at("$defs").size(), 10);

EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/schema"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/core"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/applicator"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/validation"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/meta-data"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/format"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/content"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/meta/hyper-schema"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/links"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2019-09/hyper-schema"));
}
54 changes: 54 additions & 0 deletions test/jsonschema/jsonschema_bundle_2020_12_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -599,3 +599,57 @@ TEST(JSONSchema_bundle_2020_12, metaschema) {

EXPECT_EQ(document, expected);
}

TEST(JSONSchema_bundle_2020_12, hyperschema_smoke) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$ref": "https://json-schema.org/draft/2020-12/hyper-schema"
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.is_object());
}

TEST(JSONSchema_bundle_2020_12, hyperschema_1) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{ "$ref": "https://json-schema.org/draft/2020-12/schema" },
{ "$ref": "https://json-schema.org/draft/2020-12/meta/hyper-schema" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.defines("$defs"));
EXPECT_TRUE(document.at("$defs").is_object());
EXPECT_EQ(document.at("$defs").size(), 11);

EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/schema"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/core"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/applicator"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/unevaluated"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/validation"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/meta-data"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/format-annotation"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/content"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/meta/hyper-schema"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/links"));
EXPECT_TRUE(document.at("$defs").defines(
"https://json-schema.org/draft/2020-12/hyper-schema"));
}
38 changes: 38 additions & 0 deletions test/jsonschema/jsonschema_bundle_draft4_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -543,3 +543,41 @@ TEST(JSONSchema_bundle_draft4, relative_base_uri_with_ref) {

EXPECT_EQ(document, expected);
}

TEST(JSONSchema_bundle_draft4, hyperschema_smoke) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/hyper-schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-04/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.is_object());
}

TEST(JSONSchema_bundle_draft4, hyperschema_1) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-04/schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-04/schema#" },
{ "$ref": "http://json-schema.org/draft-04/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.defines("definitions"));
EXPECT_TRUE(document.at("definitions").is_object());
EXPECT_EQ(document.at("definitions").size(), 2);

EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-04/schema"));
EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-04/hyper-schema"));
}
38 changes: 38 additions & 0 deletions test/jsonschema/jsonschema_bundle_draft6_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -499,3 +499,41 @@ TEST(JSONSchema_bundle_draft6, relative_base_uri_with_ref) {

EXPECT_EQ(document, expected);
}

TEST(JSONSchema_bundle_draft6, hyperschema_smoke) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-06/hyper-schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-06/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.is_object());
}

TEST(JSONSchema_bundle_draft6, hyperschema_1) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-06/schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-06/schema#" },
{ "$ref": "http://json-schema.org/draft-06/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.defines("definitions"));
EXPECT_TRUE(document.at("definitions").is_object());
EXPECT_EQ(document.at("definitions").size(), 2);

EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-06/schema"));
EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-06/hyper-schema"));
}
38 changes: 38 additions & 0 deletions test/jsonschema/jsonschema_bundle_draft7_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -499,3 +499,41 @@ TEST(JSONSchema_bundle_draft7, relative_base_uri_with_ref) {

EXPECT_EQ(document, expected);
}

TEST(JSONSchema_bundle_draft7, hyperschema_smoke) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-07/hyper-schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-07/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.is_object());
}

TEST(JSONSchema_bundle_draft7, hyperschema_1) {
sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "http://json-schema.org/draft-07/schema#",
"allOf": [
{ "$ref": "http://json-schema.org/draft-07/schema#" },
{ "$ref": "http://json-schema.org/draft-07/hyper-schema#" }
]
})JSON");

sourcemeta::jsontoolkit::bundle(
document, sourcemeta::jsontoolkit::default_schema_walker, test_resolver);

EXPECT_TRUE(document.defines("definitions"));
EXPECT_TRUE(document.at("definitions").is_object());
EXPECT_EQ(document.at("definitions").size(), 2);

EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-07/schema"));
EXPECT_TRUE(document.at("definitions")
.defines("http://json-schema.org/draft-07/hyper-schema"));
}
28 changes: 28 additions & 0 deletions test/jsonschema/jsonschema_frame_2020_12_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1732,3 +1732,31 @@ TEST(JSONSchema_frame_2020_12, idempotent_with_refs) {
"https://www.sourcemeta.com/schema#/$defs/string",
"https://www.sourcemeta.com/schema", "/$defs/string");
}

TEST(JSONSchema_frame_2020_12, allof_refs) {
const sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{ "$ref": "https://json-schema.org/draft/2020-12/schema" },
{ "$ref": "https://json-schema.org/draft/2020-12/meta/hyper-schema" }
]
})JSON");

sourcemeta::jsontoolkit::Frame frame;
frame.analyse(document, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver);

EXPECT_EQ(frame.references().size(), 3);

EXPECT_STATIC_REFERENCE(
frame, "/$schema", "https://json-schema.org/draft/2020-12/schema",
"https://json-schema.org/draft/2020-12/schema", std::nullopt);
EXPECT_STATIC_REFERENCE(
frame, "/allOf/0/$ref", "https://json-schema.org/draft/2020-12/schema",
"https://json-schema.org/draft/2020-12/schema", std::nullopt);
EXPECT_STATIC_REFERENCE(
frame, "/allOf/1/$ref",
"https://json-schema.org/draft/2020-12/meta/hyper-schema",
"https://json-schema.org/draft/2020-12/meta/hyper-schema", std::nullopt);
}

8 comments on commit 155f7df

@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: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 408.4482100158244 ns/iter 411.79655914683343 ns/iter 0.99
JSON_Parse_1 30333.23301393939 ns/iter 29773.384881782105 ns/iter 1.02
JSON_Fast_Hash_Helm_Chart_Lock 58.8110535827465 ns/iter 58.793479116985246 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 148.2249319402826 ns/iter 141.04137149545704 ns/iter 1.05
Regex_Lower_S_Or_Upper_S_Asterisk 2.198498162828946 ns/iter 2.185260185690387 ns/iter 1.01
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.196283540813753 ns/iter 2.183809137503474 ns/iter 1.01
Regex_Period_Asterisk 2.2064521310490393 ns/iter 2.1849037028794163 ns/iter 1.01
Regex_Group_Period_Asterisk_Group 2.231542070357592 ns/iter 2.182998025905136 ns/iter 1.02
Regex_Period_Plus 2.6107275633396094 ns/iter 2.4904911256288735 ns/iter 1.05
Regex_Period 2.4873920976325796 ns/iter 2.5015406408885403 ns/iter 0.99
Regex_Caret_Period_Plus_Dollar 2.7973911583959334 ns/iter 2.490430975466031 ns/iter 1.12
Regex_Caret_Group_Period_Plus_Group_Dollar 2.4900368246054336 ns/iter 2.491379014885423 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 2.798560861498247 ns/iter 2.4919708549170605 ns/iter 1.12
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.4075829974685825 ns/iter 2.182136960046927 ns/iter 1.10
Regex_Caret_X_Hyphen 13.05393968216463 ns/iter 12.632807772915976 ns/iter 1.03
Regex_Period_Md_Dollar 73.71567415583506 ns/iter 73.55266047175674 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 6.232593982640402 ns/iter 5.282843369847085 ns/iter 1.18
Regex_Caret_Period_Range_Dollar 4.044093905079614 ns/iter 2.801547513136593 ns/iter 1.44
Regex_Nested_Backtrack 505.8145589632831 ns/iter 503.72623662005947 ns/iter 1.00
Pointer_Object_Traverse 44.26957748365515 ns/iter 44.655462835750214 ns/iter 0.99
Pointer_Object_Try_Traverse 52.89318819359772 ns/iter 52.56762146059341 ns/iter 1.01
Pointer_Push_Back_Pointer_To_Weak_Pointer 352.3983709971994 ns/iter 352.06734228302963 ns/iter 1.00

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 (macos/llvm)

Benchmark suite Current: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 362.2148494940453 ns/iter 377.36759105936306 ns/iter 0.96
JSON_Parse_1 26314.21519930551 ns/iter 23355.16459815158 ns/iter 1.13
JSON_Fast_Hash_Helm_Chart_Lock 51.082345972693155 ns/iter 51.40338031724124 ns/iter 0.99
JSON_Equality_Helm_Chart_Lock 132.56141446773168 ns/iter 144.99777456858735 ns/iter 0.91
Regex_Lower_S_Or_Upper_S_Asterisk 1.6933727503900786 ns/iter 1.7085681224589777 ns/iter 0.99
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.6959133103976967 ns/iter 1.7089753310598566 ns/iter 0.99
Regex_Period_Asterisk 1.7340125969627047 ns/iter 2.127068787775394 ns/iter 0.82
Regex_Group_Period_Asterisk_Group 1.7715049882166007 ns/iter 1.779124576327936 ns/iter 1.00
Regex_Period_Plus 2.1206099350509544 ns/iter 2.2541513785785376 ns/iter 0.94
Regex_Period 1.9478946156568901 ns/iter 2.14886565846379 ns/iter 0.91
Regex_Caret_Period_Plus_Dollar 1.9009557687861836 ns/iter 2.02169548662943 ns/iter 0.94
Regex_Caret_Group_Period_Plus_Group_Dollar 2.1295953624860724 ns/iter 2.0563152945791376 ns/iter 1.04
Regex_Caret_Period_Asterisk_Dollar 1.6260143025991027 ns/iter 1.7320459923050406 ns/iter 0.94
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.9670289572249953 ns/iter 1.7618077516372965 ns/iter 1.12
Regex_Caret_X_Hyphen 6.564409369610985 ns/iter 7.005609672977873 ns/iter 0.94
Regex_Period_Md_Dollar 74.21061401541779 ns/iter 73.20043099253255 ns/iter 1.01
Regex_Caret_Slash_Period_Asterisk 6.250786527160263 ns/iter 5.7324555372269534 ns/iter 1.09
Regex_Caret_Period_Range_Dollar 2.213277152578898 ns/iter 2.240132881939963 ns/iter 0.99
Regex_Nested_Backtrack 769.011992871782 ns/iter 776.731504365721 ns/iter 0.99
Pointer_Object_Traverse 15.225129237009703 ns/iter 16.565994456988918 ns/iter 0.92
Pointer_Object_Try_Traverse 33.0785461614115 ns/iter 35.05817213188984 ns/iter 0.94
Pointer_Push_Back_Pointer_To_Weak_Pointer 186.9152230483841 ns/iter 215.45805620954178 ns/iter 0.87

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: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 424.7703342274879 ns/iter 417.2314870673658 ns/iter 1.02
JSON_Parse_1 80477.7008928527 ns/iter 97255.76536761683 ns/iter 0.83
JSON_Fast_Hash_Helm_Chart_Lock 55.052491071429756 ns/iter 58.947960000000414 ns/iter 0.93
JSON_Equality_Helm_Chart_Lock 218.13830722596174 ns/iter 216.43504614130092 ns/iter 1.01
Regex_Lower_S_Or_Upper_S_Asterisk 8.114278088774974 ns/iter 8.092671392442448 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 7.945601750242581 ns/iter 8.034435937499751 ns/iter 0.99
Regex_Period_Asterisk 8.0898267495994 ns/iter 7.903838804000683 ns/iter 1.02
Regex_Group_Period_Asterisk_Group 7.83857407214998 ns/iter 8.067917374697256 ns/iter 0.97
Regex_Period_Plus 8.213435267857403 ns/iter 8.375778980464977 ns/iter 0.98
Regex_Period 7.892959786192015 ns/iter 8.037340142690908 ns/iter 0.98
Regex_Caret_Period_Plus_Dollar 7.767992187500842 ns/iter 7.892258000479893 ns/iter 0.98
Regex_Caret_Group_Period_Plus_Group_Dollar 8.074195946098085 ns/iter 8.063392857143066 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 7.87800111607189 ns/iter 8.068423624694631 ns/iter 0.98
Regex_Caret_Group_Period_Asterisk_Group_Dollar 7.886585937500865 ns/iter 7.778499072417284 ns/iter 1.01
Regex_Caret_X_Hyphen 11.535653571428384 ns/iter 11.636026785713023 ns/iter 0.99
Regex_Period_Md_Dollar 141.11794459296047 ns/iter 141.7390651009447 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 11.694160714286893 ns/iter 11.781008928571573 ns/iter 0.99
Regex_Caret_Period_Range_Dollar 8.693103979048367 ns/iter 8.717446874999979 ns/iter 1.00
Regex_Nested_Backtrack 593.8864285714171 ns/iter 587.2363392856731 ns/iter 1.01
Pointer_Object_Traverse 56.073741071429595 ns/iter 55.951062499996084 ns/iter 1.00
Pointer_Object_Try_Traverse 76.04782366071713 ns/iter 75.96493750000377 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 204.6391136322095 ns/iter 187.01165955462739 ns/iter 1.09

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: 155f7df Previous: 74edf62 Ratio
Pointer_Object_Traverse 43.7035637265842 ns/iter 44.607226956664306 ns/iter 0.98
Pointer_Object_Try_Traverse 22.41587122421474 ns/iter 22.407520959005684 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 213.3812547934447 ns/iter 213.38891314915742 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 3.1432561072064553 ns/iter 3.15171849102477 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 3.186530036848169 ns/iter 3.184290436701411 ns/iter 1.00
Regex_Period_Asterisk 3.170743597734334 ns/iter 3.173268089776138 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 3.1638082123029636 ns/iter 3.180854284983809 ns/iter 0.99
Regex_Period_Plus 3.2204335621556717 ns/iter 3.2256668918239777 ns/iter 1.00
Regex_Period 3.16464088672965 ns/iter 3.182333821778798 ns/iter 0.99
Regex_Caret_Period_Plus_Dollar 3.368436487407463 ns/iter 3.2102564579964334 ns/iter 1.05
Regex_Caret_Group_Period_Plus_Group_Dollar 3.2027970015366254 ns/iter 3.2488232290733463 ns/iter 0.99
Regex_Caret_Period_Asterisk_Dollar 3.3346611847070338 ns/iter 3.729023152639788 ns/iter 0.89
Regex_Caret_Group_Period_Asterisk_Group_Dollar 3.2009860852522922 ns/iter 3.73062854068865 ns/iter 0.86
Regex_Caret_X_Hyphen 12.429884568680945 ns/iter 12.430397409403934 ns/iter 1.00
Regex_Period_Md_Dollar 89.98304883619838 ns/iter 89.91983971334406 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 6.216569595074001 ns/iter 7.14693758627552 ns/iter 0.87
Regex_Caret_Period_Range_Dollar 4.0392367100288595 ns/iter 4.040087495446088 ns/iter 1.00
Regex_Nested_Backtrack 821.6237323064072 ns/iter 831.1598958436795 ns/iter 0.99
JSON_Array_Of_Objects_Unique 380.75705821127053 ns/iter 379.9148649203714 ns/iter 1.00
JSON_Parse_1 32916.4773017192 ns/iter 32737.0110809825 ns/iter 1.01
JSON_Fast_Hash_Helm_Chart_Lock 62.79853360970092 ns/iter 63.080756695917785 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 144.86650784090227 ns/iter 143.90437202286466 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/llvm)

Benchmark suite Current: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 410.6107669705191 ns/iter 411.79655914683343 ns/iter 1.00
JSON_Parse_1 29878.167926541635 ns/iter 29773.384881782105 ns/iter 1.00
JSON_Fast_Hash_Helm_Chart_Lock 58.79583680030255 ns/iter 58.793479116985246 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 151.52744161750118 ns/iter 141.04137149545704 ns/iter 1.07
Regex_Lower_S_Or_Upper_S_Asterisk 2.190492032425787 ns/iter 2.185260185690387 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.2092055738305434 ns/iter 2.183809137503474 ns/iter 1.01
Regex_Period_Asterisk 2.2127699854762817 ns/iter 2.1849037028794163 ns/iter 1.01
Regex_Group_Period_Asterisk_Group 2.2076302277356548 ns/iter 2.182998025905136 ns/iter 1.01
Regex_Period_Plus 2.4890483411996547 ns/iter 2.4904911256288735 ns/iter 1.00
Regex_Period 2.488197064947636 ns/iter 2.5015406408885403 ns/iter 0.99
Regex_Caret_Period_Plus_Dollar 2.4883446018255824 ns/iter 2.490430975466031 ns/iter 1.00
Regex_Caret_Group_Period_Plus_Group_Dollar 2.493152788920434 ns/iter 2.491379014885423 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 2.2057118244624747 ns/iter 2.4919708549170605 ns/iter 0.89
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.1913722792882875 ns/iter 2.182136960046927 ns/iter 1.00
Regex_Caret_X_Hyphen 13.054273152879732 ns/iter 12.632807772915976 ns/iter 1.03
Regex_Period_Md_Dollar 73.59098722647255 ns/iter 73.55266047175674 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 5.283707287288484 ns/iter 5.282843369847085 ns/iter 1.00
Regex_Caret_Period_Range_Dollar 2.8012256845360746 ns/iter 2.801547513136593 ns/iter 1.00
Regex_Nested_Backtrack 501.35876523494085 ns/iter 503.72623662005947 ns/iter 1.00
Pointer_Object_Traverse 44.23871801408874 ns/iter 44.655462835750214 ns/iter 0.99
Pointer_Object_Try_Traverse 52.57706541502328 ns/iter 52.56762146059341 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 352.15654582667196 ns/iter 352.06734228302963 ns/iter 1.00

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 (macos/llvm)

Benchmark suite Current: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 438.7648872574732 ns/iter 377.36759105936306 ns/iter 1.16
JSON_Parse_1 30300.834613346786 ns/iter 23355.16459815158 ns/iter 1.30
JSON_Fast_Hash_Helm_Chart_Lock 60.17622264990683 ns/iter 51.40338031724124 ns/iter 1.17
JSON_Equality_Helm_Chart_Lock 153.7440433892587 ns/iter 144.99777456858735 ns/iter 1.06
Regex_Lower_S_Or_Upper_S_Asterisk 1.754561252629219 ns/iter 1.7085681224589777 ns/iter 1.03
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.8713435080240257 ns/iter 1.7089753310598566 ns/iter 1.10
Regex_Period_Asterisk 1.8706330708996508 ns/iter 2.127068787775394 ns/iter 0.88
Regex_Group_Period_Asterisk_Group 1.8563467798424678 ns/iter 1.779124576327936 ns/iter 1.04
Regex_Period_Plus 2.1315031492905994 ns/iter 2.2541513785785376 ns/iter 0.95
Regex_Period 2.0672044616234198 ns/iter 2.14886565846379 ns/iter 0.96
Regex_Caret_Period_Plus_Dollar 2.2356531443055685 ns/iter 2.02169548662943 ns/iter 1.11
Regex_Caret_Group_Period_Plus_Group_Dollar 2.087264342331276 ns/iter 2.0563152945791376 ns/iter 1.02
Regex_Caret_Period_Asterisk_Dollar 1.7483175774823319 ns/iter 1.7320459923050406 ns/iter 1.01
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.691964680404608 ns/iter 1.7618077516372965 ns/iter 0.96
Regex_Caret_X_Hyphen 6.848717894423532 ns/iter 7.005609672977873 ns/iter 0.98
Regex_Period_Md_Dollar 76.93057255273351 ns/iter 73.20043099253255 ns/iter 1.05
Regex_Caret_Slash_Period_Asterisk 6.396810390989768 ns/iter 5.7324555372269534 ns/iter 1.12
Regex_Caret_Period_Range_Dollar 2.4425745656052618 ns/iter 2.240132881939963 ns/iter 1.09
Regex_Nested_Backtrack 787.9621815299703 ns/iter 776.731504365721 ns/iter 1.01
Pointer_Object_Traverse 17.37168910210167 ns/iter 16.565994456988918 ns/iter 1.05
Pointer_Object_Try_Traverse 34.661259648652994 ns/iter 35.05817213188984 ns/iter 0.99
Pointer_Push_Back_Pointer_To_Weak_Pointer 185.39057827707578 ns/iter 215.45805620954178 ns/iter 0.86

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: 155f7df Previous: 74edf62 Ratio
JSON_Array_Of_Objects_Unique 416.6505651016725 ns/iter 417.2314870673658 ns/iter 1.00
JSON_Parse_1 79760.3459821415 ns/iter 97255.76536761683 ns/iter 0.82
JSON_Fast_Hash_Helm_Chart_Lock 57.978919642849284 ns/iter 58.947960000000414 ns/iter 0.98
JSON_Equality_Helm_Chart_Lock 216.98203124998372 ns/iter 216.43504614130092 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 8.182268267043575 ns/iter 8.092671392442448 ns/iter 1.01
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 7.994647321428263 ns/iter 8.034435937499751 ns/iter 1.00
Regex_Period_Asterisk 7.949388392857668 ns/iter 7.903838804000683 ns/iter 1.01
Regex_Group_Period_Asterisk_Group 7.780280322409403 ns/iter 8.067917374697256 ns/iter 0.96
Regex_Period_Plus 7.839551750716098 ns/iter 8.375778980464977 ns/iter 0.94
Regex_Period 8.440106026785799 ns/iter 8.037340142690908 ns/iter 1.05
Regex_Caret_Period_Plus_Dollar 7.856073179213472 ns/iter 7.892258000479893 ns/iter 1.00
Regex_Caret_Group_Period_Plus_Group_Dollar 8.349426339285973 ns/iter 8.063392857143066 ns/iter 1.04
Regex_Caret_Period_Asterisk_Dollar 7.8727321428573305 ns/iter 8.068423624694631 ns/iter 0.98
Regex_Caret_Group_Period_Asterisk_Group_Dollar 8.174395945650836 ns/iter 7.778499072417284 ns/iter 1.05
Regex_Caret_X_Hyphen 11.76867656249847 ns/iter 11.636026785713023 ns/iter 1.01
Regex_Period_Md_Dollar 146.0602901785941 ns/iter 141.7390651009447 ns/iter 1.03
Regex_Caret_Slash_Period_Asterisk 11.665448214285691 ns/iter 11.781008928571573 ns/iter 0.99
Regex_Caret_Period_Range_Dollar 8.704371389712986 ns/iter 8.717446874999979 ns/iter 1.00
Regex_Nested_Backtrack 592.1605357142669 ns/iter 587.2363392856731 ns/iter 1.01
Pointer_Object_Traverse 55.91855357142858 ns/iter 55.951062499996084 ns/iter 1.00
Pointer_Object_Try_Traverse 75.80818080356521 ns/iter 75.96493750000377 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 186.4048827147429 ns/iter 187.01165955462739 ns/iter 1.00

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: 155f7df Previous: 74edf62 Ratio
Pointer_Object_Traverse 43.738053035985324 ns/iter 44.607226956664306 ns/iter 0.98
Pointer_Object_Try_Traverse 22.48834739132522 ns/iter 22.407520959005684 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 213.35061745853005 ns/iter 213.38891314915742 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 3.2131086732225187 ns/iter 3.15171849102477 ns/iter 1.02
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 3.1773527762662526 ns/iter 3.184290436701411 ns/iter 1.00
Regex_Period_Asterisk 3.1775104774860568 ns/iter 3.173268089776138 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 3.170210107293322 ns/iter 3.180854284983809 ns/iter 1.00
Regex_Period_Plus 3.1867106555573907 ns/iter 3.2256668918239777 ns/iter 0.99
Regex_Period 3.1803596910073972 ns/iter 3.182333821778798 ns/iter 1.00
Regex_Caret_Period_Plus_Dollar 3.1904403600791413 ns/iter 3.2102564579964334 ns/iter 0.99
Regex_Caret_Group_Period_Plus_Group_Dollar 3.219052380137107 ns/iter 3.2488232290733463 ns/iter 0.99
Regex_Caret_Period_Asterisk_Dollar 3.1699268202727575 ns/iter 3.729023152639788 ns/iter 0.85
Regex_Caret_Group_Period_Asterisk_Group_Dollar 3.1860212142308724 ns/iter 3.73062854068865 ns/iter 0.85
Regex_Caret_X_Hyphen 12.434392921584545 ns/iter 12.430397409403934 ns/iter 1.00
Regex_Period_Md_Dollar 88.91785940735276 ns/iter 89.91983971334406 ns/iter 0.99
Regex_Caret_Slash_Period_Asterisk 7.162760176644998 ns/iter 7.14693758627552 ns/iter 1.00
Regex_Caret_Period_Range_Dollar 4.041945127022785 ns/iter 4.040087495446088 ns/iter 1.00
Regex_Nested_Backtrack 819.7563208869611 ns/iter 831.1598958436795 ns/iter 0.99
JSON_Array_Of_Objects_Unique 376.8489461838449 ns/iter 379.9148649203714 ns/iter 0.99
JSON_Parse_1 32836.71185726526 ns/iter 32737.0110809825 ns/iter 1.00
JSON_Fast_Hash_Helm_Chart_Lock 62.50531154289441 ns/iter 63.080756695917785 ns/iter 0.99
JSON_Equality_Helm_Chart_Lock 143.24765783857796 ns/iter 143.90437202286466 ns/iter 1.00

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

Please sign in to comment.