Skip to content

Commit

Permalink
Extend SchemaFrame::references_to to support dynamic references (#1563
Browse files Browse the repository at this point in the history
)

Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Feb 12, 2025
1 parent d7462b0 commit 3cb57b5
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 12 deletions.
33 changes: 25 additions & 8 deletions src/core/jsonschema/frame.cc
Original file line number Diff line number Diff line change
Expand Up @@ -937,19 +937,36 @@ auto SchemaFrame::instance_locations(const Location &location) const -> const
return match->second;
}

// TODO: This is currently very slow, as we need to loop on every reference
// to brute force whether it points to the desired entry or not
auto SchemaFrame::references_to(const Pointer &pointer) const -> std::vector<
std::reference_wrapper<const typename References::value_type>> {
std::vector<std::reference_wrapper<const typename References::value_type>>
result;

// TODO: This is currently very slow, as we need to loop on every reference
// to brute force whether it points to the desired entry or not
for (const auto &reference : this->references_) {
// TODO: Handle dynamic references by attempting to find all possible
// targets
const auto match{this->locations_.find(
{SchemaReferenceType::Static, reference.second.destination})};
if (match != this->locations_.cend() && match->second.pointer == pointer) {
result.emplace_back(reference);
assert(!reference.first.second.empty());
assert(reference.first.second.back().is_property());

if (reference.first.first == SchemaReferenceType::Static) {
const auto match{this->locations_.find(
{reference.first.first, reference.second.destination})};
if (match != this->locations_.cend() &&
match->second.pointer == pointer) {
result.emplace_back(reference);
}
} else {
for (const auto &location : this->locations_) {
if (location.second.type == LocationType::Anchor &&
location.first.first == SchemaReferenceType::Dynamic &&
location.second.pointer == pointer) {
if (!reference.second.fragment.has_value() ||
URI{location.first.second}.fragment().value_or("") ==
reference.second.fragment.value()) {
result.emplace_back(reference);
}
}
}
}
}

Expand Down
9 changes: 5 additions & 4 deletions test/jsonschema/jsonschema_frame_2019_09_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1589,8 +1589,7 @@ TEST(JSONSchema_frame_2019_09, recursive_ref_nested_recursive_anchor_true) {
EXPECT_FRAME_STATIC_2019_09_RESOURCE(
frame, "https://www.sourcemeta.com/schema",
"https://www.sourcemeta.com/schema", "",
"https://www.sourcemeta.com/schema", "", POINTER_TEMPLATES("", "/~I~"),
std::nullopt);
"https://www.sourcemeta.com/schema", "", {""}, std::nullopt);

EXPECT_FRAME_STATIC_2019_09_POINTER(
frame, "https://www.sourcemeta.com/schema#/$id",
Expand Down Expand Up @@ -1657,7 +1656,8 @@ TEST(JSONSchema_frame_2019_09, recursive_ref_multiple_recursive_anchor_true) {
EXPECT_FRAME_STATIC_2019_09_RESOURCE(
frame, "https://www.sourcemeta.com/schema",
"https://www.sourcemeta.com/schema", "",
"https://www.sourcemeta.com/schema", "", {""}, std::nullopt);
"https://www.sourcemeta.com/schema", "", POINTER_TEMPLATES("", "/~I~"),
std::nullopt);
EXPECT_FRAME_STATIC_2019_09_RESOURCE(
frame, "https://www.sourcemeta.com/nested",
"https://www.sourcemeta.com/schema", "/additionalItems",
Expand Down Expand Up @@ -1715,7 +1715,8 @@ TEST(JSONSchema_frame_2019_09, recursive_ref_multiple_recursive_anchor_true) {
EXPECT_FRAME_DYNAMIC_2019_09_ANCHOR(
frame, "https://www.sourcemeta.com/schema",
"https://www.sourcemeta.com/schema", "",
"https://www.sourcemeta.com/schema", "", {""}, std::nullopt);
"https://www.sourcemeta.com/schema", "", POINTER_TEMPLATES("", "/~I~"),
std::nullopt);
EXPECT_FRAME_DYNAMIC_2019_09_ANCHOR(
frame, "https://www.sourcemeta.com/nested",
"https://www.sourcemeta.com/schema", "/additionalItems",
Expand Down
116 changes: 116 additions & 0 deletions test/jsonschema/jsonschema_frame_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -795,3 +795,119 @@ TEST(JSONSchema_frame, mode_locations) {

EXPECT_EQ(frame.references().size(), 0);
}

TEST(JSONSchema_frame, references_to_1) {
const sourcemeta::core::JSON document = sourcemeta::core::parse_json(R"JSON({
"$id": "https://example.com",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"$id": "foo",
"$dynamicAnchor": "test"
},
"bar": {
"$id": "bar",
"$dynamicAnchor": "test"
},
"baz": {
"$id": "baz",
"$anchor": "test"
}
},
"$defs": {
"bookending": {
"$dynamicAnchor": "test"
},
"static": {
"$ref": "#test"
},
"dynamic": {
"$dynamicRef": "#test"
},
"dynamic-non-anchor": {
"$dynamicRef": "baz"
}
}
})JSON");

sourcemeta::core::SchemaFrame frame{
sourcemeta::core::SchemaFrame::Mode::References};
frame.analyse(document, sourcemeta::core::schema_official_walker,
sourcemeta::core::schema_official_resolver);

const auto foo{frame.references_to({"properties", "foo"})};
EXPECT_EQ(foo.size(), 1);
EXPECT_REFERENCE_TO(foo, 0, Dynamic, "/$defs/dynamic/$dynamicRef");

const auto bar{frame.references_to({"properties", "bar"})};
EXPECT_EQ(bar.size(), 1);
EXPECT_REFERENCE_TO(bar, 0, Dynamic, "/$defs/dynamic/$dynamicRef");

const auto baz{frame.references_to({"properties", "baz"})};
EXPECT_EQ(baz.size(), 1);
EXPECT_REFERENCE_TO(baz, 0, Static, "/$defs/dynamic-non-anchor/$dynamicRef");

const auto bookending{frame.references_to({"$defs", "bookending"})};
EXPECT_EQ(bookending.size(), 2);
EXPECT_REFERENCE_TO(bookending, 0, Static, "/$defs/static/$ref");
EXPECT_REFERENCE_TO(bookending, 1, Dynamic, "/$defs/dynamic/$dynamicRef");
}

TEST(JSONSchema_frame, references_to_2) {
const sourcemeta::core::JSON document = sourcemeta::core::parse_json(R"JSON({
"$id": "https://example.com",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"properties": {
"foo": {
"$id": "foo",
"$recursiveAnchor": true
},
"bar": {
"$id": "bar",
"$recursiveAnchor": true
},
"baz": {
"$id": "baz",
"$anchor": "test"
},
"qux": {
"$id": "qux",
"$recursiveAnchor": false
}
},
"$defs": {
"bookending": {
"$recursiveAnchor": true
},
"static": {
"$ref": "#test"
},
"dynamic": {
"$recursiveRef": "#"
}
}
})JSON");

sourcemeta::core::SchemaFrame frame{
sourcemeta::core::SchemaFrame::Mode::References};
frame.analyse(document, sourcemeta::core::schema_official_walker,
sourcemeta::core::schema_official_resolver);

const auto foo{frame.references_to({"properties", "foo"})};
EXPECT_EQ(foo.size(), 1);
EXPECT_REFERENCE_TO(foo, 0, Dynamic, "/$defs/dynamic/$recursiveRef");

const auto bar{frame.references_to({"properties", "bar"})};
EXPECT_EQ(bar.size(), 1);
EXPECT_REFERENCE_TO(bar, 0, Dynamic, "/$defs/dynamic/$recursiveRef");

const auto baz{frame.references_to({"properties", "baz"})};
EXPECT_EQ(baz.size(), 0);

const auto qux{frame.references_to({"properties", "qux"})};
EXPECT_EQ(qux.size(), 0);

const auto bookending{frame.references_to({"$defs", "bookending"})};
EXPECT_EQ(bookending.size(), 1);
EXPECT_REFERENCE_TO(bookending, 0, Dynamic, "/$defs/dynamic/$recursiveRef");
}
7 changes: 7 additions & 0 deletions test/jsonschema/jsonschema_test_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -521,4 +521,11 @@
expected_instance_location, expected_relative_instance_location); \
EXPECT_TRUE(entries.at(index).orphan);

