Skip to content

Implement an e-mail checking module#2381

Merged
jviotti merged 4 commits into
mainfrom
email
May 14, 2026
Merged

Implement an e-mail checking module#2381
jviotti merged 4 commits into
mainfrom
email

Conversation

@jviotti
Copy link
Copy Markdown
Member

@jviotti jviotti commented May 14, 2026

Signed-off-by: Juan Cruz Viotti jv@jviotti.com

jviotti added 2 commits May 14, 2026 15:25
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
@augmentcode
Copy link
Copy Markdown

augmentcode Bot commented May 14, 2026

🤖 Augment PR Summary

Summary: Adds a new Core email component to validate SMTP mailbox strings per RFC 5321.

Changes:

  • Introduces SOURCEMETA_CORE_EMAIL CMake option and wires the new library/test subdirectories into the build.
  • Adds a new sourcemeta::core::is_email(std::string_view) API with an implementation in src/core/email/email.cc.
  • Implements RFC 5321 local-part parsing for Dot-string and Quoted-string forms, including the 64-octet local-part cap.
  • Validates domains using existing is_hostname (DNS) rules and supports address-literals using existing is_ipv4/is_ipv6 plus General-address-literal parsing.
  • Extends package config (config.cmake.in) so the email component can be found/loaded like other Core components.
  • Disables the new component in website build/deploy workflows via -DSOURCEMETA_CORE_EMAIL:BOOL=OFF.
  • Adds an extensive GoogleTest suite covering valid/invalid cases across local-part forms, domain rules, address-literals, and boundary lengths.

Technical Notes: The email validator builds on existing Core DNS/IP validators to keep domain/address-literal semantics consistent across modules.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode Bot left a comment

Choose a reason for hiding this comment

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

Review completed. 1 suggestion posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Comment thread test/email/email_test.cc Outdated

// RFC 5321 §4.1.2: qtextSMTP excludes NUL
TEST(Email, invalid_quoted_qtext_nul) {
EXPECT_FALSE(sourcemeta::core::is_email(std::string_view{"\"\x00\"@b", 6}));
Copy link
Copy Markdown

@augmentcode augmentcode Bot May 14, 2026

Choose a reason for hiding this comment

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

test/email/email_test.cc:542: The std::string_view{"\"\x00\"@b", 6} length appears to include the string literal’s terminator NUL, so this test is exercising an extra trailing \0 beyond “NUL inside qtextSMTP”. This can make the test pass for the wrong reason and reduce coverage of the intended case.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

3 issues found across 9 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="src/core/email/email.cc">

<violation number="1" location="src/core/email/email.cc:167">
P2: Add a domain-part length check before parsing address-literals; overlong bracketed domains currently bypass the 255-octet limit.</violation>
</file>

<file name="test/email/email_test.cc">

<violation number="1" location="test/email/email_test.cc:330">
P2: The constructed domain is 257 bytes long, contradicting the test name and comment which specify a 256-byte domain.</violation>

<violation number="2" location="test/email/email_test.cc:542">
P2: Off-by-one in `std::string_view` length: the literal `"\"\x00\"@b"` contains 5 intended bytes (`"`, NUL, `"`, `@`, `b`), but length `6` includes the implicit C string terminator. This makes the view `"\0\"@b\0`, so the test may reject the input due to the trailing NUL in the domain rather than the embedded NUL in qtextSMTP. Change the length to `5`.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread src/core/email/email.cc
return false;
}

const auto domain{value.substr(position + 1)};
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Add a domain-part length check before parsing address-literals; overlong bracketed domains currently bypass the 255-octet limit.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/email/email.cc, line 167:

<comment>Add a domain-part length check before parsing address-literals; overlong bracketed domains currently bypass the 255-octet limit.</comment>

<file context>
@@ -0,0 +1,196 @@
+    return false;
+  }
+
+  const auto domain{value.substr(position + 1)};
+
+  // RFC 5321 §4.1.3: address-literal = "[" ( IPv4 / IPv6 / General ) "]"
</file context>

Comment thread test/email/email_test.cc
Comment thread test/email/email_test.cc Outdated
jviotti added 2 commits May 14, 2026 15:41
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Benchmark (linux/llvm)

