Skip to content

Support validation of RFC 6531 international e-mail addresses#2408

Merged
jviotti merged 3 commits into
mainfrom
idn-email
May 25, 2026
Merged

Support validation of RFC 6531 international e-mail addresses#2408
jviotti merged 3 commits into
mainfrom
idn-email

Conversation

@jviotti
Copy link
Copy Markdown
Member

@jviotti jviotti commented May 25, 2026

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 25, 2026

🤖 Augment PR Summary

Summary: This PR adds support for validating internationalized (EAI) e-mail addresses per RFC 6531, in addition to the existing RFC 5321 ASCII validation.

Changes:

  • Introduced sourcemeta::core::is_idn_email to validate UTF-8 local-parts (atoms/quoted strings) and UTF-8 domain labels, while keeping address-literals ASCII-only
  • Added an internal is_idn_domain helper to validate UTF-8 domain label structure and length limits
  • Added utf8_codepoint_length to the unicode module to validate/step through UTF-8 sequences efficiently
  • Updated CMake wiring so the email component links against the unicode component
  • Expanded the existing email test suite to assert ASCII parity between is_email and is_idn_email, and added a dedicated IDN email test file with UTF-8 and invalid-UTF-8 cases
  • Refactored unicode unit tests into focused test files and added coverage for utf8_codepoint_length

Notes: The new IDN validator enforces RFC 5321 size limits in octets (local-part ≤ 64, domain ≤ 255, label ≤ 63) while permitting valid UTF-8 non-ASCII sequences where RFC 6531 extends the grammar.

🤖 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/idn_email_test.cc Outdated
}
domain.append(1, 'a');
// size = 63*4 + 4 + 1 = 257; trim to exactly 256
domain.resize(256, 'a');
Copy link
Copy Markdown

@augmentcode augmentcode Bot May 25, 2026

Choose a reason for hiding this comment

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

test/email/idn_email_test.cc:395: After domain.resize(256, 'a'), the constructed domain ends with a trailing . (because the final single-character label gets truncated), so the test would still fail even if the 255-octet length check were accidentally removed. This makes the test less specific for validating the domain-length cap behavior.

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.