#define EXPECT_REFERENCE_TO(result, index, type, origin) \
EXPECT_EQ((result).at((index)).get().first.first, \
sourcemeta::core::SchemaReferenceType::type); \
EXPECT_EQ( \
sourcemeta::core::to_string((result).at((index)).get().first.second), \
(origin));

#endif

5 comments on commit 3cb57b5

@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: 3cb57b5 Previous: d7462b0 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.187971504792112 ns/iter 2.2152558701035123 ns/iter 0.99
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.18465849390817 ns/iter 2.2225711284928455 ns/iter 0.98
Regex_Period_Asterisk 2.1860228271261413 ns/iter 2.2100802513402176 ns/iter 0.99
Regex_Group_Period_Asterisk_Group 2.1822111865727813 ns/iter 2.220383843665145 ns/iter 0.98
Regex_Period_Plus 2.4857367176668665 ns/iter 2.389077885999126 ns/iter 1.04
Regex_Period 2.4865374752144658 ns/iter 2.2204141424624355 ns/iter 1.12
Regex_Caret_Period_Plus_Dollar 2.485749551331424 ns/iter 2.207493557636528 ns/iter 1.13
Regex_Caret_Group_Period_Plus_Group_Dollar 2.4858175987271416 ns/iter 2.2154366204693434 ns/iter 1.12
Regex_Caret_Period_Asterisk_Dollar 2.1899915602085818 ns/iter 2.4891986277576206 ns/iter 0.88
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.1832911564104527 ns/iter 2.4886323205928895 ns/iter 0.88
Regex_Caret_X_Hyphen 12.625931327271623 ns/iter 13.064838648293337 ns/iter 0.97
Regex_Period_Md_Dollar 75.46704387108726 ns/iter 76.65367926293294 ns/iter 0.98
Regex_Caret_Slash_Period_Asterisk 5.91017975794524 ns/iter 7.15444163154767 ns/iter 0.83
Regex_Caret_Period_Range_Dollar 2.835749843080797 ns/iter 4.044547593646728 ns/iter 0.70
Regex_Nested_Backtrack 454.23252391752186 ns/iter 456.1746692036361 ns/iter 1.00
JSON_Array_Of_Objects_Unique 406.03879904664507 ns/iter 393.5006023185591 ns/iter 1.03
JSON_Parse_1 30308.730230338377 ns/iter 30567.756735915584 ns/iter 0.99
JSON_Fast_Hash_Helm_Chart_Lock 59.69554219251507 ns/iter 59.526495043070526 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 161.0595081772458 ns/iter 154.57382581522762 ns/iter 1.04
JSON_String_Equal/10 7.4687538125556285 ns/iter 7.470701922173477 ns/iter 1.00
JSON_String_Equal/100 7.100356948720657 ns/iter 8.129750287281963 ns/iter 0.87
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9352317816813283 ns/iter 0.9348447448385483 ns/iter 1.00
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 10.261991284661717 ns/iter 10.26003974326856 ns/iter 1.00
JSON_String_Fast_Hash/10 2.175190303884711 ns/iter 2.1758932332172196 ns/iter 1.00
JSON_String_Fast_Hash/100 2.1786371621692524 ns/iter 2.177277664228982 ns/iter 1.00
JSON_String_Key_Hash/10 1.8673320634799766 ns/iter 1.876522951959082 ns/iter 1.00
JSON_String_Key_Hash/100 2.177621101115697 ns/iter 2.271470773326283 ns/iter 0.96
JSON_Object_Defines_Miss_Same_Length 3.751163015015236 ns/iter 3.740077762050494 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.7356843372123025 ns/iter 3.7312747724549213 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.828260611780748 ns/iter 3.7454273854550637 ns/iter 1.02
Pointer_Object_Traverse 45.63630343856881 ns/iter 44.21608419671982 ns/iter 1.03
Pointer_Object_Try_Traverse 52.294180864861666 ns/iter 52.286120098160445 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 336.83554918607115 ns/iter 285.03935617561217 ns/iter 1.18
Schema_Frame_OMC_Instances 218142869.66665956 ns/iter 216064299.666679 ns/iter 1.01
Schema_Frame_OMC_References 141938885.39999762 ns/iter 141350373.39999598 ns/iter 1.00
Schema_Bundle_Meta_2020_12 6795890.823525497 ns/iter 6809535.475726371 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: 3cb57b5 Previous: d7462b0 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 1.7137003365687908 ns/iter 1.696604474696498 ns/iter 1.01
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.6950974602420248 ns/iter 1.703810963513433 ns/iter 0.99
Regex_Period_Asterisk 2.089712781442645 ns/iter 1.7887529593632676 ns/iter 1.17
Regex_Group_Period_Asterisk_Group 1.920566333349111 ns/iter 2.1553606263875786 ns/iter 0.89
Regex_Period_Plus 2.3801615125399063 ns/iter 2.0605517130773072 ns/iter 1.16
Regex_Period 2.1096025284977227 ns/iter 2.0373039478918793 ns/iter 1.04
Regex_Caret_Period_Plus_Dollar 2.178766742057361 ns/iter 2.0380709975071087 ns/iter 1.07
Regex_Caret_Group_Period_Plus_Group_Dollar 2.1595613807798313 ns/iter 2.0234730302988817 ns/iter 1.07
Regex_Caret_Period_Asterisk_Dollar 1.7122570201933038 ns/iter 1.7141124551906983 ns/iter 1.00
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.7514945685349894 ns/iter 1.9138730592804936 ns/iter 0.92
Regex_Caret_X_Hyphen 6.937976483884532 ns/iter 8.040795004682305 ns/iter 0.86
Regex_Period_Md_Dollar 72.65229236370597 ns/iter 72.56491896574693 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 6.958468566276517 ns/iter 5.371752433208181 ns/iter 1.30
Regex_Caret_Period_Range_Dollar 2.2324496390118087 ns/iter 2.363400862839644 ns/iter 0.94
Regex_Nested_Backtrack 793.3203328668662 ns/iter 785.9671926068885 ns/iter 1.01
JSON_Array_Of_Objects_Unique 353.9759713696454 ns/iter 349.103007463289 ns/iter 1.01
JSON_Parse_1 25315.723822404405 ns/iter 22902.11677735832 ns/iter 1.11
JSON_Fast_Hash_Helm_Chart_Lock 51.80945402150343 ns/iter 51.718127729973055 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 132.67770752864945 ns/iter 125.81756101926591 ns/iter 1.05
JSON_String_Equal/10 8.314247145660278 ns/iter 8.061195452462718 ns/iter 1.03
JSON_String_Equal/100 6.408686624092193 ns/iter 6.4806190778180115 ns/iter 0.99
JSON_String_Equal_Small_By_Perfect_Hash/10 0.3336086761492006 ns/iter 0.33635136281480515 ns/iter 0.99
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.1224772098858016 ns/iter 3.5310915670242884 ns/iter 0.88
JSON_String_Fast_Hash/10 1.6839368315547503 ns/iter 1.9119243489411926 ns/iter 0.88
JSON_String_Fast_Hash/100 2.0485056073077317 ns/iter 2.022228197241664 ns/iter 1.01
JSON_String_Key_Hash/10 1.3798899485444187 ns/iter 1.3464400639527845 ns/iter 1.02
JSON_String_Key_Hash/100 1.3714379321304522 ns/iter 1.3617187098244419 ns/iter 1.01
JSON_Object_Defines_Miss_Same_Length 2.4015683216493433 ns/iter 2.3511327805116795 ns/iter 1.02
JSON_Object_Defines_Miss_Too_Small 2.478218075702739 ns/iter 2.3504453628811635 ns/iter 1.05
JSON_Object_Defines_Miss_Too_Large 2.4122187238703576 ns/iter 2.367282285603057 ns/iter 1.02
Pointer_Object_Traverse 16.88581977227211 ns/iter 16.52808700689239 ns/iter 1.02
Pointer_Object_Try_Traverse 23.597735408024764 ns/iter 23.824790684263935 ns/iter 0.99
Pointer_Push_Back_Pointer_To_Weak_Pointer 181.9308411156831 ns/iter 183.97307448393246 ns/iter 0.99
Schema_Frame_OMC_Instances 181306395.99999654 ns/iter 181177375.0000043 ns/iter 1.00
Schema_Frame_OMC_References 113091433.19999747 ns/iter 116916347.16665553 ns/iter 0.97
Schema_Bundle_Meta_2020_12 4944777.143839629 ns/iter 5696601.098360379 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: 3cb57b5 Previous: d7462b0 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 6.601735491071586 ns/iter 6.847448660714914 ns/iter 0.96
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 6.6736104910728296 ns/iter 6.516661830356136 ns/iter 1.02
Regex_Period_Asterisk 6.5416919642860965 ns/iter 6.638825892856407 ns/iter 0.99
Regex_Group_Period_Asterisk_Group 6.680691964286366 ns/iter 6.672385044641516 ns/iter 1.00
Regex_Period_Plus 7.188319196428848 ns/iter 7.008699075853404 ns/iter 1.03
Regex_Period 7.188179687498725 ns/iter 6.846880580358825 ns/iter 1.05
Regex_Caret_Period_Plus_Dollar 6.998306919643633 ns/iter 7.339658482144225 ns/iter 0.95
Regex_Caret_Group_Period_Plus_Group_Dollar 7.214943080356814 ns/iter 7.060666294643271 ns/iter 1.02
Regex_Caret_Period_Asterisk_Dollar 6.614631696427255 ns/iter 6.812678571428421 ns/iter 0.97
Regex_Caret_Group_Period_Asterisk_Group_Dollar 6.717406250000834 ns/iter 6.903700892857095 ns/iter 0.97
Regex_Caret_X_Hyphen 14.371505292984363 ns/iter 11.826560937500119 ns/iter 1.22
Regex_Period_Md_Dollar 155.48832589280843 ns/iter 155.43354910713603 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 9.982594642853622 ns/iter 10.124001562498819 ns/iter 0.99
Regex_Caret_Period_Range_Dollar 7.239632812500016 ns/iter 7.345293717208897 ns/iter 0.99
Regex_Nested_Backtrack 586.8394642856092 ns/iter 582.952946428504 ns/iter 1.01
JSON_Array_Of_Objects_Unique 445.1590740203781 ns/iter 415.53772698488956 ns/iter 1.07
JSON_Parse_1 99375.38502743685 ns/iter 79025.81473214606 ns/iter 1.26
JSON_Fast_Hash_Helm_Chart_Lock 60.8392800000047 ns/iter 62.77375000000822 ns/iter 0.97
JSON_Equality_Helm_Chart_Lock 188.67401166634752 ns/iter 189.9120973135836 ns/iter 0.99
JSON_String_Equal/10 9.441516922136545 ns/iter 9.29478210136291 ns/iter 1.02
JSON_String_Equal/100 10.240145043571266 ns/iter 9.95112183057653 ns/iter 1.03
JSON_String_Equal_Small_By_Perfect_Hash/10 2.1820921850646453 ns/iter 2.1682571874997336 ns/iter 1.01
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 14.45460261403954 ns/iter 14.60240401785638 ns/iter 0.99
JSON_String_Fast_Hash/10 3.1863867237283743 ns/iter 3.0987825892856744 ns/iter 1.03
JSON_String_Fast_Hash/100 3.166902661197989 ns/iter 3.0986687499999936 ns/iter 1.02
JSON_String_Key_Hash/10 7.662356026786808 ns/iter 7.4575569196408 ns/iter 1.03
JSON_String_Key_Hash/100 3.713712962947541 ns/iter 3.7197187433579075 ns/iter 1.00
JSON_Object_Defines_Miss_Same_Length 4.020733444679435 ns/iter 4.0250925071878925 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.4116735653356254 ns/iter 3.4072131635579157 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.74100749332053 ns/iter 3.7056744576681044 ns/iter 1.01
Pointer_Object_Traverse 52.16636999998627 ns/iter 52.50349107143393 ns/iter 0.99
Pointer_Object_Try_Traverse 64.73561607143503 ns/iter 64.58542857142139 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 158.736941964323 ns/iter 180.47425718515296 ns/iter 0.88
Schema_Frame_OMC_Instances 487845950.0000645 ns/iter 482586900.00000113 ns/iter 1.01
Schema_Frame_OMC_References 350919299.9999868 ns/iter 350880749.99998754 ns/iter 1.00
Schema_Bundle_Meta_2020_12 16521428.888876876 ns/iter 16207629.268298503 ns/iter 1.02

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: 3cb57b5 Previous: d7462b0 Ratio
Schema_Frame_OMC_Instances 219508570.00001633 ns/iter 215360644.9999946 ns/iter 1.02
Schema_Frame_OMC_References 143256470.00000572 ns/iter 141406177.79999048 ns/iter 1.01
Schema_Bundle_Meta_2020_12 6945609.504952591 ns/iter 6947907.574259613 ns/iter 1.00
Pointer_Object_Traverse 48.3344958637155 ns/iter 47.606154620613076 ns/iter 1.02
Pointer_Object_Try_Traverse 22.678778860062263 ns/iter 22.664995634057274 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 169.89576518089356 ns/iter 170.26525001531328 ns/iter 1.00
JSON_Array_Of_Objects_Unique 378.43572560868165 ns/iter 380.5052398528238 ns/iter 0.99
JSON_Parse_1 33594.79452514226 ns/iter 33255.12406248366 ns/iter 1.01
JSON_Fast_Hash_Helm_Chart_Lock 63.111987850028385 ns/iter 61.15471802658631 ns/iter 1.03
JSON_Equality_Helm_Chart_Lock 155.3882518624976 ns/iter 147.0476816962147 ns/iter 1.06
JSON_String_Equal/10 5.988546205548817 ns/iter 5.718141265863693 ns/iter 1.05
JSON_String_Equal/100 6.610727463803629 ns/iter 6.338779045373991 ns/iter 1.04
JSON_String_Equal_Small_By_Perfect_Hash/10 0.934928986673093 ns/iter 0.9338912315797262 ns/iter 1.00
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 11.812183774070231 ns/iter 25.461921537334558 ns/iter 0.46
JSON_String_Fast_Hash/10 0.9333560022920905 ns/iter 0.9329693670199243 ns/iter 1.00
JSON_String_Fast_Hash/100 0.9325053559190847 ns/iter 0.9328975362428258 ns/iter 1.00
JSON_String_Key_Hash/10 1.2445376856800263 ns/iter 1.247294000493082 ns/iter 1.00
JSON_String_Key_Hash/100 0.9334453019576209 ns/iter 0.9348287291295491 ns/iter 1.00
JSON_Object_Defines_Miss_Same_Length 2.4880888190271073 ns/iter 2.488993716237215 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 2.4875380161819622 ns/iter 2.49453936857683 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 2.487173481404533 ns/iter 2.4912464411770627 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 3.109226513257359 ns/iter 3.107876566831174 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 3.1083189037258823 ns/iter 2.7988681392935484 ns/iter 1.11
Regex_Period_Asterisk 3.1088526175349505 ns/iter 2.8323632842196407 ns/iter 1.10
Regex_Group_Period_Asterisk_Group 3.1085138605013523 ns/iter 2.8036162200166768 ns/iter 1.11
Regex_Period_Plus 3.417718701134358 ns/iter 3.107752047833098 ns/iter 1.10
Regex_Period 3.4181489713591127 ns/iter 3.11331582130845 ns/iter 1.10
Regex_Caret_Period_Plus_Dollar 3.1090182957869352 ns/iter 3.1083111726720882 ns/iter 1.00
Regex_Caret_Group_Period_Plus_Group_Dollar 3.1084888934108825 ns/iter 3.1129715942758622 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 3.4223508238294427 ns/iter 4.0418682339916945 ns/iter 0.85
Regex_Caret_Group_Period_Asterisk_Group_Dollar 3.449800040757713 ns/iter 2.802302705374473 ns/iter 1.23
Regex_Caret_X_Hyphen 13.074148192284072 ns/iter 13.673846377177377 ns/iter 0.96
Regex_Period_Md_Dollar 89.68103456568214 ns/iter 94.54781598302102 ns/iter 0.95
Regex_Caret_Slash_Period_Asterisk 9.343383404757741 ns/iter 7.767299495968858 ns/iter 1.20
Regex_Caret_Period_Range_Dollar 3.529747433096597 ns/iter 3.4174289538970357 ns/iter 1.03
Regex_Nested_Backtrack 836.4595257135691 ns/iter 822.5812336133608 ns/iter 1.02

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/gcc)