Details
Benchmark suite Current: 24c5ae6 Previous: 5cf57e5 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.538022671505548 ns/iter 2.4955693992234584 ns/iter 1.02
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.1790226184144124 ns/iter 2.1990544538088637 ns/iter 0.99
Regex_Period_Asterisk 2.4911711257193425 ns/iter 2.492495484188677 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 2.1799659711663617 ns/iter 2.1919916423514447 ns/iter 0.99
Regex_Period_Plus 3.1171376352323015 ns/iter 3.117590952353833 ns/iter 1.00
Regex_Period 2.802458413901554 ns/iter 2.5000062212577943 ns/iter 1.12
Regex_Caret_Period_Plus_Dollar 3.1145888176296976 ns/iter 2.8031094556563616 ns/iter 1.11
Regex_Caret_Group_Period_Plus_Group_Dollar 2.8024131802543075 ns/iter 2.4928435395190416 ns/iter 1.12
Regex_Caret_Period_Asterisk_Dollar 3.7350839745801556 ns/iter 2.492446297177029 ns/iter 1.50
Regex_Caret_Group_Period_Asterisk_Group_Dollar 3.430940483408764 ns/iter 2.1962447183549996 ns/iter 1.56
Regex_Caret_X_Hyphen 7.168855681119404 ns/iter 6.233710455823183 ns/iter 1.15
Regex_Period_Md_Dollar 28.378958364594077 ns/iter 27.464428880525528 ns/iter 1.03
Regex_Caret_Slash_Period_Asterisk 6.556686428993433 ns/iter 6.557459215187661 ns/iter 1.00
Regex_Caret_Period_Range_Dollar 3.735909256652178 ns/iter 3.735273806924661 ns/iter 1.00
Regex_Nested_Backtrack 37.1844362333127 ns/iter 37.09397802673807 ns/iter 1.00
JSON_Array_Of_Objects_Unique 486.06536011298783 ns/iter 485.11119899141255 ns/iter 1.00
JSON_Parse_1 5777.234051265754 ns/iter 5822.296691194815 ns/iter 0.99
JSON_Parse_Real 10877.021044946878 ns/iter 11216.169695702394 ns/iter 0.97
JSON_Parse_Decimal 11066.288323800312 ns/iter 11043.926774218311 ns/iter 1.00
JSON_Parse_Schema_ISO_Language 3583659.7487180675 ns/iter 3755707.5351355094 ns/iter 0.95
JSON_Fast_Hash_Helm_Chart_Lock 66.16211548588105 ns/iter 66.08947614471401 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 161.3075356357401 ns/iter 156.75498259563958 ns/iter 1.03
JSON_Divisible_By_Decimal 248.3333455240465 ns/iter 252.02422707570713 ns/iter 0.99
JSON_String_Equal/10 5.926105039358895 ns/iter 5.922704116992902 ns/iter 1.00
JSON_String_Equal/100 6.549741169295916 ns/iter 6.549080846096947 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9354066776676767 ns/iter 0.9385858845403311 ns/iter 1.00
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 14.628761756955795 ns/iter 10.274184840292978 ns/iter 1.42
JSON_String_Fast_Hash/10 2.8024748414818164 ns/iter 2.8047815486627887 ns/iter 1.00
JSON_String_Fast_Hash/100 2.8027651282278008 ns/iter 2.8025115522096504 ns/iter 1.00
JSON_String_Key_Hash/10 2.5772861556089808 ns/iter 2.19362235357952 ns/iter 1.17
JSON_String_Key_Hash/100 9.041431633421602 ns/iter 6.539664787371787 ns/iter 1.38
JSON_Object_Defines_Miss_Same_Length 3.753941413660415 ns/iter 3.748883306602646 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.7398333522803906 ns/iter 3.74322025145057 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.740212767097617 ns/iter 3.746982684373874 ns/iter 1.00
Pointer_Object_Traverse 25.650670508024426 ns/iter 23.92563675728804 ns/iter 1.07
Pointer_Object_Try_Traverse 27.914857760226074 ns/iter 28.310880566622405 ns/iter 0.99
Pointer_Push_Back_Pointer_To_Weak_Pointer 191.30704828357693 ns/iter 178.0342904538131 ns/iter 1.07
Pointer_Walker_Schema_ISO_Language 3004972.952586298 ns/iter 3032697.261802795 ns/iter 0.99
Pointer_Maybe_Tracked_Deeply_Nested/0 1451708.7318087502 ns/iter 1447088.7334709915 ns/iter 1.00
Pointer_Maybe_Tracked_Deeply_Nested/1 1928037.7146816158 ns/iter 2132208.4314867076 ns/iter 0.90
Pointer_Position_Tracker_Get_Deeply_Nested 615.5952156860761 ns/iter 579.7444751065259 ns/iter 1.06
Schema_Frame_WoT_References 5246413.052631416 ns/iter 5206970.946969395 ns/iter 1.01
Schema_Frame_OMC_References 21197277.606061656 ns/iter 21364015.7575748 ns/iter 0.99
Schema_Frame_OMC_Locations 19510216.249999404 ns/iter 19743117.861111157 ns/iter 0.99
Schema_Frame_ISO_Language_Locations 97841826.00001638 ns/iter 103778465.8333294 ns/iter 0.94
Schema_Frame_KrakenD_References 38411778.83333557 ns/iter 39511108.722226456 ns/iter 0.97
Schema_Frame_KrakenD_Reachable 559543417.9999757 ns/iter 564727346.0000407 ns/iter 0.99
Schema_Iterator_ISO_Language 3006138.7777777785 ns/iter 3065470.199134053 ns/iter 0.98
Schema_Frame_ISO_Language_Locations_To_JSON 108899339.39999993 ns/iter 108516790.80001304 ns/iter 1.00
Schema_Tracker_ISO_Language 4724244.141891939 ns/iter 5034276.328571455 ns/iter 0.94
Schema_Tracker_ISO_Language_To_JSON 19275449.861109134 ns/iter 19273174.194444843 ns/iter 1.00
Schema_Format_ISO_Language_To_JSON 103591150.5714304 ns/iter 108940143.14286388 ns/iter 0.95
Schema_Bundle_Meta_2020_12 1683693.918659735 ns/iter 1697156.9004886742 ns/iter 0.99
Schema_Frame_Many_Resources_References 368134704.49999386 ns/iter 375402453.9999818 ns/iter 0.98
EditorSchema_ForEditor_EmbeddedResources 13839204.686280703 ns/iter 13990397.439999923 ns/iter 0.99
URITemplateRouter_Create 32168.129249211244 ns/iter 31658.773055731275 ns/iter 1.02
URITemplateRouter_Match 174.58579061638855 ns/iter 172.2304492804822 ns/iter 1.01
URITemplateRouter_Match_BasePath 202.65984801290188 ns/iter 199.26933937215958 ns/iter 1.02
URITemplateRouterView_Restore 7663.28734481588 ns/iter 7910.396195938709 ns/iter 0.97
URITemplateRouterView_Match 143.72836710609795 ns/iter 145.30893790143872 ns/iter 0.99
URITemplateRouterView_Match_BasePath 163.22253856651486 ns/iter 164.97211677866875 ns/iter 0.99
URITemplateRouterView_Arguments 457.59035504292916 ns/iter 476.5447999057836 ns/iter 0.96
JSONL_Parse_Large 10347808.911764307 ns/iter 10795688.369230798 ns/iter 0.96
JSONL_Parse_Large_GZIP 11636262.466667328 ns/iter 11993009.70689631 ns/iter 0.97
HTML_Build_Table_100000 62653721.99999836 ns/iter 73651238.69999479 ns/iter 0.85
HTML_Render_Table_100000 5301017.900763306 ns/iter 5394900.100775201 ns/iter 0.98

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

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Benchmark (macos/llvm)