2 issues found across 13 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread src/core/email/email.cc Outdated
Comment thread test/email/idn_email_test.cc Outdated
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: 21cda8b Previous: e832723 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.46738943492435 ns/iter 2.1996567728995133 ns/iter 1.12
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.462267612101789 ns/iter 2.2077294717371823 ns/iter 1.12
Regex_Period_Asterisk 2.4724938068215256 ns/iter 2.18010535676737 ns/iter 1.13
Regex_Group_Period_Asterisk_Group 2.462758498546909 ns/iter 2.1937180536919203 ns/iter 1.12
Regex_Period_Plus 3.8670073480185967 ns/iter 2.8070780573028404 ns/iter 1.38
Regex_Period 4.218822597800704 ns/iter 3.114797648871015 ns/iter 1.35
Regex_Caret_Period_Plus_Dollar 3.8713289245987137 ns/iter 2.8063296796131874 ns/iter 1.38
Regex_Caret_Group_Period_Plus_Group_Dollar 4.219977955761685 ns/iter 3.112969479282914 ns/iter 1.36
Regex_Caret_Period_Asterisk_Dollar 2.4626759574183286 ns/iter 3.114146816637613 ns/iter 0.79
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.8137095320520364 ns/iter 3.422576970000296 ns/iter 0.82
Regex_Caret_X_Hyphen 7.032470599201385 ns/iter 6.544977561330682 ns/iter 1.07
Regex_Period_Md_Dollar 26.762047903730135 ns/iter 27.416826738377754 ns/iter 0.98
Regex_Caret_Slash_Period_Asterisk 7.382951318149629 ns/iter 6.850976699466928 ns/iter 1.08
Regex_Caret_Period_Range_Dollar 3.8672399786755625 ns/iter 3.7361464136938953 ns/iter 1.04
Regex_Nested_Backtrack 37.065204508047785 ns/iter 36.905777877543265 ns/iter 1.00
JSON_Array_Of_Objects_Unique 417.4544583907074 ns/iter 386.73397222830675 ns/iter 1.08
JSON_Parse_1 5605.515443477241 ns/iter 5836.440772591699 ns/iter 0.96
JSON_Parse_Real 10374.3977996441 ns/iter 10562.348369334371 ns/iter 0.98
JSON_Parse_Decimal 11121.72578546461 ns/iter 10886.148669772096 ns/iter 1.02
JSON_Parse_Schema_ISO_Language 3600586.087628992 ns/iter 3566214.255102131 ns/iter 1.01
JSON_Fast_Hash_Helm_Chart_Lock 65.04175492543024 ns/iter 53.558191364273405 ns/iter 1.21
JSON_Equality_Helm_Chart_Lock 164.78088162319375 ns/iter 160.21464315907295 ns/iter 1.03
JSON_Divisible_By_Decimal 239.35293758377622 ns/iter 247.3694544705118 ns/iter 0.97
JSON_String_Equal/10 5.983434881159271 ns/iter 7.16432634801008 ns/iter 0.84
JSON_String_Equal/100 6.682006464783699 ns/iter 6.858073821179724 ns/iter 0.97
JSON_String_Equal_Small_By_Perfect_Hash/10 1.0544428030353141 ns/iter 0.9362119009422682 ns/iter 1.13
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 12.489381174277833 ns/iter 10.274975048031724 ns/iter 1.22
JSON_String_Fast_Hash/10 2.4632401182550345 ns/iter 2.4925839722744243 ns/iter 0.99
JSON_String_Fast_Hash/100 2.46720081369426 ns/iter 2.494952999665258 ns/iter 0.99
JSON_String_Key_Hash/10 2.462106883120562 ns/iter 2.1808782778303364 ns/iter 1.13
JSON_String_Key_Hash/100 8.085366181815244 ns/iter 6.540627252411709 ns/iter 1.24
JSON_Object_Defines_Miss_Same_Length 4.222242709900018 ns/iter 3.739178778188629 ns/iter 1.13
JSON_Object_Defines_Miss_Too_Small 4.224359340550422 ns/iter 3.741718881691402 ns/iter 1.13
JSON_Object_Defines_Miss_Too_Large 4.220345482699388 ns/iter 3.742828795753063 ns/iter 1.13
Pointer_Object_Traverse 27.332226850728325 ns/iter 24.320590353654172 ns/iter 1.12
Pointer_Object_Try_Traverse 30.60420713849389 ns/iter 26.02193851475689 ns/iter 1.18
Pointer_Push_Back_Pointer_To_Weak_Pointer 190.94595139987243 ns/iter 157.0903712712709 ns/iter 1.22
Pointer_Walker_Schema_ISO_Language 3147677.8363634655 ns/iter 3000939.5517241983 ns/iter 1.05
Pointer_Maybe_Tracked_Deeply_Nested/0 1412286.978174551 ns/iter 1440930.2282827944 ns/iter 0.98
Pointer_Maybe_Tracked_Deeply_Nested/1 1705383.2014742207 ns/iter 1900062.3196722285 ns/iter 0.90
Pointer_Position_Tracker_Get_Deeply_Nested 655.7481779356049 ns/iter 644.4319524626187 ns/iter 1.02
URITemplateRouter_Create 29684.67883768075 ns/iter 31566.01145640707 ns/iter 0.94
URITemplateRouter_Match 190.8673464784428 ns/iter 176.1295524383524 ns/iter 1.08
URITemplateRouter_Match_BasePath 227.5701944279261 ns/iter 203.80128089736536 ns/iter 1.12
URITemplateRouterView_Restore 8233.419276576518 ns/iter 7652.612550336167 ns/iter 1.08
URITemplateRouterView_Match 144.18762331955344 ns/iter 144.11980573589253 ns/iter 1.00
URITemplateRouterView_Match_BasePath 164.4532738868878 ns/iter 162.88782772310375 ns/iter 1.01
URITemplateRouterView_Arguments 468.15646471496484 ns/iter 434.82304434756725 ns/iter 1.08
JSONL_Parse_Large 10036455.753623264 ns/iter 10758670.507692175 ns/iter 0.93
JSONL_Parse_Large_GZIP 11353002.838709177 ns/iter 11962355.56896509 ns/iter 0.95
HTML_Build_Table_100000 85661753.49999838 ns/iter 62957515.81818236 ns/iter 1.36
HTML_Render_Table_100000 5281133.015151254 ns/iter 5257504.618320915 ns/iter 1.00
GZIP_Compress_ISO_Language_Set_3_Locations 36472145.10526079 ns/iter 33918662.00000019 ns/iter 1.08
GZIP_Decompress_ISO_Language_Set_3_Locations 4660185.426666886 ns/iter 4729387.637583893 ns/iter 0.99
GZIP_Compress_ISO_Language_Set_3_Schema 2149579.083333332 ns/iter 1878856.629032142 ns/iter 1.14
GZIP_Decompress_ISO_Language_Set_3_Schema 293907.192097521 ns/iter 377606.18736501486 ns/iter 0.78

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