Benchmark suite Current: 3cb57b5 Previous: d7462b0 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.165804910368419 ns/iter 2.0848273392373984 ns/iter 1.04
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.0174181989533055 ns/iter 2.1106078304757627 ns/iter 0.96
Regex_Period_Asterisk 2.0278345501376913 ns/iter 1.940458140972509 ns/iter 1.05
Regex_Group_Period_Asterisk_Group 2.045454670119806 ns/iter 1.9801542827940306 ns/iter 1.03
Regex_Period_Plus 1.7160498780371998 ns/iter 1.6380360920507469 ns/iter 1.05
Regex_Period 1.709262163069511 ns/iter 1.6696068812897948 ns/iter 1.02
Regex_Caret_Period_Plus_Dollar 1.711734428829416 ns/iter 1.6567603193478482 ns/iter 1.03
Regex_Caret_Group_Period_Plus_Group_Dollar 1.6956796569241581 ns/iter 1.6696381983058857 ns/iter 1.02
Regex_Caret_Period_Asterisk_Dollar 2.0298772822745845 ns/iter 1.9770922225461323 ns/iter 1.03
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.187839251257763 ns/iter 1.9031693404753276 ns/iter 1.15
Regex_Caret_X_Hyphen 7.1694987020099035 ns/iter 6.556890641905077 ns/iter 1.09
Regex_Period_Md_Dollar 88.68281333715727 ns/iter 70.99264804032389 ns/iter 1.25
Regex_Caret_Slash_Period_Asterisk 6.412689685821533 ns/iter 4.4694410959207 ns/iter 1.43
Regex_Caret_Period_Range_Dollar 2.055398766218483 ns/iter 1.9109337201561845 ns/iter 1.08
Regex_Nested_Backtrack 926.2993933422454 ns/iter 876.7768269006175 ns/iter 1.06
JSON_Array_Of_Objects_Unique 226.25097586387642 ns/iter 204.32379747518928 ns/iter 1.11
JSON_Parse_1 25295.84738964388 ns/iter 23151.291946306264 ns/iter 1.09
JSON_Fast_Hash_Helm_Chart_Lock 25.377855291239207 ns/iter 24.927695008649252 ns/iter 1.02
JSON_Equality_Helm_Chart_Lock 123.73640414815686 ns/iter 115.32901352856686 ns/iter 1.07
JSON_String_Equal/10 5.825241727700581 ns/iter 5.523510701958894 ns/iter 1.05
JSON_String_Equal/100 5.478718635201637 ns/iter 5.090981785496996 ns/iter 1.08
JSON_String_Equal_Small_By_Perfect_Hash/10 0.8115778037811187 ns/iter 0.750533093371511 ns/iter 1.08
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.7497400981241116 ns/iter 3.5029671085375793 ns/iter 1.07
JSON_String_Fast_Hash/10 2.064800149623718 ns/iter 1.9220475884208303 ns/iter 1.07
JSON_String_Fast_Hash/100 2.2098344612637444 ns/iter 1.9270940272825559 ns/iter 1.15
JSON_String_Key_Hash/10 1.5600973193998493 ns/iter 1.4429517101361464 ns/iter 1.08
JSON_String_Key_Hash/100 2.085254677451283 ns/iter 1.9401800519765706 ns/iter 1.07
JSON_Object_Defines_Miss_Same_Length 1.9252895390126707 ns/iter 1.7327970045968493 ns/iter 1.11
JSON_Object_Defines_Miss_Too_Small 2.02973153909992 ns/iter 1.8976589903081273 ns/iter 1.07
JSON_Object_Defines_Miss_Too_Large 1.8825536359378001 ns/iter 1.7440971600483728 ns/iter 1.08
Pointer_Object_Traverse 56.38416728441766 ns/iter 54.025260746597596 ns/iter 1.04
Pointer_Object_Try_Traverse 39.60049604768033 ns/iter 37.42092916912557 ns/iter 1.06
Pointer_Push_Back_Pointer_To_Weak_Pointer 172.34776873341403 ns/iter 156.87358201261486 ns/iter 1.10
Schema_Frame_OMC_Instances 183514058.5899353 ns/iter 164029240.60821533 ns/iter 1.12
Schema_Frame_OMC_References 111875136.69331868 ns/iter 100869757.7885219 ns/iter 1.11
Schema_Bundle_Meta_2020_12 5211871.369440753 ns/iter 4750666.484026842 ns/iter 1.10

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

Please sign in to comment.