Details
Benchmark suite Current: 24c5ae6 Previous: 5cf57e5 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.065143472101664 ns/iter 2.1085039195535242 ns/iter 0.98
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.9795825002775485 ns/iter 2.2161931045353724 ns/iter 0.89
Regex_Period_Asterisk 1.7450460291507297 ns/iter 2.1620661868362308 ns/iter 0.81
Regex_Group_Period_Asterisk_Group 2.0937435525970782 ns/iter 2.096785615994997 ns/iter 1.00
Regex_Period_Plus 2.9960077954444406 ns/iter 2.798216653213111 ns/iter 1.07
Regex_Period 2.5076420011352587 ns/iter 2.8688657285086325 ns/iter 0.87
Regex_Caret_Period_Plus_Dollar 2.610710052243179 ns/iter 2.91489174703508 ns/iter 0.90
Regex_Caret_Group_Period_Plus_Group_Dollar 2.3811205227757157 ns/iter 2.9484889877657445 ns/iter 0.81
Regex_Caret_Period_Asterisk_Dollar 2.416651396671646 ns/iter 2.451100779685849 ns/iter 0.99
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.813090013713215 ns/iter 2.2915874945450696 ns/iter 0.79
Regex_Caret_X_Hyphen 6.359525338002579 ns/iter 8.092381295584016 ns/iter 0.79
Regex_Period_Md_Dollar 18.442471334202395 ns/iter 24.71063563191479 ns/iter 0.75
Regex_Caret_Slash_Period_Asterisk 8.793716917556262 ns/iter 8.934400460553048 ns/iter 0.98
Regex_Caret_Period_Range_Dollar 1.751198190906924 ns/iter 2.3017252687337963 ns/iter 0.76
Regex_Nested_Backtrack 27.0654713429178 ns/iter 35.52599822440973 ns/iter 0.76
JSON_Array_Of_Objects_Unique 402.96785635118755 ns/iter 514.5946249999724 ns/iter 0.78
JSON_Parse_1 5326.644686979066 ns/iter 5259.340000000066 ns/iter 1.01
JSON_Parse_Real 7667.234666698478 ns/iter 9431.796266416452 ns/iter 0.81
JSON_Parse_Decimal 10781.591240459064 ns/iter 11907.657238402435 ns/iter 0.91
JSON_Parse_Schema_ISO_Language 6106073.165352699 ns/iter 5936516.181819112 ns/iter 1.03
JSON_Fast_Hash_Helm_Chart_Lock 78.75568899278294 ns/iter 81.36909089245897 ns/iter 0.97
JSON_Equality_Helm_Chart_Lock 183.10453128545018 ns/iter 196.33926332700293 ns/iter 0.93
JSON_Divisible_By_Decimal 244.50498341588278 ns/iter 261.0413832244961 ns/iter 0.94
JSON_String_Equal/10 8.670837735985554 ns/iter 11.014722228415259 ns/iter 0.79
JSON_String_Equal/100 8.170900160711922 ns/iter 8.767641730433038 ns/iter 0.93
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9717431399602332 ns/iter 1.0247654231756045 ns/iter 0.95
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.931266011120147 ns/iter 5.143841392602923 ns/iter 0.76
JSON_String_Fast_Hash/10 2.683097375355286 ns/iter 2.9990298700055646 ns/iter 0.89
JSON_String_Fast_Hash/100 2.490311172591988 ns/iter 2.639693386560681 ns/iter 0.94
JSON_String_Key_Hash/10 1.7964918006383794 ns/iter 2.2351865591379556 ns/iter 0.80
JSON_String_Key_Hash/100 2.6438593538400044 ns/iter 2.9986322414016233 ns/iter 0.88
JSON_Object_Defines_Miss_Same_Length 2.8759390687371753 ns/iter 3.3813727086277354 ns/iter 0.85
JSON_Object_Defines_Miss_Too_Small 2.4839804449223957 ns/iter 3.4089807837470496 ns/iter 0.73
JSON_Object_Defines_Miss_Too_Large 2.5402352646910584 ns/iter 3.287337061126163 ns/iter 0.77
Pointer_Object_Traverse 14.80644638814433 ns/iter 20.039574159902756 ns/iter 0.74
Pointer_Object_Try_Traverse 20.61307677924722 ns/iter 26.348532802483998 ns/iter 0.78
Pointer_Push_Back_Pointer_To_Weak_Pointer 199.197736375359 ns/iter 213.75699103813935 ns/iter 0.93
Pointer_Walker_Schema_ISO_Language 4423868.630572971 ns/iter 6049972.218751994 ns/iter 0.73
Pointer_Maybe_Tracked_Deeply_Nested/0 1066470.229607066 ns/iter 1669614.0776700517 ns/iter 0.64
Pointer_Maybe_Tracked_Deeply_Nested/1 1560510.669081771 ns/iter 2025841.9551721779 ns/iter 0.77
Pointer_Position_Tracker_Get_Deeply_Nested 435.90237554432457 ns/iter 527.4012080001285 ns/iter 0.83
Schema_Frame_WoT_References 5885679.169998638 ns/iter 7858385.906542382 ns/iter 0.75
Schema_Frame_OMC_References 30193482.62499951 ns/iter 37977977.94116859 ns/iter 0.80
Schema_Frame_OMC_Locations 30750701.923072763 ns/iter 39555539.473691456 ns/iter 0.78
Schema_Frame_ISO_Language_Locations 86869229.16664723 ns/iter 118181958.33332841 ns/iter 0.74
Schema_Frame_KrakenD_References 55909768.90909422 ns/iter 70625416.75000489 ns/iter 0.79
Schema_Frame_KrakenD_Reachable 496105771.4999697 ns/iter 841989749.9998114 ns/iter 0.59
Schema_Iterator_ISO_Language 3040889.945148454 ns/iter 3931438.5474861097 ns/iter 0.77
Schema_Frame_ISO_Language_Locations_To_JSON 99936422.57144788 ns/iter 130144739.74999419 ns/iter 0.77
Schema_Tracker_ISO_Language 7869233.07291687 ns/iter 9321961.206895182 ns/iter 0.84
Schema_Tracker_ISO_Language_To_JSON 16951236.413042944 ns/iter 18595435.483876504 ns/iter 0.91
Schema_Format_ISO_Language_To_JSON 93855135.50000724 ns/iter 108140208.1666738 ns/iter 0.87
Schema_Bundle_Meta_2020_12 1662191.5613630873 ns/iter 2017953.9404730962 ns/iter 0.82
Schema_Frame_Many_Resources_References 374348187.5000043 ns/iter 441040874.99999875 ns/iter 0.85
EditorSchema_ForEditor_EmbeddedResources 13313431.959195256 ns/iter 15253743.630434813 ns/iter 0.87
URITemplateRouter_Create 26092.782555285485 ns/iter 34733.30422398941 ns/iter 0.75
URITemplateRouter_Match 181.8487752483191 ns/iter 245.7586644532189 ns/iter 0.74
URITemplateRouter_Match_BasePath 207.07914251150083 ns/iter 350.82180808496287 ns/iter 0.59
URITemplateRouterView_Restore 10719.203840027989 ns/iter 17461.943189895035 ns/iter 0.61
URITemplateRouterView_Match 159.49354056800877 ns/iter 194.82421170374008 ns/iter 0.82
URITemplateRouterView_Match_BasePath 159.8760524888437 ns/iter 242.2901702331262 ns/iter 0.66
URITemplateRouterView_Arguments 437.2740723213947 ns/iter 461.51346881094213 ns/iter 0.95
JSONL_Parse_Large 14027060.962963266 ns/iter 15548874.086957568 ns/iter 0.90
JSONL_Parse_Large_GZIP 18321565.000001103 ns/iter 18258836.5384606 ns/iter 1.00
HTML_Build_Table_100000 82222907.44444965 ns/iter 71807758.3999957 ns/iter 1.15
HTML_Render_Table_100000 6471211.942307666 ns/iter 5395044.791667184 ns/iter 1.20

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

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Benchmark (windows/msvc)