Details
Benchmark suite Current: 21cda8b Previous: e832723 Ratio
GZIP_Compress_ISO_Language_Set_3_Locations 38127722.22222331 ns/iter 38158784.500000015 ns/iter 1.00
GZIP_Decompress_ISO_Language_Set_3_Locations 4864415.688405847 ns/iter 4898624.925170234 ns/iter 0.99
GZIP_Compress_ISO_Language_Set_3_Schema 2071479.2366863976 ns/iter 2070777.3402367544 ns/iter 1.00
GZIP_Decompress_ISO_Language_Set_3_Schema 394243.736723164 ns/iter 394494.5482062787 ns/iter 1.00
HTML_Build_Table_100000 58431295.50000015 ns/iter 58974773.66666711 ns/iter 0.99
HTML_Render_Table_100000 1948665.0362116576 ns/iter 1795484.3798449324 ns/iter 1.09
JSONL_Parse_Large 13337926.377359191 ns/iter 13038007.500000503 ns/iter 1.02
JSONL_Parse_Large_GZIP 14443948.469387839 ns/iter 14321219.57142898 ns/iter 1.01
URITemplateRouter_Create 30880.27940335453 ns/iter 30700.44542307424 ns/iter 1.01
URITemplateRouter_Match 177.42280024042188 ns/iter 176.17113901810805 ns/iter 1.01
URITemplateRouter_Match_BasePath 199.7881221649827 ns/iter 201.14139841074424 ns/iter 0.99
URITemplateRouterView_Restore 7833.894714177047 ns/iter 7779.15098415974 ns/iter 1.01
URITemplateRouterView_Match 144.07242455710448 ns/iter 143.9545436315941 ns/iter 1.00
URITemplateRouterView_Match_BasePath 165.0855589945154 ns/iter 165.5521092960643 ns/iter 1.00
URITemplateRouterView_Arguments 475.66086633948277 ns/iter 481.5986455830252 ns/iter 0.99
Pointer_Object_Traverse 24.54624591871065 ns/iter 25.919396029240133 ns/iter 0.95
Pointer_Object_Try_Traverse 20.022417267361007 ns/iter 20.041509554461637 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 148.92611217505262 ns/iter 146.79925850841826 ns/iter 1.01
Pointer_Walker_Schema_ISO_Language 3298595.2547169034 ns/iter 3308661.2547170925 ns/iter 1.00
Pointer_Maybe_Tracked_Deeply_Nested/0 1605694.803652996 ns/iter 1587688.1425338255 ns/iter 1.01
Pointer_Maybe_Tracked_Deeply_Nested/1 1766614.238578761 ns/iter 1743014.1720698902 ns/iter 1.01
Pointer_Position_Tracker_Get_Deeply_Nested 567.113286092249 ns/iter 577.5969132008014 ns/iter 0.98
JSON_Array_Of_Objects_Unique 434.00812342298195 ns/iter 431.27733200659264 ns/iter 1.01
JSON_Parse_1 8172.179689683976 ns/iter 8127.375736062988 ns/iter 1.01
JSON_Parse_Real 12414.855299946288 ns/iter 12192.877941943601 ns/iter 1.02
JSON_Parse_Decimal 18129.988132255352 ns/iter 18129.154241577973 ns/iter 1.00
JSON_Parse_Schema_ISO_Language 4626263.7615895895 ns/iter 4698582.550335592 ns/iter 0.98
JSON_Fast_Hash_Helm_Chart_Lock 72.68015421361468 ns/iter 74.14552357795431 ns/iter 0.98
JSON_Equality_Helm_Chart_Lock 160.23917994333857 ns/iter 163.18285413868963 ns/iter 0.98
JSON_Divisible_By_Decimal 237.51815528774986 ns/iter 236.61274286556392 ns/iter 1.00
JSON_String_Equal/10 5.967259790818047 ns/iter 5.965518672409065 ns/iter 1.00
JSON_String_Equal/100 6.590745308961074 ns/iter 6.612694884621844 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.7401050325013298 ns/iter 0.7400498100494042 ns/iter 1.00
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 25.199192952844122 ns/iter 25.187698265575612 ns/iter 1.00
JSON_String_Fast_Hash/10 0.9342236842744768 ns/iter 0.9340525909987402 ns/iter 1.00
JSON_String_Fast_Hash/100 0.9350766977146328 ns/iter 0.9345597338410486 ns/iter 1.00
JSON_String_Key_Hash/10 1.2466594557349016 ns/iter 1.246782136172886 ns/iter 1.00
JSON_String_Key_Hash/100 12.446222029338493 ns/iter 12.444582002239349 ns/iter 1.00
JSON_Object_Defines_Miss_Same_Length 3.117931435193032 ns/iter 3.1135456108515176 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.1170883853482496 ns/iter 3.116893581752884 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.426671713785965 ns/iter 3.437648570929781 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 0.9352971663122126 ns/iter 0.9349541099029665 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 0.6228853373202854 ns/iter 0.6252841272947457 ns/iter 1.00
Regex_Period_Asterisk 0.6227509102034195 ns/iter 0.6234227723884165 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 0.9343870454999735 ns/iter 0.9335219863039076 ns/iter 1.00
Regex_Period_Plus 0.9344705429777735 ns/iter 0.9349373384590581 ns/iter 1.00
Regex_Period 0.6227102713942148 ns/iter 0.6229073185216599 ns/iter 1.00
Regex_Caret_Period_Plus_Dollar 0.6256664961324405 ns/iter 0.6225387064453923 ns/iter 1.01
Regex_Caret_Group_Period_Plus_Group_Dollar 0.9343445632619692 ns/iter 0.9347464017488581 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 0.9353205286524177 ns/iter 0.9337076732374001 ns/iter 1.00
Regex_Caret_Group_Period_Asterisk_Group_Dollar 0.6234929425121206 ns/iter 0.6230090725060097 ns/iter 1.00
Regex_Caret_X_Hyphen 4.674733847999305 ns/iter 4.051331957188607 ns/iter 1.15
Regex_Period_Md_Dollar 30.81116794256658 ns/iter 28.901713963384758 ns/iter 1.07
Regex_Caret_Slash_Period_Asterisk 4.355901596059275 ns/iter 4.358814551110244 ns/iter 1.00
Regex_Caret_Period_Range_Dollar 0.7786966932841141 ns/iter 0.7789866585944206 ns/iter 1.00
Regex_Nested_Backtrack 39.362791786916844 ns/iter 37.61464224593511 ns/iter 1.05

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: 21cda8b Previous: e832723 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.0446997069649515 ns/iter 2.0230934080012655 ns/iter 1.01
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.7150107394687182 ns/iter 1.9017966346137758 ns/iter 0.90
Regex_Period_Asterisk 1.7092538489197031 ns/iter 1.7958050360173214 ns/iter 0.95
Regex_Group_Period_Asterisk_Group 1.715040345619468 ns/iter 1.6815941858795471 ns/iter 1.02
Regex_Period_Plus 2.0518287584800943 ns/iter 1.9730831567095817 ns/iter 1.04
Regex_Period 2.0507582468991865 ns/iter 2.037694326878609 ns/iter 1.01
Regex_Caret_Period_Plus_Dollar 2.063449108318413 ns/iter 2.234747405152416 ns/iter 0.92
Regex_Caret_Group_Period_Plus_Group_Dollar 2.0573837481051873 ns/iter 2.363393288677956 ns/iter 0.87
Regex_Caret_Period_Asterisk_Dollar 1.7189102377924494 ns/iter 1.94843621225017 ns/iter 0.88
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.8155381660027639 ns/iter 1.6329322025127677 ns/iter 1.11
Regex_Caret_X_Hyphen 6.337753904742929 ns/iter 5.793675224612956 ns/iter 1.09
Regex_Period_Md_Dollar 16.625870403843603 ns/iter 16.227944955795053 ns/iter 1.02
Regex_Caret_Slash_Period_Asterisk 8.104886289910763 ns/iter 7.8981599206024065 ns/iter 1.03
Regex_Caret_Period_Range_Dollar 1.7131789351214586 ns/iter 1.6856901589803592 ns/iter 1.02
Regex_Nested_Backtrack 24.68591922130834 ns/iter 23.180329605954086 ns/iter 1.06
JSON_Array_Of_Objects_Unique 428.21976109068265 ns/iter 403.38923110532437 ns/iter 1.06
JSON_Parse_1 4243.26556004892 ns/iter 3680.3987963140007 ns/iter 1.15
JSON_Parse_Real 6460.4593354880535 ns/iter 6293.059443878505 ns/iter 1.03
JSON_Parse_Decimal 8072.764805040775 ns/iter 8301.205322584545 ns/iter 0.97
JSON_Parse_Schema_ISO_Language 2828499.1680000075 ns/iter 2671209.615384494 ns/iter 1.06
JSON_Fast_Hash_Helm_Chart_Lock 58.56447474046987 ns/iter 55.822702254066556 ns/iter 1.05
JSON_Equality_Helm_Chart_Lock 134.64109382625756 ns/iter 129.7475032837203 ns/iter 1.04
JSON_Divisible_By_Decimal 175.87182475222937 ns/iter 166.83735146842008 ns/iter 1.05
JSON_String_Equal/10 6.773012006881644 ns/iter 6.4355062146499975 ns/iter 1.05
JSON_String_Equal/100 6.523477755107477 ns/iter 6.163711843219169 ns/iter 1.06
JSON_String_Equal_Small_By_Perfect_Hash/10 0.7584854612134978 ns/iter 0.7420858283490555 ns/iter 1.02
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.321992139264785 ns/iter 3.8128548508170046 ns/iter 0.87
JSON_String_Fast_Hash/10 2.3825872904028382 ns/iter 2.6242228959743383 ns/iter 0.91
JSON_String_Fast_Hash/100 2.064934118269114 ns/iter 1.9597429217617235 ns/iter 1.05
JSON_String_Key_Hash/10 1.3778188641316025 ns/iter 1.4148943295042673 ns/iter 0.97
JSON_String_Key_Hash/100 2.2708676151234983 ns/iter 2.280149261041117 ns/iter 1.00
JSON_Object_Defines_Miss_Same_Length 2.3690067390264398 ns/iter 2.2379642661672694 ns/iter 1.06
JSON_Object_Defines_Miss_Too_Small 2.379854065773171 ns/iter 2.23357380922309 ns/iter 1.07
JSON_Object_Defines_Miss_Too_Large 2.5712241138170744 ns/iter 2.3037109064787753 ns/iter 1.12
Pointer_Object_Traverse 14.232530475925246 ns/iter 13.405277274692386 ns/iter 1.06
Pointer_Object_Try_Traverse 20.513875689396194 ns/iter 18.21744126185244 ns/iter 1.13
Pointer_Push_Back_Pointer_To_Weak_Pointer 168.20420325932972 ns/iter 152.82527705724976 ns/iter 1.10
Pointer_Walker_Schema_ISO_Language 4433270.454545422 ns/iter 3810732.3828567783 ns/iter 1.16
Pointer_Maybe_Tracked_Deeply_Nested/0 1059041.0776836476 ns/iter 914473.7336122225 ns/iter 1.16
Pointer_Maybe_Tracked_Deeply_Nested/1 1402576.428571419 ns/iter 1268184.5561594581 ns/iter 1.11
Pointer_Position_Tracker_Get_Deeply_Nested 363.44494209062617 ns/iter 347.20258357470726 ns/iter 1.05
URITemplateRouter_Create 23398.47450415421 ns/iter 22760.603500078032 ns/iter 1.03
URITemplateRouter_Match 170.0081215777512 ns/iter 156.53184014436653 ns/iter 1.09
URITemplateRouter_Match_BasePath 199.0625452600542 ns/iter 191.5108406868569 ns/iter 1.04
URITemplateRouterView_Restore 9333.127577173927 ns/iter 8535.045523278519 ns/iter 1.09
URITemplateRouterView_Match 129.4865394998182 ns/iter 121.11434376698516 ns/iter 1.07
URITemplateRouterView_Match_BasePath 153.21637148876837 ns/iter 142.06436407190716 ns/iter 1.08
URITemplateRouterView_Arguments 404.84699872358414 ns/iter 449.19196547694753 ns/iter 0.90
JSONL_Parse_Large 12347942.714286426 ns/iter 11659196.659998087 ns/iter 1.06
JSONL_Parse_Large_GZIP 13237751.56603855 ns/iter 11976098.169490365 ns/iter 1.11
HTML_Build_Table_100000 71572219.63636445 ns/iter 59049420.79999955 ns/iter 1.21
HTML_Render_Table_100000 4039531.173228485 ns/iter 2310208.331230452 ns/iter 1.75
GZIP_Compress_ISO_Language_Set_3_Locations 27878628.319999732 ns/iter 26158385.814815793 ns/iter 1.07
GZIP_Decompress_ISO_Language_Set_3_Locations 5015729.316546771 ns/iter 5175050.000000283 ns/iter 0.97
GZIP_Compress_ISO_Language_Set_3_Schema 1504182.506198363 ns/iter 1471545.6081083112 ns/iter 1.02
GZIP_Decompress_ISO_Language_Set_3_Schema 280614.42822678306 ns/iter 268987.2409316381 ns/iter 1.04

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: 21cda8b Previous: e832723 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 7.5531752232141764 ns/iter 8.885738799616007 ns/iter 0.85
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 7.499751116070946 ns/iter 8.82088281249947 ns/iter 0.85
Regex_Period_Asterisk 7.512523437500005 ns/iter 8.90681361607193 ns/iter 0.84
Regex_Group_Period_Asterisk_Group 7.507540178571962 ns/iter 8.827376746309502 ns/iter 0.85
Regex_Period_Plus 9.68068906249897 ns/iter 11.293082812500188 ns/iter 0.86
Regex_Period 9.673115581815177 ns/iter 11.283193749996201 ns/iter 0.86
Regex_Caret_Period_Plus_Dollar 9.675961563946519 ns/iter 11.305167187501297 ns/iter 0.86
Regex_Caret_Group_Period_Plus_Group_Dollar 9.674399956809703 ns/iter 11.277607142858415 ns/iter 0.86
Regex_Caret_Period_Asterisk_Dollar 7.513667410714576 ns/iter 8.878764508928327 ns/iter 0.85
Regex_Caret_Group_Period_Asterisk_Group_Dollar 7.512367857142773 ns/iter 8.833320496278011 ns/iter 0.85
Regex_Caret_X_Hyphen 11.616737499999934 ns/iter 13.676144805017673 ns/iter 0.85
Regex_Period_Md_Dollar 43.25915279893972 ns/iter 40.53744786433886 ns/iter 1.07
Regex_Caret_Slash_Period_Asterisk 12.173073437498516 ns/iter 13.043739285714246 ns/iter 0.93
Regex_Caret_Period_Range_Dollar 11.26915977111938 ns/iter 11.285568750004416 ns/iter 1.00
Regex_Nested_Backtrack 46.34128384146668 ns/iter 50.17599107142294 ns/iter 0.92
JSON_Array_Of_Objects_Unique 477.5175892857776 ns/iter 504.24310000016703 ns/iter 0.95
JSON_Parse_1 8099.785715242033 ns/iter 7937.424107145676 ns/iter 1.02
JSON_Parse_Real 15246.018321344694 ns/iter 13753.648198002442 ns/iter 1.11
JSON_Parse_Decimal 15523.852678572022 ns/iter 14473.454136359143 ns/iter 1.07
JSON_Parse_Schema_ISO_Language 5820261.60714325 ns/iter 6201744.642855342 ns/iter 0.94
JSON_Fast_Hash_Helm_Chart_Lock 71.93094642856985 ns/iter 71.47557142855833 ns/iter 1.01
JSON_Equality_Helm_Chart_Lock 268.0154851792497 ns/iter 271.62809917966933 ns/iter 0.99
JSON_Divisible_By_Decimal 248.21006688438243 ns/iter 253.46018319014541 ns/iter 0.98
JSON_String_Equal/10 12.879566071429087 ns/iter 11.739060714286813 ns/iter 1.10
JSON_String_Equal/100 14.231816071429648 ns/iter 13.454049716727377 ns/iter 1.06
JSON_String_Equal_Small_By_Perfect_Hash/10 1.8971263409794097 ns/iter 1.9933449999996358 ns/iter 0.95
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 12.62961785714367 ns/iter 12.00805714285837 ns/iter 1.05
JSON_String_Fast_Hash/10 3.9331210937503567 ns/iter 4.234708802204655 ns/iter 0.93
JSON_String_Fast_Hash/100 3.8889796051589545 ns/iter 4.236005288286481 ns/iter 0.92
JSON_String_Key_Hash/10 3.8001026717856523 ns/iter 4.237623480252467 ns/iter 0.90
JSON_String_Key_Hash/100 16.566345982145236 ns/iter 16.930065511637515 ns/iter 0.98
JSON_Object_Defines_Miss_Same_Length 3.7615071361405903 ns/iter 3.8885677214800194 ns/iter 0.97
JSON_Object_Defines_Miss_Too_Small 3.7682833861280085 ns/iter 3.978162388393563 ns/iter 0.95
JSON_Object_Defines_Miss_Too_Large 5.025721428571575 ns/iter 4.959544000003007 ns/iter 1.01
Pointer_Object_Traverse 40.69124999999753 ns/iter 42.100990484117034 ns/iter 0.97
Pointer_Object_Try_Traverse 51.8534700000032 ns/iter 53.3252321428839 ns/iter 0.97
Pointer_Push_Back_Pointer_To_Weak_Pointer 170.3735114089351 ns/iter 166.1009932657095 ns/iter 1.03
Pointer_Walker_Schema_ISO_Language 11211268.749999449 ns/iter 12421466.071430132 ns/iter 0.90
Pointer_Maybe_Tracked_Deeply_Nested/0 1927091.3043477668 ns/iter 2195733.5714286533 ns/iter 0.88
Pointer_Maybe_Tracked_Deeply_Nested/1 3146791.5178571916 ns/iter 2988775.423729086 ns/iter 1.05
Pointer_Position_Tracker_Get_Deeply_Nested 626.736941964293 ns/iter 615.1080291618964 ns/iter 1.02
URITemplateRouter_Create 41275.55595733255 ns/iter 38066.68526785525 ns/iter 1.08
URITemplateRouter_Match 220.7342499180548 ns/iter 212.06243750000908 ns/iter 1.04
URITemplateRouter_Match_BasePath 251.74382142860657 ns/iter 246.15853571422772 ns/iter 1.02
URITemplateRouterView_Restore 32680.30357143102 ns/iter 23712.538922543717 ns/iter 1.38
URITemplateRouterView_Match 158.64370535713894 ns/iter 158.33933035714105 ns/iter 1.00
URITemplateRouterView_Match_BasePath 179.11733342304555 ns/iter 182.387353731265 ns/iter 0.98
URITemplateRouterView_Arguments 442.8384999999934 ns/iter 459.95437679800074 ns/iter 0.96
JSONL_Parse_Large 30451179.166670766 ns/iter 29320591.666665524 ns/iter 1.04
JSONL_Parse_Large_GZIP 30340809.090908106 ns/iter 29031500.000000957 ns/iter 1.05
HTML_Build_Table_100000 86463185.71429999 ns/iter 91399500.00001462 ns/iter 0.95
HTML_Render_Table_100000 7714478.888888406 ns/iter 8039863.333331393 ns/iter 0.96
GZIP_Compress_ISO_Language_Set_3_Locations 41163570.58823643 ns/iter 45346543.75001423 ns/iter 0.91
GZIP_Decompress_ISO_Language_Set_3_Locations 10596776.56250102 ns/iter 11487260.937499855 ns/iter 0.92
GZIP_Compress_ISO_Language_Set_3_Schema 2279583.6120399917 ns/iter 2501658.571428119 ns/iter 0.91
GZIP_Decompress_ISO_Language_Set_3_Schema 678861.8303571629 ns/iter 687043.3928570816 ns/iter 0.99

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

jviotti added 2 commits May 25, 2026 15:19
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
@jviotti jviotti merged commit b1ba863 into main May 25, 2026
13 checks passed
@jviotti jviotti deleted the idn-email branch May 25, 2026 19:35
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