Details
Benchmark suite Current: 24c5ae6 Previous: 5cf57e5 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 7.981469866071527 ns/iter 7.275233035715344 ns/iter 1.10
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 8.024578124999744 ns/iter 7.267755580355433 ns/iter 1.10
Regex_Period_Asterisk 8.024068080358303 ns/iter 7.277516964285675 ns/iter 1.10
Regex_Group_Period_Asterisk_Group 8.06215174972461 ns/iter 7.264937500000965 ns/iter 1.11
Regex_Period_Plus 10.281068257673285 ns/iter 8.408431919644244 ns/iter 1.22
Regex_Period 10.329124999998385 ns/iter 8.416794605284137 ns/iter 1.23
Regex_Caret_Period_Plus_Dollar 10.392407096462678 ns/iter 8.418667410712288 ns/iter 1.23
Regex_Caret_Group_Period_Plus_Group_Dollar 10.434077631992004 ns/iter 8.419771205357815 ns/iter 1.24
Regex_Caret_Period_Asterisk_Dollar 8.061414062500003 ns/iter 7.269285714284837 ns/iter 1.11
Regex_Caret_Group_Period_Asterisk_Group_Dollar 8.0830044642864 ns/iter 7.271610491069882 ns/iter 1.11
Regex_Caret_X_Hyphen 12.548496874998705 ns/iter 9.929915580670233 ns/iter 1.26
Regex_Period_Md_Dollar 41.80186303612595 ns/iter 33.71611533422344 ns/iter 1.24
Regex_Caret_Slash_Period_Asterisk 12.054914285714956 ns/iter 9.591879687498304 ns/iter 1.26
Regex_Caret_Period_Range_Dollar 10.351891025216176 ns/iter 8.113830767346789 ns/iter 1.28
Regex_Nested_Backtrack 51.59303000000364 ns/iter 43.48624403136872 ns/iter 1.19
JSON_Array_Of_Objects_Unique 481.8489427821989 ns/iter 378.0464324918124 ns/iter 1.27
JSON_Parse_1 8476.008928572603 ns/iter 7493.982142856888 ns/iter 1.13
JSON_Parse_Real 17150.271318780808 ns/iter 14548.746434166105 ns/iter 1.18
JSON_Parse_Decimal 18080.202322783094 ns/iter 15058.435453415334 ns/iter 1.20
JSON_Parse_Schema_ISO_Language 7267117.77777685 ns/iter 6731406.249999492 ns/iter 1.08
JSON_Fast_Hash_Helm_Chart_Lock 64.59969000000001 ns/iter 42.34741971914798 ns/iter 1.53
JSON_Equality_Helm_Chart_Lock 279.20694735687954 ns/iter 233.1562909423262 ns/iter 1.20
JSON_Divisible_By_Decimal 274.73576003283335 ns/iter 273.80682706216817 ns/iter 1.00
JSON_String_Equal/10 13.342632142857674 ns/iter 9.482199064811677 ns/iter 1.41
JSON_String_Equal/100 14.62218743472166 ns/iter 11.377848437501115 ns/iter 1.29
JSON_String_Equal_Small_By_Perfect_Hash/10 2.391945357142536 ns/iter 1.735079108304603 ns/iter 1.38
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 13.49283007369238 ns/iter 9.62937031249922 ns/iter 1.40
JSON_String_Fast_Hash/10 3.4193799492516908 ns/iter 2.0466593503945414 ns/iter 1.67
JSON_String_Fast_Hash/100 3.4366331303702937 ns/iter 2.0477698637856316 ns/iter 1.68
JSON_String_Key_Hash/10 4.2119156231193955 ns/iter 2.6691810020813564 ns/iter 1.58
JSON_String_Key_Hash/100 17.64500372897371 ns/iter 13.753840117172212 ns/iter 1.28
JSON_Object_Defines_Miss_Same_Length 5.379150892857913 ns/iter 5.231547999999293 ns/iter 1.03
JSON_Object_Defines_Miss_Too_Small 4.080892685859013 ns/iter 3.7903895089286266 ns/iter 1.08
JSON_Object_Defines_Miss_Too_Large 4.08405078125007 ns/iter 3.502222716959759 ns/iter 1.17
Pointer_Object_Traverse 47.18626444611111 ns/iter 36.376927921840384 ns/iter 1.30
Pointer_Object_Try_Traverse 60.73657142857363 ns/iter 47.56786713319776 ns/iter 1.28
Pointer_Push_Back_Pointer_To_Weak_Pointer 197.8768795590497 ns/iter 176.6602455356901 ns/iter 1.12
Pointer_Walker_Schema_ISO_Language 15506144.000000859 ns/iter 12328412.499998974 ns/iter 1.26
Pointer_Maybe_Tracked_Deeply_Nested/0 2299425.75757639 ns/iter 1911210.357142831 ns/iter 1.20
Pointer_Maybe_Tracked_Deeply_Nested/1 3865240.782122569 ns/iter 3810910.055865317 ns/iter 1.01
Pointer_Position_Tracker_Get_Deeply_Nested 667.7200144106134 ns/iter 528.3495190619811 ns/iter 1.26
Schema_Frame_WoT_References 10928256.000000449 ns/iter 9572906.666665707 ns/iter 1.14
Schema_Frame_OMC_References 48893918.181833714 ns/iter 42388237.5000062 ns/iter 1.15
Schema_Frame_OMC_Locations 43110981.25000967 ns/iter 38908183.33333199 ns/iter 1.11
Schema_Frame_ISO_Language_Locations 248960299.99998367 ns/iter 189629899.9999999 ns/iter 1.31
Schema_Frame_KrakenD_References 98692371.42856945 ns/iter 82338522.22221887 ns/iter 1.20
Schema_Frame_KrakenD_Reachable 606158600.0000716 ns/iter 614161499.9999092 ns/iter 0.99
Schema_Iterator_ISO_Language 7353190.999999697 ns/iter 6720112.50000131 ns/iter 1.09
Schema_Frame_ISO_Language_Locations_To_JSON 381012800.0000077 ns/iter 290107300.0000451 ns/iter 1.31
Schema_Tracker_ISO_Language 11910487.499997253 ns/iter 10865842.18750275 ns/iter 1.10
Schema_Tracker_ISO_Language_To_JSON 56117718.18181214 ns/iter 51421580.00001018 ns/iter 1.09
Schema_Format_ISO_Language_To_JSON 246038099.99992642 ns/iter 185826700.00000688 ns/iter 1.32
Schema_Bundle_Meta_2020_12 3057561.0169461914 ns/iter 2759165.8634494715 ns/iter 1.11
Schema_Frame_Many_Resources_References 1702152000.0000691 ns/iter 1365895299.9999201 ns/iter 1.25
EditorSchema_ForEditor_EmbeddedResources 31931204.761934035 ns/iter 26343655.9999991 ns/iter 1.21
URITemplateRouter_Create 42371.60248297596 ns/iter 38409.62661380152 ns/iter 1.10
URITemplateRouter_Match 241.48714285713268 ns/iter 239.69662503383697 ns/iter 1.01
URITemplateRouter_Match_BasePath 276.5325235059828 ns/iter 272.3902532316761 ns/iter 1.02
URITemplateRouterView_Restore 32567.10729854941 ns/iter 24021.153781764675 ns/iter 1.36
URITemplateRouterView_Match 180.28244957249584 ns/iter 155.75685267858066 ns/iter 1.16
URITemplateRouterView_Match_BasePath 203.77310474224896 ns/iter 173.11592453899783 ns/iter 1.18
URITemplateRouterView_Arguments 483.75973334451453 ns/iter 416.6260963478288 ns/iter 1.16
JSONL_Parse_Large 31037135.99999537 ns/iter 26605534.615380466 ns/iter 1.17
JSONL_Parse_Large_GZIP 30531054.545463122 ns/iter 26427515.384616874 ns/iter 1.16
HTML_Build_Table_100000 99691971.42855333 ns/iter 95109442.85716505 ns/iter 1.05
HTML_Render_Table_100000 9544898.666666389 ns/iter 12271640.625002079 ns/iter 0.78

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

@jviotti jviotti merged commit e774d05 into main May 14, 2026
13 checks passed
@jviotti jviotti deleted the email branch May 14, 2026 20:11
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Benchmark (linux/gcc)

Details
Benchmark suite Current: 24c5ae6 Previous: 5cf57e5 Ratio
HTML_Build_Table_100000 69398583.20001803 ns/iter 62331696.818174265 ns/iter 1.11
HTML_Render_Table_100000 5757476.845527838 ns/iter 5168009.1119412435 ns/iter 1.11
JSONL_Parse_Large 12752056.472725764 ns/iter 12716040.309090784 ns/iter 1.00
JSONL_Parse_Large_GZIP 13930445.26000267 ns/iter 13926686.199997675 ns/iter 1.00
URITemplateRouter_Create 30680.33838188405 ns/iter 31612.138133266737 ns/iter 0.97
URITemplateRouter_Match 165.4225633035534 ns/iter 170.81591500039525 ns/iter 0.97
URITemplateRouter_Match_BasePath 199.2967999462075 ns/iter 197.86756950975527 ns/iter 1.01
URITemplateRouterView_Restore 8788.678156821143 ns/iter 7623.346945405155 ns/iter 1.15
URITemplateRouterView_Match 131.44300342350923 ns/iter 136.3952953746044 ns/iter 0.96
URITemplateRouterView_Match_BasePath 155.7337539423849 ns/iter 158.08587221265023 ns/iter 0.99
URITemplateRouterView_Arguments 456.22418540721856 ns/iter 485.22593943279907 ns/iter 0.94
EditorSchema_ForEditor_EmbeddedResources 14647990.80850811 ns/iter 14087153.199989188 ns/iter 1.04
Schema_Frame_WoT_References 5614878.373015537 ns/iter 5402146.930768699 ns/iter 1.04
Schema_Frame_OMC_References 25655611.33333934 ns/iter 22509450.35483886 ns/iter 1.14
Schema_Frame_OMC_Locations 23785869.83333359 ns/iter 20805167.78787431 ns/iter 1.14
Schema_Frame_ISO_Language_Locations 110151772.66669221 ns/iter 103986640.66667606 ns/iter 1.06
Schema_Frame_KrakenD_References 47946520.86666247 ns/iter 43362227.68749565 ns/iter 1.11
Schema_Frame_KrakenD_Reachable 640677874.9999375 ns/iter 543085923.0002625 ns/iter 1.18
Schema_Iterator_ISO_Language 3231360.7649769764 ns/iter 3329539.2227488067 ns/iter 0.97
Schema_Frame_ISO_Language_Locations_To_JSON 246558980.66665336 ns/iter 218052270.33337358 ns/iter 1.13
Schema_Tracker_ISO_Language 4816434.116439069 ns/iter 4848063.3749995325 ns/iter 0.99
Schema_Tracker_ISO_Language_To_JSON 22355506.483871713 ns/iter 22649496.161288735 ns/iter 0.99
Schema_Format_ISO_Language_To_JSON 117079962.50000481 ns/iter 112668760.4999764 ns/iter 1.04
Schema_Bundle_Meta_2020_12 1791169.8102469202 ns/iter 1805259.3743457366 ns/iter 0.99
Schema_Frame_Many_Resources_References 410600367.0000291 ns/iter 406051370.99998957 ns/iter 1.01
Pointer_Object_Traverse 26.799231650832297 ns/iter 24.811197027768056 ns/iter 1.08
Pointer_Object_Try_Traverse 22.12529454432564 ns/iter 19.87100818530264 ns/iter 1.11
Pointer_Push_Back_Pointer_To_Weak_Pointer 179.48028604090788 ns/iter 165.91927363982805 ns/iter 1.08
Pointer_Walker_Schema_ISO_Language 3671393.1827952983 ns/iter 3377453.7525773994 ns/iter 1.09
Pointer_Maybe_Tracked_Deeply_Nested/0 1570026.310112686 ns/iter 1632227.6197178552 ns/iter 0.96
Pointer_Maybe_Tracked_Deeply_Nested/1 1772154.0957173973 ns/iter 1851896.1462765469 ns/iter 0.96
Pointer_Position_Tracker_Get_Deeply_Nested 435.0743695666091 ns/iter 393.5954639952862 ns/iter 1.11
JSON_Array_Of_Objects_Unique 414.13573711484463 ns/iter 371.7313679880679 ns/iter 1.11
JSON_Parse_1 7767.900749979065 ns/iter 7876.714946782639 ns/iter 0.99
JSON_Parse_Real 11968.686938707018 ns/iter 12152.115904410917 ns/iter 0.98
JSON_Parse_Decimal 16146.928326779878 ns/iter 17709.839879609426 ns/iter 0.91
JSON_Parse_Schema_ISO_Language 4755191.530611395 ns/iter 4708746.193332445 ns/iter 1.01
JSON_Fast_Hash_Helm_Chart_Lock 59.32049206008234 ns/iter 61.23113496744459 ns/iter 0.97
JSON_Equality_Helm_Chart_Lock 201.41659939881976 ns/iter 169.53847127138272 ns/iter 1.19
JSON_Divisible_By_Decimal 230.82184427574143 ns/iter 237.98209767535303 ns/iter 0.97
JSON_String_Equal/10 6.4122154902771005 ns/iter 6.514962210988548 ns/iter 0.98
JSON_String_Equal/100 7.0627170276713995 ns/iter 7.05067932526659 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.7146015829597261 ns/iter 0.6240895245590874 ns/iter 1.15
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 22.323234780086203 ns/iter 25.21129723752717 ns/iter 0.89
JSON_String_Fast_Hash/10 1.0551831177869724 ns/iter 0.93822620838784 ns/iter 1.12
JSON_String_Fast_Hash/100 1.0556260037518563 ns/iter 0.9367960628163042 ns/iter 1.13
JSON_String_Key_Hash/10 1.7589467962451217 ns/iter 1.5604870263734358 ns/iter 1.13
JSON_String_Key_Hash/100 14.820723356640402 ns/iter 12.45370606480706 ns/iter 1.19
JSON_Object_Defines_Miss_Same_Length 3.8733008219953593 ns/iter 3.427780587419908 ns/iter 1.13
JSON_Object_Defines_Miss_Too_Small 3.5719301408961015 ns/iter 3.1190517455778517 ns/iter 1.15
JSON_Object_Defines_Miss_Too_Large 4.22045902421339 ns/iter 3.7393999878252084 ns/iter 1.13
Regex_Lower_S_Or_Upper_S_Asterisk 1.055051683624582 ns/iter 0.934847349127164 ns/iter 1.13
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.0574810159915338 ns/iter 0.934396785134195 ns/iter 1.13
Regex_Period_Asterisk 0.7038356359679153 ns/iter 0.6233256761636264 ns/iter 1.13
Regex_Group_Period_Asterisk_Group 0.7142183502054521 ns/iter 0.6244320792886412 ns/iter 1.14
Regex_Period_Plus 1.05597673760644 ns/iter 0.9346221280906808 ns/iter 1.13
Regex_Period 1.055245994772171 ns/iter 0.9341325848332472 ns/iter 1.13
Regex_Caret_Period_Plus_Dollar 0.7040798846653294 ns/iter 0.622908408331923 ns/iter 1.13
Regex_Caret_Group_Period_Plus_Group_Dollar 0.7092985044985436 ns/iter 0.6233642880727505 ns/iter 1.14
Regex_Caret_Period_Asterisk_Dollar 1.0567353903910137 ns/iter 0.9357135633505675 ns/iter 1.13
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.0560463074429907 ns/iter 0.9343296781263413 ns/iter 1.13
Regex_Caret_X_Hyphen 4.220000204270431 ns/iter 4.363259935763016 ns/iter 0.97
Regex_Period_Md_Dollar 33.424533291781444 ns/iter 28.782347482432897 ns/iter 1.16
Regex_Caret_Slash_Period_Asterisk 3.8687410151093147 ns/iter 4.363268376038283 ns/iter 0.89
Regex_Caret_Period_Range_Dollar 1.0564397025678065 ns/iter 0.93430033411723 ns/iter 1.13
Regex_Nested_Backtrack 39.17845261429927 ns/iter 37.985989847289105 ns/iter 1.03

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant