Skip to content

Intl: return all ECMA-402 required fields from resolvedOptions()#631

Draft
frostney wants to merge 5 commits into
mainfrom
issue-595-intl-resolved-options
Draft

Intl: return all ECMA-402 required fields from resolvedOptions()#631
frostney wants to merge 5 commits into
mainfrom
issue-595-intl-resolved-options

Conversation

@frostney
Copy link
Copy Markdown
Owner

Summary

  • Fix TryReadStringOption using out instead of var parameter, which cleared constructor defaults (e.g. notation, roundingMode, signDisplay) to empty strings when the option was absent from the user-supplied options object.
  • Add missing spec-required fields to resolvedOptions() across six Intl constructors:
    • NumberFormat: always include numberingSystem (default "latn"), resolved minimumFractionDigits/maximumFractionDigits (style-dependent defaults), roundingIncrement, roundingPriority, trailingZeroDisplay, and compactDisplay (when notation is "compact").
    • DateTimeFormat: always include calendar (default "gregory"), numberingSystem (default "latn"), timeZone; default to year/month/day "numeric" when no dateStyle/timeStyle/components specified; exclude component properties when dateStyle/timeStyle is used.
    • PluralRules: resolve minimumFractionDigits (0) and maximumFractionDigits (3) defaults; add pluralCategories array from CLDR data.
    • RelativeTimeFormat: always include numberingSystem (default "latn").
    • DurationFormat: always include numberingSystem (default "latn").
  • Closes Intl: resolvedOptions() missing required fields across all constructors #595

Testing

  • Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
  • Updated documentation
  • Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)
  • Optional: Verified no benchmark regressions or confirmed benchmark coverage for the change

Fix TryReadStringOption using `out` instead of `var`, which cleared
constructor defaults when the option was absent. Add missing fields
(numberingSystem, roundingIncrement, roundingPriority, trailingZeroDisplay,
pluralCategories, calendar) and resolve fraction-digit defaults per spec
across NumberFormat, DateTimeFormat, PluralRules, RelativeTimeFormat, and
DurationFormat.

Closes #595

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 10, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Preview May 12, 2026 6:36am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 10, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3638aeb7-64b8-4655-b063-d84fef64582d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 10, 2026

Suite Timing

Test Runner (interpreted: 9,328 passed; bytecode: 9,328 passed)
Metric Interpreted Bytecode
Total 9328 9328
Passed 9328 ✅ 9328 ✅
Workers 4 4
Test Duration 2.01s 2.31s
Lex (cumulative) 239.9ms 156.6ms
Parse (cumulative) 264.8ms 274.8ms
Compile (cumulative) 563.9ms
Execute (cumulative) 2.35s 2.37s
Engine Total (cumulative) 2.86s 3.36s
Lex (avg/worker) 60.0ms 39.1ms
Parse (avg/worker) 66.2ms 68.7ms
Compile (avg/worker) 141.0ms
Execute (avg/worker) 587.8ms 591.6ms
Engine Total (avg/worker) 713.9ms 840.5ms

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.

Metric Interpreted Bytecode
GC Live 247.29 MiB 241.68 MiB
GC Peak Live 247.30 MiB 241.68 MiB
GC Allocated During Run 251.24 MiB 245.62 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 88 88
Heap Start Allocated 150.8 KiB 150.8 KiB
Heap End Allocated 1.45 MiB 1.45 MiB
Heap Delta Allocated 1.30 MiB 1.30 MiB
Heap Delta Free 615.9 KiB 615.9 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.52min 2.36min

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.

Metric Interpreted Bytecode
GC Live 3.65 MiB 3.64 MiB
GC Peak Live 112.63 MiB 61.91 MiB
GC Allocated During Run 14.11 GiB 9.27 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,809 2,626
GC Collected Objects 262,284,751 219,218,700
Heap Start Allocated 1.20 MiB 1.20 MiB
Heap End Allocated 1.20 MiB 1.20 MiB
Heap Delta Allocated 128 B 128 B

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 10, 2026

Benchmark Results

407 benchmarks

Interpreted: 🟢 48 improved · 🔴 57 regressed · 302 unchanged · avg +0.5%
Bytecode: 🟢 28 improved · 🔴 350 regressed · 29 unchanged · avg -8.3%

arraybuffer.js — Interp: 🔴 8, 6 unch. · avg -2.2% · Bytecode: 🔴 12, 2 unch. · avg -8.6%
Benchmark Interpreted Δ Bytecode Δ
create ArrayBuffer(0) 138,902 ops/sec [110,784..161,988] → 159,447 ops/sec [145,728..163,300] ~ overlap (+14.8%) 214,535 ops/sec [162,041..217,282] → 193,372 ops/sec [155,191..199,681] ~ overlap (-9.9%)
create ArrayBuffer(64) 154,677 ops/sec [151,917..161,069] → 154,316 ops/sec [152,276..157,785] ~ overlap (-0.2%) 206,937 ops/sec [203,026..210,685] → 186,118 ops/sec [105,640..190,537] 🔴 -10.1%
create ArrayBuffer(1024) 134,634 ops/sec [133,763..136,030] → 135,887 ops/sec [134,253..137,568] ~ overlap (+0.9%) 171,184 ops/sec [167,171..174,311] → 162,747 ops/sec [162,017..163,935] 🔴 -4.9%
create ArrayBuffer(8192) 77,964 ops/sec [75,524..78,792] → 78,737 ops/sec [77,796..79,897] ~ overlap (+1.0%) 83,125 ops/sec [78,099..84,197] → 85,616 ops/sec [83,321..87,052] ~ overlap (+3.0%)
slice full buffer (64 bytes) 187,031 ops/sec [184,158..189,073] → 185,212 ops/sec [182,487..187,878] ~ overlap (-1.0%) 270,266 ops/sec [264,192..272,172] → 240,956 ops/sec [238,353..244,544] 🔴 -10.8%
slice half buffer (512 of 1024 bytes) 167,904 ops/sec [159,224..174,854] → 165,915 ops/sec [164,460..168,011] ~ overlap (-1.2%) 231,357 ops/sec [223,264..235,877] → 214,355 ops/sec [213,224..214,919] 🔴 -7.3%
slice with negative indices 162,850 ops/sec [161,506..165,036] → 151,560 ops/sec [149,518..153,114] 🔴 -6.9% 249,263 ops/sec [245,436..251,252] → 226,475 ops/sec [224,722..227,771] 🔴 -9.1%
slice empty range 188,814 ops/sec [185,783..190,881] → 175,227 ops/sec [156,863..178,861] 🔴 -7.2% 259,034 ops/sec [256,118..261,304] → 234,421 ops/sec [233,178..235,802] 🔴 -9.5%
byteLength access 425,931 ops/sec [422,416..438,895] → 399,519 ops/sec [394,711..408,002] 🔴 -6.2% 541,251 ops/sec [535,311..544,646] → 484,931 ops/sec [482,923..486,709] 🔴 -10.4%
Symbol.toStringTag access 349,508 ops/sec [341,705..352,520] → 331,229 ops/sec [330,493..332,416] 🔴 -5.2% 387,224 ops/sec [386,429..388,364] → 342,772 ops/sec [342,287..343,386] 🔴 -11.5%
ArrayBuffer.isView 256,230 ops/sec [252,414..262,135] → 240,069 ops/sec [237,414..241,740] 🔴 -6.3% 347,403 ops/sec [345,727..348,518] → 307,361 ops/sec [306,628..307,935] 🔴 -11.5%
clone ArrayBuffer(64) 173,957 ops/sec [173,112..175,327] → 164,623 ops/sec [162,739..167,701] 🔴 -5.4% 238,537 ops/sec [237,868..239,465] → 210,380 ops/sec [209,159..211,903] 🔴 -11.8%
clone ArrayBuffer(1024) 148,631 ops/sec [146,795..150,059] → 144,149 ops/sec [138,974..146,265] 🔴 -3.0% 190,196 ops/sec [189,559..191,945] → 175,610 ops/sec [174,210..176,955] 🔴 -7.7%
clone ArrayBuffer inside object 122,320 ops/sec [122,228..122,331] → 115,903 ops/sec [114,407..118,046] 🔴 -5.2% 154,082 ops/sec [148,522..158,272] → 139,630 ops/sec [138,633..140,212] 🔴 -9.4%
arrays.js — Interp: 🟢 10, 9 unch. · avg +5.3% · Bytecode: 🔴 19 · avg -9.9%
Benchmark Interpreted Δ Bytecode Δ
Array.from length 100 3,804 ops/sec [3,154..3,832] → 3,898 ops/sec [3,784..3,933] ~ overlap (+2.5%) 7,104 ops/sec [6,404..7,333] → 6,345 ops/sec [6,291..6,380] 🔴 -10.7%
Array.from 10 elements 88,998 ops/sec [87,995..90,059] → 88,784 ops/sec [88,375..89,679] ~ overlap (-0.2%) 103,731 ops/sec [102,331..104,101] → 93,403 ops/sec [84,555..98,876] 🔴 -10.0%
Array.of 10 elements 106,579 ops/sec [105,807..107,872] → 108,843 ops/sec [107,475..110,098] ~ overlap (+2.1%) 134,744 ops/sec [133,424..135,537] → 121,439 ops/sec [120,032..122,551] 🔴 -9.9%
spread into new array 133,448 ops/sec [128,043..134,667] → 135,287 ops/sec [134,200..136,850] ~ overlap (+1.4%) 83,149 ops/sec [76,498..84,211] → 73,916 ops/sec [72,471..75,749] 🔴 -11.1%
map over 50 elements 6,478 ops/sec [6,190..6,535] → 6,965 ops/sec [6,422..7,069] ~ overlap (+7.5%) 12,926 ops/sec [12,697..13,284] → 11,620 ops/sec [11,555..11,715] 🔴 -10.1%
filter over 50 elements 6,272 ops/sec [6,233..6,325] → 6,908 ops/sec [6,816..7,029] 🟢 +10.1% 12,347 ops/sec [12,090..12,426] → 11,403 ops/sec [11,254..11,633] 🔴 -7.6%
reduce sum 50 elements 6,723 ops/sec [6,656..6,842] → 7,528 ops/sec [7,440..7,552] 🟢 +12.0% 12,259 ops/sec [12,149..12,289] → 11,117 ops/sec [11,057..11,222] 🔴 -9.3%
forEach over 50 elements 6,076 ops/sec [6,006..6,173] → 6,615 ops/sec [6,385..6,677] 🟢 +8.9% 13,361 ops/sec [13,250..13,511] → 12,261 ops/sec [11,921..12,372] 🔴 -8.2%
find in 50 elements 8,759 ops/sec [8,671..8,807] → 9,691 ops/sec [9,684..9,781] 🟢 +10.6% 18,476 ops/sec [18,393..18,556] → 17,032 ops/sec [16,988..17,091] 🔴 -7.8%
sort 20 elements 3,387 ops/sec [3,321..3,414] → 3,670 ops/sec [3,648..3,694] 🟢 +8.4% 7,171 ops/sec [6,996..7,196] → 6,580 ops/sec [6,574..6,589] 🔴 -8.2%
flat nested array 46,551 ops/sec [45,942..46,993] → 48,310 ops/sec [47,966..48,803] 🟢 +3.8% 54,602 ops/sec [54,210..54,945] → 49,159 ops/sec [49,005..49,222] 🔴 -10.0%
flatMap 26,229 ops/sec [26,015..26,326] → 27,296 ops/sec [27,171..27,623] 🟢 +4.1% 35,660 ops/sec [35,384..36,027] → 32,421 ops/sec [32,279..33,116] 🔴 -9.1%
map inside map (5x5) 6,806 ops/sec [6,685..7,052] → 7,311 ops/sec [7,226..7,420] 🟢 +7.4% 10,672 ops/sec [10,574..11,303] → 9,589 ops/sec [9,409..9,715] 🔴 -10.1%
filter inside map (5x10) 4,849 ops/sec [4,756..4,999] → 5,249 ops/sec [5,195..5,269] 🟢 +8.2% 8,632 ops/sec [8,333..8,729] → 7,852 ops/sec [7,728..7,923] 🔴 -9.0%
reduce inside map (5x10) 5,505 ops/sec [5,373..5,561] → 5,604 ops/sec [5,558..5,631] ~ overlap (+1.8%) 9,947 ops/sec [9,471..10,090] → 8,642 ops/sec [8,552..8,712] 🔴 -13.1%
forEach inside forEach (5x10) 4,863 ops/sec [4,759..4,919] → 4,994 ops/sec [4,866..5,006] ~ overlap (+2.7%) 10,608 ops/sec [10,456..11,241] → 9,368 ops/sec [9,352..9,390] 🔴 -11.7%
find inside some (10x10) 3,901 ops/sec [3,856..3,963] → 4,114 ops/sec [4,084..4,149] 🟢 +5.5% 7,987 ops/sec [7,915..8,011] → 6,892 ops/sec [6,864..6,991] 🔴 -13.7%
map+filter chain nested (5x20) 1,468 ops/sec [1,447..1,497] → 1,496 ops/sec [1,470..1,527] ~ overlap (+1.9%) 2,868 ops/sec [2,826..2,908] → 2,569 ops/sec [2,531..2,590] 🔴 -10.4%
reduce flatten (10x5) 15,506 ops/sec [15,365..15,739] → 15,799 ops/sec [15,691..16,188] ~ overlap (+1.9%) 7,642 ops/sec [7,596..7,680] → 7,052 ops/sec [7,035..7,068] 🔴 -7.7%
async-await.js — Interp: 6 unch. · avg +1.2% · Bytecode: 🔴 4, 2 unch. · avg -10.4%
Benchmark Interpreted Δ Bytecode Δ
single await 137,240 ops/sec [91,470..142,308] → 141,199 ops/sec [104,553..143,473] ~ overlap (+2.9%) 167,068 ops/sec [120,886..171,207] → 152,010 ops/sec [103,143..155,258] ~ overlap (-9.0%)
multiple awaits 67,573 ops/sec [66,138..68,532] → 68,232 ops/sec [67,478..70,026] ~ overlap (+1.0%) 74,063 ops/sec [73,197..74,851] → 65,774 ops/sec [57,252..66,096] 🔴 -11.2%
await non-Promise value 269,477 ops/sec [264,283..273,959] → 275,540 ops/sec [270,292..278,956] ~ overlap (+2.3%) 439,635 ops/sec [422,592..450,687] → 395,623 ops/sec [389,888..400,956] 🔴 -10.0%
await with try/catch 115,528 ops/sec [113,256..117,279] → 117,055 ops/sec [116,768..117,965] ~ overlap (+1.3%) 159,777 ops/sec [154,478..164,672] → 144,673 ops/sec [141,381..148,048] 🔴 -9.5%
await Promise.all 22,734 ops/sec [21,899..23,247] → 22,861 ops/sec [22,368..23,182] ~ overlap (+0.6%) 23,595 ops/sec [18,448..24,747] → 21,092 ops/sec [20,468..21,757] ~ overlap (-10.6%)
nested async function call 74,768 ops/sec [72,358..75,329] → 74,392 ops/sec [73,757..75,401] ~ overlap (-0.5%) 104,366 ops/sec [103,704..105,332] → 91,816 ops/sec [89,922..99,426] 🔴 -12.0%
async-generators.js — Interp: 2 unch. · avg +0.3% · Bytecode: 🔴 1, 1 unch. · avg -10.8%
Benchmark Interpreted Δ Bytecode Δ
for-await-of over async generator 2,340 ops/sec [1,622..2,385] → 2,332 ops/sec [2,106..2,356] ~ overlap (-0.4%) 2,978 ops/sec [2,183..2,989] → 2,590 ops/sec [2,514..2,604] ~ overlap (-13.0%)
async generator with await in body 20,439 ops/sec [20,288..20,760] → 20,616 ops/sec [20,333..21,132] ~ overlap (+0.9%) 24,609 ops/sec [24,222..25,125] → 22,516 ops/sec [22,260..22,757] 🔴 -8.5%
base64.js — Interp: 🟢 1, 9 unch. · avg +0.6% · Bytecode: 🟢 7, 🔴 3 · avg +0.9%
Benchmark Interpreted Δ Bytecode Δ
short ASCII (13 chars) 3,559 ops/sec [3,477..3,674] → 3,673 ops/sec [3,605..3,762] ~ overlap (+3.2%) 4,112 ops/sec [4,001..4,130] → 3,691 ops/sec [3,620..3,727] 🔴 -10.3%
medium ASCII (450 chars) 139 ops/sec [136..143] → 136 ops/sec [131..139] ~ overlap (-2.5%) 153 ops/sec [152..154] → 135 ops/sec [134..136] 🔴 -11.6%
Latin-1 characters 5,347 ops/sec [5,213..5,462] → 5,396 ops/sec [5,325..5,401] ~ overlap (+0.9%) 5,996 ops/sec [5,813..6,116] → 5,295 ops/sec [5,272..5,316] 🔴 -11.7%
short base64 (20 chars) 721 ops/sec [717..729] → 722 ops/sec [718..729] ~ overlap (+0.1%) 666 ops/sec [664..677] → 710 ops/sec [707..713] 🟢 +6.5%
medium base64 (600 chars) 26 ops/sec [26..27] → 26 ops/sec [26..27] ~ overlap (-0.0%) 24 ops/sec [24..24] → 26 ops/sec [26..26] 🟢 +8.3%
Latin-1 output 1,106 ops/sec [1,104..1,110] → 1,124 ops/sec [1,120..1,128] 🟢 +1.6% 1,041 ops/sec [1,030..1,054] → 1,106 ops/sec [1,101..1,114] 🟢 +6.3%
forgiving (no padding) 1,748 ops/sec [1,731..1,772] → 1,772 ops/sec [1,747..1,785] ~ overlap (+1.4%) 1,636 ops/sec [1,633..1,639] → 1,722 ops/sec [1,718..1,728] 🟢 +5.2%
with whitespace 673 ops/sec [667..679] → 682 ops/sec [678..689] ~ overlap (+1.3%) 639 ops/sec [613..652] → 674 ops/sec [660..678] 🟢 +5.5%
atob(btoa(short)) 604 ops/sec [600..609] → 602 ops/sec [597..610] ~ overlap (-0.4%) 574 ops/sec [559..585] → 607 ops/sec [602..609] 🟢 +5.7%
atob(btoa(medium)) 22 ops/sec [22..22] → 22 ops/sec [22..22] ~ overlap (-0.1%) 21 ops/sec [21..21] → 22 ops/sec [22..22] 🟢 +4.8%
classes.js — Interp: 🟢 1, 30 unch. · avg -0.4% · Bytecode: 🔴 22, 9 unch. · avg -6.4%
Benchmark Interpreted Δ Bytecode Δ
simple class new 53,846 ops/sec [53,687..54,088] → 53,126 ops/sec [52,260..54,578] ~ overlap (-1.3%) 76,504 ops/sec [75,467..77,019] → 73,754 ops/sec [73,203..74,524] 🔴 -3.6%
class with defaults 43,176 ops/sec [42,726..43,474] → 43,304 ops/sec [41,508..43,529] ~ overlap (+0.3%) 57,981 ops/sec [53,066..58,801] → 52,636 ops/sec [51,580..52,743] 🔴 -9.2%
50 instances via Array.from 1,962 ops/sec [1,944..1,988] → 1,975 ops/sec [1,954..1,986] ~ overlap (+0.6%) 3,201 ops/sec [3,195..3,253] → 2,789 ops/sec [2,779..2,800] 🔴 -12.9%
instance method call 25,940 ops/sec [25,838..26,003] → 25,906 ops/sec [25,692..26,303] ~ overlap (-0.1%) 41,406 ops/sec [41,131..41,890] → 36,396 ops/sec [35,395..36,777] 🔴 -12.1%
static method call 41,702 ops/sec [41,490..41,737] → 41,005 ops/sec [40,697..41,652] ~ overlap (-1.7%) 84,859 ops/sec [81,924..85,915] → 74,459 ops/sec [73,571..75,334] 🔴 -12.3%
single-level inheritance 21,715 ops/sec [21,237..21,938] → 21,603 ops/sec [21,369..21,796] ~ overlap (-0.5%) 30,390 ops/sec [29,606..30,720] → 27,192 ops/sec [26,921..27,286] 🔴 -10.5%
two-level inheritance 19,080 ops/sec [18,917..19,282] → 18,795 ops/sec [18,418..19,132] ~ overlap (-1.5%) 24,251 ops/sec [23,711..24,421] → 21,879 ops/sec [21,521..22,097] 🔴 -9.8%
private field access 28,832 ops/sec [28,725..29,076] → 29,021 ops/sec [28,898..29,065] ~ overlap (+0.7%) 28,527 ops/sec [28,188..28,743] → 25,489 ops/sec [25,230..25,970] 🔴 -10.7%
private methods 31,754 ops/sec [31,304..32,201] → 31,634 ops/sec [31,056..31,859] ~ overlap (-0.4%) 31,052 ops/sec [30,634..31,591] → 29,327 ops/sec [28,981..29,739] 🔴 -5.6%
getter/setter access 29,448 ops/sec [28,886..29,630] → 29,328 ops/sec [28,513..29,521] ~ overlap (-0.4%) 42,089 ops/sec [41,429..43,293] → 39,876 ops/sec [39,392..40,544] 🔴 -5.3%
class decorator (identity) 39,987 ops/sec [39,625..40,582] → 40,129 ops/sec [39,860..40,367] ~ overlap (+0.4%) 46,625 ops/sec [46,125..47,050] → 45,589 ops/sec [44,951..45,932] 🔴 -2.2%
class decorator (wrapping) 23,170 ops/sec [22,571..23,595] → 22,741 ops/sec [22,048..23,518] ~ overlap (-1.9%) 25,152 ops/sec [24,815..25,480] → 23,342 ops/sec [23,011..23,694] 🔴 -7.2%
identity method decorator 28,957 ops/sec [28,249..29,243] → 29,206 ops/sec [28,813..29,470] ~ overlap (+0.9%) 39,691 ops/sec [38,859..41,656] → 37,412 ops/sec [35,838..38,456] 🔴 -5.7%
wrapping method decorator 23,534 ops/sec [23,091..23,646] → 23,410 ops/sec [23,125..23,809] ~ overlap (-0.5%) 29,290 ops/sec [28,057..30,861] → 28,066 ops/sec [27,187..28,329] ~ overlap (-4.2%)
stacked method decorators (x3) 16,553 ops/sec [16,290..16,834] → 16,493 ops/sec [16,368..16,971] ~ overlap (-0.4%) 20,874 ops/sec [20,628..21,352] → 19,671 ops/sec [19,483..20,181] 🔴 -5.8%
identity field decorator 33,753 ops/sec [33,257..33,884] → 33,077 ops/sec [32,209..33,420] ~ overlap (-2.0%) 37,114 ops/sec [34,761..37,660] → 35,412 ops/sec [34,192..35,965] ~ overlap (-4.6%)
field initializer decorator 28,027 ops/sec [27,549..28,341] → 27,686 ops/sec [27,379..28,192] ~ overlap (-1.2%) 32,973 ops/sec [32,035..34,184] → 30,577 ops/sec [30,087..31,168] 🔴 -7.3%
getter decorator (identity) 29,978 ops/sec [29,408..30,444] → 29,033 ops/sec [27,616..30,291] ~ overlap (-3.2%) 32,679 ops/sec [31,378..33,327] → 29,788 ops/sec [29,345..30,079] 🔴 -8.8%
setter decorator (identity) 24,367 ops/sec [24,088..24,533] → 24,158 ops/sec [24,024..24,501] ~ overlap (-0.9%) 24,981 ops/sec [24,727..25,031] → 23,392 ops/sec [23,227..23,450] 🔴 -6.4%
static method decorator 31,123 ops/sec [30,640..31,294] → 30,791 ops/sec [30,648..30,876] ~ overlap (-1.1%) 43,664 ops/sec [42,292..45,339] → 38,967 ops/sec [37,688..39,548] 🔴 -10.8%
static field decorator 37,697 ops/sec [37,213..38,505] → 37,985 ops/sec [37,420..39,512] ~ overlap (+0.8%) 42,367 ops/sec [41,330..44,509] → 41,080 ops/sec [39,602..42,276] ~ overlap (-3.0%)
private method decorator 24,365 ops/sec [23,854..24,611] → 24,472 ops/sec [24,095..24,772] ~ overlap (+0.4%) 30,757 ops/sec [29,872..31,335] → 28,573 ops/sec [28,234..29,384] 🔴 -7.1%
private field decorator 27,145 ops/sec [26,680..27,662] → 27,335 ops/sec [26,855..27,480] ~ overlap (+0.7%) 26,883 ops/sec [26,544..27,079] → 25,971 ops/sec [25,649..26,628] ~ overlap (-3.4%)
plain auto-accessor (no decorator) 45,246 ops/sec [43,699..46,906] → 46,075 ops/sec [45,079..47,953] ~ overlap (+1.8%) 43,296 ops/sec [42,010..44,533] → 41,743 ops/sec [40,623..43,355] ~ overlap (-3.6%)
auto-accessor with decorator 26,182 ops/sec [25,774..27,563] → 25,978 ops/sec [25,659..27,372] ~ overlap (-0.8%) 27,704 ops/sec [27,106..28,134] → 26,299 ops/sec [25,997..26,970] 🔴 -5.1%
decorator writing metadata 20,737 ops/sec [20,557..21,345] → 20,834 ops/sec [20,286..21,490] ~ overlap (+0.5%) 25,054 ops/sec [24,032..25,186] → 23,604 ops/sec [23,448..24,267] ~ overlap (-5.8%)
static getter read 53,238 ops/sec [52,759..53,534] → 54,176 ops/sec [53,925..54,240] 🟢 +1.8% 73,877 ops/sec [71,178..74,926] → 70,561 ops/sec [68,803..71,596] ~ overlap (-4.5%)
static getter/setter pair 38,988 ops/sec [38,485..39,736] → 38,549 ops/sec [37,325..39,362] ~ overlap (-1.1%) 53,026 ops/sec [52,206..56,133] → 50,481 ops/sec [50,034..50,587] 🔴 -4.8%
inherited static getter 32,110 ops/sec [31,494..32,346] → 31,860 ops/sec [31,473..31,906] ~ overlap (-0.8%) 40,738 ops/sec [39,640..41,643] → 39,015 ops/sec [38,335..39,063] 🔴 -4.2%
inherited static setter 35,408 ops/sec [35,056..35,650] → 35,300 ops/sec [34,471..35,490] ~ overlap (-0.3%) 41,722 ops/sec [41,254..42,196] → 41,753 ops/sec [40,603..42,099] ~ overlap (+0.1%)
inherited static getter with this binding 28,473 ops/sec [28,089..28,526] → 28,146 ops/sec [28,056..28,295] ~ overlap (-1.1%) 35,520 ops/sec [34,427..36,057] → 34,474 ops/sec [34,097..34,647] ~ overlap (-2.9%)
closures.js — Interp: 🔴 5, 6 unch. · avg -3.0% · Bytecode: 🔴 11 · avg -12.3%
Benchmark Interpreted Δ Bytecode Δ
closure over single variable 46,600 ops/sec [45,563..47,098] → 43,152 ops/sec [42,592..43,936] 🔴 -7.4% 179,604 ops/sec [176,669..180,623] → 150,241 ops/sec [148,517..153,355] 🔴 -16.3%
closure over multiple variables 46,758 ops/sec [46,561..47,233] → 44,254 ops/sec [43,122..44,480] 🔴 -5.4% 158,459 ops/sec [155,678..160,066] → 132,702 ops/sec [131,767..134,155] 🔴 -16.3%
nested closures 51,445 ops/sec [49,571..52,450] → 48,913 ops/sec [48,335..49,367] 🔴 -4.9% 146,723 ops/sec [144,214..150,328] → 133,116 ops/sec [128,641..135,243] 🔴 -9.3%
function as argument 33,643 ops/sec [33,375..34,295] → 32,991 ops/sec [32,398..33,323] 🔴 -1.9% 160,562 ops/sec [157,522..164,291] → 139,998 ops/sec [139,589..141,027] 🔴 -12.8%
function returning function 44,562 ops/sec [44,358..44,796] → 42,170 ops/sec [41,568..44,385] ~ overlap (-5.4%) 176,029 ops/sec [172,145..181,183] → 153,483 ops/sec [148,801..154,694] 🔴 -12.8%
compose two functions 26,930 ops/sec [26,696..27,568] → 26,268 ops/sec [25,725..26,895] ~ overlap (-2.5%) 102,114 ops/sec [101,820..102,427] → 89,239 ops/sec [88,495..90,057] 🔴 -12.6%
fn.call 59,355 ops/sec [58,723..60,230] → 58,593 ops/sec [57,677..59,860] ~ overlap (-1.3%) 99,454 ops/sec [97,841..102,888] → 89,783 ops/sec [87,255..92,118] 🔴 -9.7%
fn.apply 45,936 ops/sec [45,501..46,415] → 46,051 ops/sec [43,842..46,954] ~ overlap (+0.2%) 99,227 ops/sec [97,524..100,564] → 89,057 ops/sec [88,297..92,235] 🔴 -10.2%
fn.bind 55,822 ops/sec [54,817..56,454] → 56,136 ops/sec [54,645..56,623] ~ overlap (+0.6%) 182,238 ops/sec [172,999..186,118] → 161,232 ops/sec [157,479..165,046] 🔴 -11.5%
recursive sum to 50 3,828 ops/sec [3,769..3,846] → 3,713 ops/sec [3,649..3,742] 🔴 -3.0% 21,650 ops/sec [21,639..21,684] → 19,340 ops/sec [18,529..19,755] 🔴 -10.7%
recursive tree traversal 7,265 ops/sec [7,174..7,312] → 7,139 ops/sec [7,089..7,184] ~ overlap (-1.7%) 21,193 ops/sec [21,067..21,630] → 18,522 ops/sec [17,974..18,808] 🔴 -12.6%
collections.js — Interp: 🟢 1, 11 unch. · avg +0.5% · Bytecode: 🔴 12 · avg -9.9%
Benchmark Interpreted Δ Bytecode Δ
add 50 elements 2,978 ops/sec [2,937..2,998] → 3,013 ops/sec [2,994..3,030] ~ overlap (+1.2%) 3,900 ops/sec [3,874..3,919] → 3,421 ops/sec [3,352..3,513] 🔴 -12.3%
has lookup (50 elements) 43,928 ops/sec [43,554..44,174] → 44,629 ops/sec [44,333..44,785] 🟢 +1.6% 54,649 ops/sec [54,401..54,673] → 49,446 ops/sec [49,361..49,568] 🔴 -9.5%
delete elements 23,766 ops/sec [23,532..23,988] → 24,329 ops/sec [23,881..24,673] ~ overlap (+2.4%) 28,680 ops/sec [28,517..28,769] → 25,546 ops/sec [24,788..25,763] 🔴 -10.9%
forEach iteration 5,156 ops/sec [5,133..5,214] → 5,237 ops/sec [5,182..5,324] ~ overlap (+1.6%) 10,355 ops/sec [10,142..10,471] → 9,225 ops/sec [9,124..9,271] 🔴 -10.9%
spread to array 15,994 ops/sec [15,853..16,298] → 16,459 ops/sec [15,935..17,069] ~ overlap (+2.9%) 113,343 ops/sec [111,455..115,625] → 105,756 ops/sec [104,568..106,518] 🔴 -6.7%
deduplicate array 20,904 ops/sec [20,581..21,331] → 21,148 ops/sec [20,376..21,942] ~ overlap (+1.2%) 39,250 ops/sec [38,236..39,703] → 35,091 ops/sec [34,957..35,352] 🔴 -10.6%
set 50 entries 2,235 ops/sec [2,200..2,251] → 2,206 ops/sec [2,175..2,259] ~ overlap (-1.3%) 3,001 ops/sec [2,935..3,025] → 2,645 ops/sec [2,431..2,726] 🔴 -11.9%
get lookup (50 entries) 43,753 ops/sec [42,133..44,634] → 43,294 ops/sec [42,894..43,544] ~ overlap (-1.1%) 49,629 ops/sec [49,350..50,073] → 44,391 ops/sec [42,888..47,124] 🔴 -10.6%
has check 63,445 ops/sec [61,927..64,269] → 61,984 ops/sec [61,492..63,145] ~ overlap (-2.3%) 73,196 ops/sec [72,752..73,571] → 65,930 ops/sec [64,905..68,468] 🔴 -9.9%
delete entries 23,654 ops/sec [23,157..24,133] → 23,435 ops/sec [23,329..23,616] ~ overlap (-0.9%) 26,352 ops/sec [26,325..26,385] → 24,143 ops/sec [23,716..24,378] 🔴 -8.4%
forEach iteration 5,177 ops/sec [5,045..5,237] → 5,181 ops/sec [5,085..5,223] ~ overlap (+0.1%) 10,304 ops/sec [10,272..10,329] → 9,448 ops/sec [9,396..9,480] 🔴 -8.3%
keys/values/entries 4,464 ops/sec [4,308..4,551] → 4,495 ops/sec [4,414..4,573] ~ overlap (+0.7%) 15,308 ops/sec [15,140..15,529] → 13,956 ops/sec [13,236..14,113] 🔴 -8.8%
csv.js — Interp: 13 unch. · avg -0.1% · Bytecode: 🔴 13 · avg -11.0%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column CSV 47,431 ops/sec [46,383..47,863] → 47,670 ops/sec [46,880..48,002] ~ overlap (+0.5%) 55,096 ops/sec [54,439..55,432] → 49,304 ops/sec [48,480..50,663] 🔴 -10.5%
parse 10-row CSV 13,522 ops/sec [13,453..13,976] → 13,802 ops/sec [13,453..13,846] ~ overlap (+2.1%) 15,930 ops/sec [15,499..15,977] → 13,794 ops/sec [13,619..13,830] 🔴 -13.4%
parse 100-row CSV 2,090 ops/sec [2,053..2,129] → 2,136 ops/sec [2,054..2,172] ~ overlap (+2.2%) 2,378 ops/sec [2,326..2,394] → 2,124 ops/sec [2,101..2,142] 🔴 -10.7%
parse CSV with quoted fields 69,894 ops/sec [68,803..71,210] → 69,998 ops/sec [68,838..72,377] ~ overlap (+0.1%) 80,217 ops/sec [78,009..84,147] → 72,725 ops/sec [71,642..73,109] 🔴 -9.3%
parse without headers (array of arrays) 5,665 ops/sec [5,647..5,739] → 5,532 ops/sec [5,443..5,714] ~ overlap (-2.3%) 6,584 ops/sec [6,269..6,922] → 5,834 ops/sec [5,606..5,948] 🔴 -11.4%
parse with semicolon delimiter 9,650 ops/sec [9,438..9,686] → 9,566 ops/sec [9,515..9,615] ~ overlap (-0.9%) 11,300 ops/sec [10,750..11,351] → 9,903 ops/sec [9,807..10,075] 🔴 -12.4%
stringify array of objects 67,141 ops/sec [66,427..68,059] → 66,758 ops/sec [66,638..68,819] ~ overlap (-0.6%) 79,287 ops/sec [77,647..83,377] → 70,480 ops/sec [69,716..71,001] 🔴 -11.1%
stringify array of arrays 24,323 ops/sec [24,044..24,767] → 24,706 ops/sec [24,497..25,012] ~ overlap (+1.6%) 28,531 ops/sec [28,189..28,781] → 25,386 ops/sec [25,257..25,628] 🔴 -11.0%
stringify with values needing escaping 49,708 ops/sec [49,119..50,292] → 50,080 ops/sec [49,813..50,147] ~ overlap (+0.7%) 61,312 ops/sec [59,791..63,706] → 52,457 ops/sec [52,056..52,635] 🔴 -14.4%
reviver converts numbers 1,314 ops/sec [1,308..1,337] → 1,319 ops/sec [1,265..1,341] ~ overlap (+0.3%) 1,661 ops/sec [1,595..1,683] → 1,457 ops/sec [1,446..1,484] 🔴 -12.3%
reviver filters empty to null 10,539 ops/sec [10,472..10,560] → 10,562 ops/sec [10,437..10,754] ~ overlap (+0.2%) 14,254 ops/sec [13,815..14,922] → 13,159 ops/sec [12,789..13,327] 🔴 -7.7%
parse then stringify 8,593 ops/sec [8,495..8,636] → 8,468 ops/sec [8,406..8,503] ~ overlap (-1.5%) 9,588 ops/sec [9,424..9,708] → 8,706 ops/sec [8,657..8,732] 🔴 -9.2%
stringify then parse 8,455 ops/sec [8,233..8,463] → 8,182 ops/sec [8,131..8,501] ~ overlap (-3.2%) 9,305 ops/sec [8,860..9,627] → 8,421 ops/sec [8,236..8,546] 🔴 -9.5%
destructuring.js — Interp: 🟢 2, 🔴 1, 19 unch. · avg -0.6% · Bytecode: 🔴 20, 2 unch. · avg -10.2%
Benchmark Interpreted Δ Bytecode Δ
simple array destructuring 166,771 ops/sec [164,483..168,131] → 164,910 ops/sec [156,817..169,484] ~ overlap (-1.1%) 125,190 ops/sec [124,827..126,601] → 114,137 ops/sec [112,160..115,143] 🔴 -8.8%
with rest element 112,001 ops/sec [111,181..112,875] → 111,594 ops/sec [109,010..114,979] ~ overlap (-0.4%) 95,345 ops/sec [94,636..95,973] → 84,826 ops/sec [83,319..85,245] 🔴 -11.0%
with defaults 162,398 ops/sec [158,608..166,196] → 162,031 ops/sec [159,253..166,245] ~ overlap (-0.2%) 132,275 ops/sec [131,057..132,980] → 118,136 ops/sec [116,938..120,523] 🔴 -10.7%
skip elements 173,142 ops/sec [161,403..181,059] → 171,983 ops/sec [167,512..175,167] ~ overlap (-0.7%) 135,305 ops/sec [134,876..136,144] → 118,292 ops/sec [115,833..121,225] 🔴 -12.6%
nested array destructuring 84,086 ops/sec [80,872..85,732] → 81,621 ops/sec [78,550..82,480] ~ overlap (-2.9%) 46,535 ops/sec [45,461..47,699] → 40,279 ops/sec [38,938..41,131] 🔴 -13.4%
swap variables 199,327 ops/sec [194,771..201,144] → 197,162 ops/sec [192,187..201,497] ~ overlap (-1.1%) 169,744 ops/sec [169,445..170,595] → 151,386 ops/sec [146,688..154,288] 🔴 -10.8%
simple object destructuring 136,603 ops/sec [132,866..140,164] → 138,829 ops/sec [135,891..140,333] ~ overlap (+1.6%) 179,472 ops/sec [150,398..181,891] → 154,569 ops/sec [153,376..162,745] ~ overlap (-13.9%)
with defaults 150,446 ops/sec [148,192..151,746] → 151,222 ops/sec [149,394..151,734] ~ overlap (+0.5%) 226,658 ops/sec [225,079..228,172] → 196,774 ops/sec [193,120..208,446] 🔴 -13.2%
with renaming 148,621 ops/sec [147,737..151,677] → 146,261 ops/sec [140,027..147,880] ~ overlap (-1.6%) 167,364 ops/sec [165,447..171,691] → 152,361 ops/sec [148,951..154,022] 🔴 -9.0%
nested object destructuring 75,301 ops/sec [74,301..77,104] → 73,585 ops/sec [71,778..76,341] ~ overlap (-2.3%) 86,138 ops/sec [85,113..86,774] → 80,465 ops/sec [78,873..81,397] 🔴 -6.6%
rest properties 56,605 ops/sec [56,177..57,709] → 55,941 ops/sec [54,365..57,816] ~ overlap (-1.2%) 81,316 ops/sec [80,035..82,454] → 74,685 ops/sec [72,977..76,124] 🔴 -8.2%
object parameter 40,892 ops/sec [40,133..41,215] → 41,643 ops/sec [41,338..42,009] 🟢 +1.8% 71,842 ops/sec [71,090..73,024] → 65,197 ops/sec [62,993..65,586] 🔴 -9.2%
array parameter 50,614 ops/sec [50,569..50,626] → 51,719 ops/sec [51,329..52,336] 🟢 +2.2% 63,951 ops/sec [63,278..65,510] → 57,794 ops/sec [56,831..58,391] 🔴 -9.6%
mixed destructuring in map 11,165 ops/sec [10,822..11,372] → 11,456 ops/sec [11,146..11,508] ~ overlap (+2.6%) 18,771 ops/sec [17,810..18,888] → 17,134 ops/sec [16,725..17,739] 🔴 -8.7%
forEach with array destructuring 25,354 ops/sec [25,184..25,729] → 25,173 ops/sec [24,659..26,070] ~ overlap (-0.7%) 24,515 ops/sec [24,164..24,818] → 22,295 ops/sec [22,072..22,354] 🔴 -9.1%
map with array destructuring 26,764 ops/sec [26,612..27,083] → 26,427 ops/sec [25,815..26,726] ~ overlap (-1.3%) 22,339 ops/sec [22,051..22,505] → 20,494 ops/sec [20,296..21,469] 🔴 -8.3%
filter with array destructuring 26,865 ops/sec [26,365..27,394] → 26,556 ops/sec [25,466..26,825] ~ overlap (-1.2%) 24,313 ops/sec [24,203..24,435] → 22,341 ops/sec [21,826..22,540] 🔴 -8.1%
reduce with array destructuring 29,524 ops/sec [29,285..30,237] → 29,369 ops/sec [29,288..29,539] ~ overlap (-0.5%) 24,611 ops/sec [23,138..25,076] → 22,947 ops/sec [22,413..23,575] ~ overlap (-6.8%)
map with object destructuring 26,020 ops/sec [25,415..26,208] → 25,811 ops/sec [25,489..26,625] ~ overlap (-0.8%) 41,703 ops/sec [41,155..42,424] → 36,774 ops/sec [36,193..37,472] 🔴 -11.8%
map with nested destructuring 22,402 ops/sec [22,070..22,640] → 22,031 ops/sec [21,854..22,238] ~ overlap (-1.7%) 38,300 ops/sec [37,327..38,781] → 33,720 ops/sec [33,625..33,907] 🔴 -12.0%
map with rest in destructuring 16,963 ops/sec [16,788..17,033] → 16,478 ops/sec [16,435..16,608] 🔴 -2.9% 12,380 ops/sec [12,235..12,647] → 11,081 ops/sec [10,968..11,325] 🔴 -10.5%
map with defaults in destructuring 20,612 ops/sec [20,520..20,658] → 20,490 ops/sec [20,189..20,706] ~ overlap (-0.6%) 30,590 ops/sec [30,112..30,926] → 26,709 ops/sec [26,212..26,928] 🔴 -12.7%
fibonacci.js — Interp: 🔴 2, 6 unch. · avg -0.9% · Bytecode: 🔴 8 · avg -11.0%
Benchmark Interpreted Δ Bytecode Δ
recursive fib(15) 106 ops/sec [104..107] → 103 ops/sec [101..104] 🔴 -2.7% 606 ops/sec [597..614] → 536 ops/sec [526..550] 🔴 -11.6%
recursive fib(20) 9 ops/sec [9..9] → 9 ops/sec [9..9] ~ overlap (-0.5%) 55 ops/sec [55..55] → 49 ops/sec [48..49] 🔴 -11.2%
recursive fib(15) typed 106 ops/sec [101..108] → 105 ops/sec [102..106] ~ overlap (-1.0%) 617 ops/sec [611..623] → 559 ops/sec [534..568] 🔴 -9.4%
recursive fib(20) typed 9 ops/sec [9..9] → 9 ops/sec [9..9] ~ overlap (-1.1%) 55 ops/sec [55..56] → 49 ops/sec [49..50] 🔴 -10.9%
iterative fib(20) via reduce 4,654 ops/sec [4,621..4,683] → 4,714 ops/sec [4,666..4,765] ~ overlap (+1.3%) 10,188 ops/sec [9,899..10,367] → 9,042 ops/sec [8,803..9,141] 🔴 -11.2%
iterator fib(20) 3,649 ops/sec [3,627..3,724] → 3,585 ops/sec [3,555..3,659] ~ overlap (-1.8%) 6,898 ops/sec [6,861..6,928] → 6,006 ops/sec [5,959..6,068] 🔴 -12.9%
iterator fib(20) via Iterator.from + take 4,786 ops/sec [4,771..4,835] → 4,790 ops/sec [4,710..4,868] ~ overlap (+0.1%) 7,706 ops/sec [7,534..7,910] → 6,863 ops/sec [6,803..6,873] 🔴 -10.9%
iterator fib(20) last value via reduce 3,738 ops/sec [3,714..3,743] → 3,686 ops/sec [3,640..3,693] 🔴 -1.4% 5,898 ops/sec [5,755..5,912] → 5,344 ops/sec [5,290..5,438] 🔴 -9.4%
float16array.js — Interp: 🟢 3, 🔴 2, 27 unch. · avg +0.2% · Bytecode: 🟢 4, 🔴 27, 1 unch. · avg -5.6%
Benchmark Interpreted Δ Bytecode Δ
new Float16Array(0) 117,492 ops/sec [115,852..120,078] → 116,147 ops/sec [115,429..117,142] ~ overlap (-1.1%) 144,544 ops/sec [141,267..150,574] → 135,138 ops/sec [133,397..135,401] 🔴 -6.5%
new Float16Array(100) 113,843 ops/sec [111,214..116,185] → 111,412 ops/sec [110,659..113,012] ~ overlap (-2.1%) 139,861 ops/sec [137,642..143,639] → 125,813 ops/sec [124,398..129,544] 🔴 -10.0%
new Float16Array(1000) 95,824 ops/sec [95,641..97,572] → 95,049 ops/sec [94,221..95,924] ~ overlap (-0.8%) 112,841 ops/sec [109,051..114,898] → 105,776 ops/sec [103,696..107,435] 🔴 -6.3%
Float16Array.from([...100]) 4,988 ops/sec [4,943..5,017] → 5,177 ops/sec [5,098..5,197] 🟢 +3.8% 5,374 ops/sec [5,197..5,526] → 4,992 ops/sec [4,928..5,086] 🔴 -7.1%
Float16Array.of(1.5, 2.5, 3.5, 4.5, 5.5) 129,917 ops/sec [128,517..131,798] → 127,286 ops/sec [125,560..128,802] ~ overlap (-2.0%) 113,317 ops/sec [112,348..114,019] → 105,153 ops/sec [102,823..107,358] 🔴 -7.2%
new Float16Array(float64Array) 81,735 ops/sec [80,469..84,824] → 79,820 ops/sec [77,928..82,166] ~ overlap (-2.3%) 96,796 ops/sec [95,893..97,640] → 89,264 ops/sec [88,320..90,178] 🔴 -7.8%
sequential write 100 elements 1,338 ops/sec [1,328..1,356] → 1,390 ops/sec [1,376..1,403] 🟢 +3.9% 4,598 ops/sec [4,432..4,635] → 4,116 ops/sec [4,058..4,183] 🔴 -10.5%
sequential read 100 elements 1,535 ops/sec [1,527..1,543] → 1,540 ops/sec [1,524..1,566] ~ overlap (+0.3%) 6,269 ops/sec [6,013..6,300] → 5,566 ops/sec [5,497..5,690] 🔴 -11.2%
write special values (NaN, Inf, -0) 62,599 ops/sec [62,210..63,879] → 62,229 ops/sec [61,596..63,598] ~ overlap (-0.6%) 139,263 ops/sec [136,149..141,724] → 117,979 ops/sec [115,508..121,296] 🔴 -15.3%
Float16Array write 1,364 ops/sec [1,333..1,375] → 1,382 ops/sec [1,353..1,386] ~ overlap (+1.3%) 4,658 ops/sec [4,511..4,756] → 4,139 ops/sec [4,118..4,150] 🔴 -11.1%
Float32Array write 1,372 ops/sec [1,356..1,377] → 1,370 ops/sec [1,359..1,380] ~ overlap (-0.1%) 4,736 ops/sec [4,627..4,824] → 4,162 ops/sec [4,053..4,241] 🔴 -12.1%
Float64Array write 1,351 ops/sec [1,331..1,379] → 1,371 ops/sec [1,346..1,384] ~ overlap (+1.5%) 4,712 ops/sec [4,554..4,752] → 4,150 ops/sec [4,051..4,187] 🔴 -11.9%
Float16Array read 1,505 ops/sec [1,477..1,519] → 1,463 ops/sec [1,441..1,471] 🔴 -2.8% 5,961 ops/sec [5,832..6,053] → 5,296 ops/sec [5,242..5,611] 🔴 -11.2%
Float32Array read 1,537 ops/sec [1,514..1,547] → 1,537 ops/sec [1,497..1,557] ~ overlap (+0.0%) 6,467 ops/sec [6,332..6,717] → 5,712 ops/sec [5,624..5,779] 🔴 -11.7%
Float64Array read 1,531 ops/sec [1,517..1,547] → 1,518 ops/sec [1,505..1,536] ~ overlap (-0.9%) 6,250 ops/sec [6,194..6,273] → 5,750 ops/sec [5,721..5,782] 🔴 -8.0%
fill(1.5) 21,659 ops/sec [21,302..22,703] → 22,295 ops/sec [22,160..22,346] ~ overlap (+2.9%) 24,422 ops/sec [24,314..24,500] → 22,504 ops/sec [22,135..22,845] 🔴 -7.9%
slice() 85,637 ops/sec [85,041..86,466] → 87,194 ops/sec [86,312..87,786] ~ overlap (+1.8%) 96,339 ops/sec [94,335..97,172] → 94,710 ops/sec [94,360..96,714] ~ overlap (-1.7%)
map(x => x * 2) 2,502 ops/sec [2,482..2,532] → 2,569 ops/sec [2,541..2,585] 🟢 +2.7% 3,889 ops/sec [3,832..3,912] → 3,643 ops/sec [3,535..3,772] 🔴 -6.3%
filter(x => x > 25) 2,558 ops/sec [2,540..2,578] → 2,577 ops/sec [2,556..2,628] ~ overlap (+0.7%) 4,582 ops/sec [4,453..4,762] → 4,128 ops/sec [4,057..4,237] 🔴 -9.9%
reduce (sum) 2,557 ops/sec [2,535..2,613] → 2,585 ops/sec [2,574..2,596] ~ overlap (+1.1%) 3,749 ops/sec [3,664..3,844] → 3,441 ops/sec [3,388..3,469] 🔴 -8.2%
sort() 20,778 ops/sec [20,628..20,884] → 20,870 ops/sec [20,773..21,156] ~ overlap (+0.4%) 18,225 ops/sec [17,820..18,660] → 21,412 ops/sec [21,305..21,476] 🟢 +17.5%
indexOf() 105,815 ops/sec [105,250..106,581] → 107,005 ops/sec [106,011..107,493] ~ overlap (+1.1%) 109,703 ops/sec [103,725..112,425] → 120,151 ops/sec [119,745..120,857] 🟢 +9.5%
reverse() 110,247 ops/sec [108,984..111,378] → 108,585 ops/sec [104,678..111,833] ~ overlap (-1.5%) 128,692 ops/sec [126,199..132,362] → 122,982 ops/sec [119,797..124,993] 🔴 -4.4%
toReversed() 54,601 ops/sec [54,370..54,935] → 54,499 ops/sec [53,975..55,091] ~ overlap (-0.2%) 51,872 ops/sec [51,188..52,031] → 57,993 ops/sec [56,451..58,313] 🟢 +11.8%
toSorted() 822 ops/sec [819..824] → 823 ops/sec [821..825] ~ overlap (+0.0%) 685 ops/sec [675..702] → 813 ops/sec [807..821] 🟢 +18.7%
create view over existing buffer 135,697 ops/sec [134,156..136,769] → 136,616 ops/sec [134,101..139,925] ~ overlap (+0.7%) 168,269 ops/sec [160,455..170,682] → 154,194 ops/sec [151,955..158,222] 🔴 -8.4%
subarray() 179,821 ops/sec [177,773..181,209] → 179,161 ops/sec [176,728..180,366] ~ overlap (-0.4%) 228,437 ops/sec [225,882..238,338] → 219,384 ops/sec [212,869..224,638] 🔴 -4.0%
set() from array 199,838 ops/sec [193,385..203,748] → 201,652 ops/sec [198,791..204,678] ~ overlap (+0.9%) 264,871 ops/sec [261,882..273,618] → 242,075 ops/sec [237,124..248,489] 🔴 -8.6%
for-of loop 2,198 ops/sec [2,191..2,206] → 2,162 ops/sec [2,141..2,168] 🔴 -1.6% 9,175 ops/sec [8,804..9,288] → 8,629 ops/sec [8,596..8,685] 🔴 -5.9%
spread into array 8,982 ops/sec [8,827..9,086] → 9,183 ops/sec [8,983..9,278] ~ overlap (+2.2%) 37,237 ops/sec [36,380..38,423] → 34,557 ops/sec [34,034..35,534] 🔴 -7.2%
f16round(1.337) 255,225 ops/sec [249,615..255,795] → 252,220 ops/sec [250,671..256,020] ~ overlap (-1.2%) 258,670 ops/sec [255,328..264,816] → 233,387 ops/sec [230,500..239,273] 🔴 -9.8%
f16round over 100 values 1,534 ops/sec [1,502..1,572] → 1,506 ops/sec [1,454..1,558] ~ overlap (-1.8%) 3,009 ops/sec [2,991..3,021] → 2,770 ops/sec [2,740..2,783] 🔴 -7.9%
for-of.js — Interp: 🟢 2, 5 unch. · avg +1.2% · Bytecode: 🔴 7 · avg -9.7%
Benchmark Interpreted Δ Bytecode Δ
for...of with 10-element array 19,346 ops/sec [19,340..19,390] → 19,615 ops/sec [18,872..19,720] ~ overlap (+1.4%) 119,777 ops/sec [117,345..121,952] → 107,964 ops/sec [106,074..109,385] 🔴 -9.9%
for...of with 100-element array 2,204 ops/sec [2,191..2,220] → 2,274 ops/sec [2,229..2,293] 🟢 +3.2% 15,500 ops/sec [15,039..15,599] → 14,050 ops/sec [13,925..14,205] 🔴 -9.4%
for...of with string (10 chars) 13,992 ops/sec [13,936..14,051] → 14,368 ops/sec [14,204..14,484] 🟢 +2.7% 34,239 ops/sec [33,936..34,932] → 31,092 ops/sec [30,155..31,617] 🔴 -9.2%
for...of with Set (10 elements) 19,822 ops/sec [19,594..20,177] → 20,198 ops/sec [19,701..20,367] ~ overlap (+1.9%) 115,846 ops/sec [115,084..119,040] → 105,493 ops/sec [104,211..107,236] 🔴 -8.9%
for...of with Map entries (10 entries) 13,261 ops/sec [13,112..13,433] → 13,225 ops/sec [13,123..13,586] ~ overlap (-0.3%) 17,373 ops/sec [17,076..17,699] → 15,494 ops/sec [15,310..15,870] 🔴 -10.8%
for...of with destructuring 16,634 ops/sec [16,318..16,824] → 16,712 ops/sec [16,296..16,902] ~ overlap (+0.5%) 22,117 ops/sec [22,064..22,364] → 20,009 ops/sec [18,600..20,480] 🔴 -9.5%
for-await-of with sync array 18,856 ops/sec [18,564..18,958] → 18,677 ops/sec [18,324..18,942] ~ overlap (-0.9%) 18,173 ops/sec [17,941..18,541] → 16,257 ops/sec [16,137..16,624] 🔴 -10.5%
generators.js — Interp: 4 unch. · avg -1.9% · Bytecode: 🔴 4 · avg -7.7%
Benchmark Interpreted Δ Bytecode Δ
manual next over object generator 881 ops/sec [850..887] → 875 ops/sec [874..879] ~ overlap (-0.6%) 1,141 ops/sec [1,132..1,178] → 1,068 ops/sec [1,051..1,080] 🔴 -6.4%
for...of over object generator 1,395 ops/sec [1,366..1,418] → 1,371 ops/sec [1,356..1,385] ~ overlap (-1.7%) 2,208 ops/sec [2,199..2,215] → 2,070 ops/sec [2,035..2,084] 🔴 -6.3%
yield delegation 1,404 ops/sec [1,390..1,415] → 1,374 ops/sec [1,346..1,407] ~ overlap (-2.1%) 2,262 ops/sec [2,232..2,295] → 2,084 ops/sec [2,051..2,092] 🔴 -7.8%
class generator method 1,402 ops/sec [1,342..1,450] → 1,356 ops/sec [1,344..1,369] ~ overlap (-3.3%) 2,291 ops/sec [2,234..2,307] → 2,059 ops/sec [2,035..2,099] 🔴 -10.1%
iterators.js — Interp: 🟢 14, 🔴 4, 24 unch. · avg +1.8% · Bytecode: 🔴 42 · avg -9.2%
Benchmark Interpreted Δ Bytecode Δ
Iterator.from({next}).toArray() — 20 elements 4,340 ops/sec [4,277..4,386] → 4,382 ops/sec [4,360..4,446] ~ overlap (+1.0%) 7,618 ops/sec [7,561..7,667] → 6,782 ops/sec [6,681..6,824] 🔴 -11.0%
Iterator.from({next}).toArray() — 50 elements 1,835 ops/sec [1,817..1,852] → 1,832 ops/sec [1,819..1,855] ~ overlap (-0.1%) 3,317 ops/sec [3,305..3,322] → 2,972 ops/sec [2,936..3,011] 🔴 -10.4%
spread pre-wrapped iterator — 20 elements 4,299 ops/sec [4,276..4,325] → 4,394 ops/sec [4,366..4,411] 🟢 +2.2% 7,505 ops/sec [7,426..7,769] → 6,848 ops/sec [6,730..6,912] 🔴 -8.8%
Iterator.from({next}).forEach — 50 elements 1,342 ops/sec [1,333..1,348] → 1,362 ops/sec [1,343..1,374] ~ overlap (+1.5%) 2,491 ops/sec [2,434..2,519] → 2,265 ops/sec [2,252..2,275] 🔴 -9.1%
Iterator.from({next}).reduce — 50 elements 1,363 ops/sec [1,356..1,370] → 1,379 ops/sec [1,365..1,410] ~ overlap (+1.1%) 2,437 ops/sec [2,419..2,479] → 2,208 ops/sec [2,196..2,264] 🔴 -9.4%
wrap array iterator 69,589 ops/sec [68,780..70,435] → 71,090 ops/sec [70,099..72,109] ~ overlap (+2.2%) 84,373 ops/sec [83,573..85,093] → 74,191 ops/sec [73,870..74,470] 🔴 -12.1%
wrap plain {next()} object 2,955 ops/sec [2,927..2,982] → 3,050 ops/sec [2,998..3,085] 🟢 +3.2% 5,274 ops/sec [5,242..5,311] → 4,857 ops/sec [4,823..4,886] 🔴 -7.9%
map + toArray (50 elements) 1,379 ops/sec [1,372..1,403] → 1,378 ops/sec [1,373..1,383] ~ overlap (-0.1%) 2,491 ops/sec [2,473..2,540] → 2,334 ops/sec [2,299..2,383] 🔴 -6.3%
filter + toArray (50 elements) 1,350 ops/sec [1,332..1,370] → 1,371 ops/sec [1,357..1,388] ~ overlap (+1.5%) 2,459 ops/sec [2,444..2,467] → 2,300 ops/sec [2,269..2,320] 🔴 -6.5%
take(10) + toArray (50 element source) 8,208 ops/sec [8,041..8,314] → 8,406 ops/sec [8,360..8,519] 🟢 +2.4% 13,854 ops/sec [13,574..13,990] → 12,657 ops/sec [12,461..13,022] 🔴 -8.6%
drop(40) + toArray (50 element source) 1,879 ops/sec [1,859..1,920] → 1,897 ops/sec [1,882..1,905] ~ overlap (+0.9%) 3,323 ops/sec [3,283..3,333] → 2,899 ops/sec [2,866..2,922] 🔴 -12.8%
chained map + filter + take (100 element source) 2,634 ops/sec [2,588..2,686] → 2,666 ops/sec [2,637..2,708] ~ overlap (+1.2%) 4,591 ops/sec [4,549..4,612] → 4,107 ops/sec [4,062..4,280] 🔴 -10.5%
some + every (50 elements) 768 ops/sec [756..781] → 802 ops/sec [790..815] 🟢 +4.4% 1,429 ops/sec [1,402..1,460] → 1,329 ops/sec [1,320..1,347] 🔴 -7.0%
find (50 elements) 1,717 ops/sec [1,680..1,727] → 1,803 ops/sec [1,781..1,816] 🟢 +5.0% 3,114 ops/sec [3,036..3,125] → 2,825 ops/sec [2,800..2,866] 🔴 -9.3%
concat 2 arrays (10 + 10 elements) 64,455 ops/sec [63,920..64,928] → 66,916 ops/sec [66,521..67,710] 🟢 +3.8% 77,031 ops/sec [76,146..78,793] → 70,057 ops/sec [69,095..70,209] 🔴 -9.1%
concat 5 arrays (10 elements each) 38,023 ops/sec [37,684..38,229] → 39,361 ops/sec [38,470..39,679] 🟢 +3.5% 46,498 ops/sec [45,298..46,966] → 40,755 ops/sec [40,636..41,020] 🔴 -12.4%
concat 2 arrays (20 + 20 elements) 53,939 ops/sec [53,728..55,338] → 57,082 ops/sec [56,163..57,414] 🟢 +5.8% 64,560 ops/sec [63,838..65,453] → 58,569 ops/sec [58,069..58,973] 🔴 -9.3%
concat + filter + toArray (20 + 20 elements) 5,559 ops/sec [5,510..5,735] → 5,764 ops/sec [5,678..5,789] ~ overlap (+3.7%) 9,802 ops/sec [9,506..10,255] → 9,320 ops/sec [9,278..9,331] 🔴 -4.9%
concat + map + take (20 + 20 elements, take 10) 17,976 ops/sec [17,422..18,193] → 17,717 ops/sec [17,447..17,880] ~ overlap (-1.4%) 27,269 ops/sec [26,983..27,512] → 25,125 ops/sec [24,930..25,459] 🔴 -7.9%
concat Sets (15 + 15 elements) 64,048 ops/sec [63,340..64,864] → 64,928 ops/sec [64,293..65,305] ~ overlap (+1.4%) 70,728 ops/sec [69,471..71,812] → 66,824 ops/sec [66,375..67,142] 🔴 -5.5%
concat strings (13 + 13 characters) 44,961 ops/sec [44,892..45,086] → 46,088 ops/sec [45,470..46,731] 🟢 +2.5% 48,582 ops/sec [48,320..49,347] → 45,293 ops/sec [45,030..45,490] 🔴 -6.8%
zip 2 arrays (10 + 10 elements) 28,039 ops/sec [27,349..28,560] → 27,771 ops/sec [27,287..27,998] ~ overlap (-1.0%) 31,234 ops/sec [30,124..31,803] → 27,844 ops/sec [27,686..28,180] 🔴 -10.9%
zip 3 arrays (10 elements each) 25,739 ops/sec [25,182..25,821] → 25,084 ops/sec [24,037..25,334] ~ overlap (-2.5%) 27,856 ops/sec [27,774..28,204] → 25,594 ops/sec [25,120..25,915] 🔴 -8.1%
zip 2 arrays (20 + 20 elements) 18,678 ops/sec [18,219..19,013] → 17,891 ops/sec [17,815..17,957] 🔴 -4.2% 20,420 ops/sec [19,912..20,611] → 18,475 ops/sec [18,384..18,801] 🔴 -9.5%
zip 2 arrays (50 + 50 elements) 9,434 ops/sec [9,339..9,622] → 9,111 ops/sec [8,938..9,326] 🔴 -3.4% 10,369 ops/sec [10,308..10,381] → 9,294 ops/sec [9,225..9,369] 🔴 -10.4%
zip shortest mode (20 + 10 elements) 27,760 ops/sec [27,572..27,963] → 27,336 ops/sec [27,226..28,226] ~ overlap (-1.5%) 31,789 ops/sec [30,629..32,209] → 28,177 ops/sec [27,164..28,293] 🔴 -11.4%
zip longest mode (10 + 20 elements) 16,588 ops/sec [16,464..16,761] → 16,660 ops/sec [16,436..16,714] ~ overlap (+0.4%) 18,388 ops/sec [17,570..18,487] → 16,084 ops/sec [15,971..16,218] 🔴 -12.5%
zip strict mode (20 + 20 elements) 17,969 ops/sec [17,826..18,014] → 17,642 ops/sec [17,469..17,778] 🔴 -1.8% 19,942 ops/sec [19,556..20,174] → 17,450 ops/sec [17,215..17,537] 🔴 -12.5%
zip + map + toArray (20 + 20 elements) 7,043 ops/sec [6,991..7,067] → 7,139 ops/sec [7,081..7,191] 🟢 +1.4% 6,010 ops/sec [5,922..6,090] → 5,402 ops/sec [5,393..5,478] 🔴 -10.1%
zip + filter + toArray (20 + 20 elements) 6,940 ops/sec [6,815..7,026] → 7,145 ops/sec [7,047..7,275] 🟢 +2.9% 5,973 ops/sec [5,863..6,082] → 5,356 ops/sec [5,348..5,381] 🔴 -10.3%
zip Sets (15 + 15 elements) 23,177 ops/sec [22,611..23,639] → 22,837 ops/sec [22,510..23,285] ~ overlap (-1.5%) 25,508 ops/sec [24,567..25,609] → 22,612 ops/sec [22,117..22,711] 🔴 -11.4%
zipKeyed 2 keys (10 elements each) 27,676 ops/sec [27,444..28,845] → 28,896 ops/sec [28,510..29,364] ~ overlap (+4.4%) 30,992 ops/sec [30,602..31,195] → 27,949 ops/sec [27,756..28,353] 🔴 -9.8%
zipKeyed 3 keys (20 elements each) 14,297 ops/sec [13,800..14,657] → 14,784 ops/sec [14,245..15,363] ~ overlap (+3.4%) 15,264 ops/sec [14,955..15,565] → 14,355 ops/sec [14,059..14,579] 🔴 -6.0%
zipKeyed longest mode (10 + 20 elements) 16,461 ops/sec [16,085..16,762] → 17,459 ops/sec [16,520..18,228] ~ overlap (+6.1%) 17,660 ops/sec [17,056..17,837] → 16,084 ops/sec [15,895..16,383] 🔴 -8.9%
zipKeyed strict mode (20 + 20 elements) 17,045 ops/sec [16,840..17,433] → 18,104 ops/sec [17,940..18,801] 🟢 +6.2% 18,247 ops/sec [17,852..18,345] → 17,115 ops/sec [16,894..17,464] 🔴 -6.2%
zipKeyed + filter + map (20 elements) 5,007 ops/sec [4,927..5,049] → 5,471 ops/sec [5,460..5,500] 🟢 +9.3% 7,089 ops/sec [6,927..7,178] → 6,550 ops/sec [6,508..6,721] 🔴 -7.6%
array.values().map().filter().toArray() 2,585 ops/sec [2,558..2,611] → 2,789 ops/sec [2,610..2,867] ~ overlap (+7.9%) 4,902 ops/sec [4,628..4,947] → 4,389 ops/sec [4,299..4,409] 🔴 -10.5%
array.values().take(5).toArray() 94,427 ops/sec [93,707..95,254] → 93,018 ops/sec [92,709..93,111] 🔴 -1.5% 110,996 ops/sec [109,297..112,906] → 99,335 ops/sec [97,338..100,327] 🔴 -10.5%
array.values().drop(45).toArray() 74,689 ops/sec [74,188..75,428] → 75,581 ops/sec [74,683..75,793] ~ overlap (+1.2%) 85,710 ops/sec [83,562..86,385] → 78,851 ops/sec [74,711..80,460] 🔴 -8.0%
map.entries() chained helpers 3,886 ops/sec [3,743..3,995] → 3,881 ops/sec [3,573..3,965] ~ overlap (-0.1%) 3,062 ops/sec [3,043..3,205] → 2,783 ops/sec [2,741..2,798] 🔴 -9.1%
set.values() chained helpers 6,041 ops/sec [5,930..6,141] → 6,125 ops/sec [5,990..6,186] ~ overlap (+1.4%) 10,375 ops/sec [10,265..10,516] → 9,405 ops/sec [9,210..9,732] 🔴 -9.4%
string iterator map + toArray 5,184 ops/sec [5,135..5,209] → 5,281 ops/sec [5,264..5,320] 🟢 +1.9% 6,001 ops/sec [5,914..6,123] → 5,512 ops/sec [5,443..5,583] 🔴 -8.1%
json.js — Interp: 20 unch. · avg +0.4% · Bytecode: 🔴 20 · avg -9.7%
Benchmark Interpreted Δ Bytecode Δ
parse simple object 69,545 ops/sec [68,967..73,656] → 69,332 ops/sec [68,673..70,240] ~ overlap (-0.3%) 82,089 ops/sec [81,539..82,203] → 74,745 ops/sec [72,891..76,720] 🔴 -8.9%
parse nested object 47,072 ops/sec [45,498..49,645] → 47,641 ops/sec [46,518..48,535] ~ overlap (+1.2%) 52,507 ops/sec [51,700..52,527] → 48,974 ops/sec [47,825..49,854] 🔴 -6.7%
parse array of objects 27,952 ops/sec [27,680..29,526] → 28,375 ops/sec [27,567..28,890] ~ overlap (+1.5%) 30,897 ops/sec [30,436..31,137] → 28,992 ops/sec [28,832..29,052] 🔴 -6.2%
parse large flat object 29,760 ops/sec [28,959..30,473] → 30,184 ops/sec [29,385..30,540] ~ overlap (+1.4%) 34,279 ops/sec [33,750..34,978] → 31,001 ops/sec [30,478..31,098] 🔴 -9.6%
parse mixed types 34,769 ops/sec [33,865..36,514] → 34,987 ops/sec [34,565..35,290] ~ overlap (+0.6%) 40,538 ops/sec [39,956..41,331] → 35,995 ops/sec [35,843..36,176] 🔴 -11.2%
stringify simple object 76,266 ops/sec [74,660..77,485] → 76,989 ops/sec [74,543..78,410] ~ overlap (+0.9%) 81,321 ops/sec [80,595..82,618] → 73,823 ops/sec [73,646..73,970] 🔴 -9.2%
stringify nested object 44,621 ops/sec [44,091..46,696] → 44,888 ops/sec [44,514..45,150] ~ overlap (+0.6%) 45,724 ops/sec [45,434..46,125] → 41,443 ops/sec [41,271..41,652] 🔴 -9.4%
stringify array of objects 18,804 ops/sec [18,099..19,503] → 18,806 ops/sec [18,593..19,175] ~ overlap (+0.0%) 21,381 ops/sec [21,291..21,414] → 18,879 ops/sec [18,525..18,912] 🔴 -11.7%
stringify mixed types 29,112 ops/sec [28,468..29,797] → 29,461 ops/sec [28,670..29,952] ~ overlap (+1.2%) 31,344 ops/sec [31,238..31,479] → 28,090 ops/sec [26,328..28,306] 🔴 -10.4%
reviver doubles numbers 14,163 ops/sec [13,992..14,253] → 14,108 ops/sec [13,639..14,191] ~ overlap (-0.4%) 19,394 ops/sec [19,177..19,664] → 18,034 ops/sec [17,763..18,376] 🔴 -7.0%
reviver filters properties 13,508 ops/sec [13,129..13,672] → 13,439 ops/sec [13,328..13,698] ~ overlap (-0.5%) 16,477 ops/sec [16,330..16,525] → 15,124 ops/sec [14,972..15,193] 🔴 -8.2%
reviver on nested object 16,671 ops/sec [16,562..16,726] → 16,475 ops/sec [16,164..16,783] ~ overlap (-1.2%) 20,880 ops/sec [20,596..21,192] → 19,382 ops/sec [18,991..19,539] 🔴 -7.2%
reviver on array 8,666 ops/sec [8,468..8,746] → 8,715 ops/sec [8,681..8,755] ~ overlap (+0.6%) 12,366 ops/sec [11,783..12,800] → 11,129 ops/sec [10,915..11,470] 🔴 -10.0%
replacer function doubles numbers 16,407 ops/sec [16,008..16,568] → 16,573 ops/sec [16,471..16,781] ~ overlap (+1.0%) 24,106 ops/sec [23,946..24,259] → 21,041 ops/sec [20,852..21,172] 🔴 -12.7%
replacer function excludes properties 21,934 ops/sec [21,506..22,469] → 21,833 ops/sec [21,576..22,107] ~ overlap (-0.5%) 29,972 ops/sec [29,714..30,126] → 26,051 ops/sec [25,514..26,247] 🔴 -13.1%
array replacer (allowlist) 47,439 ops/sec [46,417..48,264] → 48,460 ops/sec [48,074..48,645] ~ overlap (+2.2%) 49,471 ops/sec [48,627..54,488] → 44,990 ops/sec [44,469..45,387] 🔴 -9.1%
stringify with 2-space indent 38,536 ops/sec [38,303..39,406] → 39,104 ops/sec [38,085..39,791] ~ overlap (+1.5%) 41,627 ops/sec [41,347..41,948] → 38,456 ops/sec [37,724..38,835] 🔴 -7.6%
stringify with tab indent 38,258 ops/sec [37,856..38,648] → 38,160 ops/sec [37,465..39,698] ~ overlap (-0.3%) 43,018 ops/sec [42,551..43,602] → 37,419 ops/sec [36,979..37,662] 🔴 -13.0%
parse then stringify 23,070 ops/sec [22,375..23,667] → 22,948 ops/sec [22,578..23,875] ~ overlap (-0.5%) 27,356 ops/sec [26,588..28,011] → 23,762 ops/sec [23,603..24,239] 🔴 -13.1%
stringify then parse 13,705 ops/sec [13,425..13,947] → 13,649 ops/sec [13,204..14,288] ~ overlap (-0.4%) 15,750 ops/sec [15,578..15,947] → 14,100 ops/sec [13,398..14,467] 🔴 -10.5%
jsx.jsx — Interp: 🟢 1, 🔴 10, 10 unch. · avg -2.9% · Bytecode: 🔴 20, 1 unch. · avg -9.8%
Benchmark Interpreted Δ Bytecode Δ
simple element 91,573 ops/sec [90,077..94,336] → 88,354 ops/sec [86,524..92,977] ~ overlap (-3.5%) 152,566 ops/sec [151,769..159,479] → 133,523 ops/sec [129,645..137,671] 🔴 -12.5%
self-closing element 96,095 ops/sec [95,774..96,196] → 92,447 ops/sec [89,901..95,252] 🔴 -3.8% 170,531 ops/sec [167,077..172,228] → 147,212 ops/sec [144,339..148,618] 🔴 -13.7%
element with string attribute 81,456 ops/sec [80,622..86,331] → 77,637 ops/sec [76,613..79,103] 🔴 -4.7% 121,308 ops/sec [118,967..123,496] → 106,739 ops/sec [104,187..107,658] 🔴 -12.0%
element with multiple attributes 74,764 ops/sec [74,541..78,114] → 69,505 ops/sec [67,567..70,037] 🔴 -7.0% 92,968 ops/sec [88,764..97,267] → 82,421 ops/sec [82,117..82,587] 🔴 -11.3%
element with expression attribute 77,047 ops/sec [75,786..77,923] → 74,720 ops/sec [71,580..75,250] 🔴 -3.0% 124,992 ops/sec [123,726..131,501] → 111,586 ops/sec [110,094..112,253] 🔴 -10.7%
text child 96,911 ops/sec [94,639..96,954] → 94,861 ops/sec [92,297..95,574] ~ overlap (-2.1%) 154,848 ops/sec [147,504..159,714] → 135,161 ops/sec [132,715..138,318] 🔴 -12.7%
expression child 97,530 ops/sec [90,020..97,876] → 88,786 ops/sec [86,834..89,416] 🔴 -9.0% 142,489 ops/sec [140,246..146,446] → 125,391 ops/sec [124,575..126,574] 🔴 -12.0%
mixed text and expression 85,509 ops/sec [84,049..86,164] → 83,357 ops/sec [82,480..84,485] ~ overlap (-2.5%) 124,210 ops/sec [123,378..126,883] → 111,608 ops/sec [110,130..112,739] 🔴 -10.1%
nested elements (3 levels) 35,618 ops/sec [35,311..36,323] → 35,191 ops/sec [34,639..35,522] ~ overlap (-1.2%) 59,430 ops/sec [58,024..60,714] → 52,531 ops/sec [52,057..53,673] 🔴 -11.6%
sibling children 27,301 ops/sec [26,737..27,379] → 26,851 ops/sec [26,138..27,949] ~ overlap (-1.6%) 42,622 ops/sec [41,395..43,242] → 37,834 ops/sec [37,416..38,284] 🔴 -11.2%
component element 70,342 ops/sec [68,970..70,817] → 69,922 ops/sec [69,514..70,149] ~ overlap (-0.6%) 112,221 ops/sec [107,777..114,352] → 100,622 ops/sec [99,255..101,436] 🔴 -10.3%
component with children 43,276 ops/sec [42,544..44,028] → 42,979 ops/sec [42,427..43,314] ~ overlap (-0.7%) 67,149 ops/sec [65,531..68,769] → 60,850 ops/sec [60,092..62,982] 🔴 -9.4%
dotted component 60,392 ops/sec [59,293..62,078] → 61,369 ops/sec [60,291..61,753] ~ overlap (+1.6%) 85,103 ops/sec [83,956..89,439] → 79,634 ops/sec [77,998..81,907] 🔴 -6.4%
empty fragment 96,456 ops/sec [93,488..97,938] → 101,578 ops/sec [100,549..101,741] 🟢 +5.3% 184,121 ops/sec [180,200..190,153] → 165,892 ops/sec [161,374..167,494] 🔴 -9.9%
fragment with children 27,215 ops/sec [26,867..27,546] → 26,003 ops/sec [25,821..26,220] 🔴 -4.5% 43,232 ops/sec [42,820..43,558] → 39,087 ops/sec [37,904..40,513] 🔴 -9.6%
spread attributes 52,296 ops/sec [52,126..52,752] → 50,325 ops/sec [49,187..51,151] 🔴 -3.8% 63,252 ops/sec [61,890..63,969] → 57,380 ops/sec [56,638..58,250] 🔴 -9.3%
spread with overrides 47,049 ops/sec [46,490..47,591] → 45,081 ops/sec [43,995..46,226] 🔴 -4.2% 54,478 ops/sec [54,057..55,399] → 49,760 ops/sec [48,866..50,829] 🔴 -8.7%
shorthand props 74,673 ops/sec [74,032..75,556] → 71,696 ops/sec [70,468..73,365] 🔴 -4.0% 96,454 ops/sec [94,160..99,542] → 90,533 ops/sec [89,041..94,206] ~ overlap (-6.1%)
nav bar structure 13,109 ops/sec [12,629..13,320] → 12,733 ops/sec [12,558..12,860] ~ overlap (-2.9%) 19,245 ops/sec [19,093..20,074] → 18,223 ops/sec [18,035..18,629] 🔴 -5.3%
card component tree 15,553 ops/sec [15,389..15,764] → 14,793 ops/sec [14,451..15,290] 🔴 -4.9% 21,199 ops/sec [20,741..21,342] → 20,192 ops/sec [19,564..20,431] 🔴 -4.7%
10 list items via Array.from 6,777 ops/sec [6,490..6,901] → 6,561 ops/sec [6,528..6,604] ~ overlap (-3.2%) 9,351 ops/sec [8,839..9,604] → 8,511 ops/sec [8,453..8,571] 🔴 -9.0%
modules.js — Interp: 9 unch. · avg +0.7% · Bytecode: 🔴 9 · avg -13.2%
Benchmark Interpreted Δ Bytecode Δ
call imported function 155,320 ops/sec [149,201..156,770] → 153,329 ops/sec [150,466..154,676] ~ overlap (-1.3%) 772,396 ops/sec [767,060..774,347] → 661,054 ops/sec [657,886..668,923] 🔴 -14.4%
call two imported functions 87,107 ops/sec [85,904..88,625] → 87,814 ops/sec [86,018..88,243] ~ overlap (+0.8%) 513,795 ops/sec [505,424..518,181] → 431,794 ops/sec [424,056..438,877] 🔴 -16.0%
read imported constant 491,813 ops/sec [489,411..496,596] → 504,508 ops/sec [486,211..508,339] ~ overlap (+2.6%) 1,918,903 ops/sec [1,907,636..1,921,600] → 1,610,095 ops/sec [1,603,654..1,634,998] 🔴 -16.1%
read imported string 502,929 ops/sec [492,680..516,912] → 493,068 ops/sec [469,032..498,194] ~ overlap (-2.0%) 1,858,236 ops/sec [1,850,198..1,920,808] → 1,642,010 ops/sec [1,641,042..1,666,098] 🔴 -11.6%
read JSON string property 485,248 ops/sec [482,616..490,372] → 497,496 ops/sec [478,201..524,376] ~ overlap (+2.5%) 1,895,180 ops/sec [1,867,388..1,906,258] → 1,632,681 ops/sec [1,601,752..1,674,752] 🔴 -13.9%
read JSON number property 486,756 ops/sec [486,587..487,607] → 482,651 ops/sec [460,152..497,295] ~ overlap (-0.8%) 1,881,976 ops/sec [1,873,439..1,908,823] → 1,632,935 ops/sec [1,625,787..1,634,381] 🔴 -13.2%
read JSON boolean property 480,728 ops/sec [470,588..496,825] → 495,428 ops/sec [480,990..512,055] ~ overlap (+3.1%) 1,879,934 ops/sec [1,859,095..1,938,808] → 1,646,684 ops/sec [1,636,827..1,659,380] 🔴 -12.4%
read JSON array property 482,674 ops/sec [472,323..492,303] → 490,503 ops/sec [475,892..518,986] ~ overlap (+1.6%) 1,868,924 ops/sec [1,860,944..1,895,212] → 1,643,378 ops/sec [1,619,481..1,649,374] 🔴 -12.1%
read multiple JSON properties 296,502 ops/sec [283,726..304,286] → 295,491 ops/sec [291,368..298,563] ~ overlap (-0.3%) 1,508,809 ops/sec [1,493,704..1,522,296] → 1,364,977 ops/sec [1,344,479..1,396,699] 🔴 -9.5%
numbers.js — Interp: 🟢 1, 🔴 2, 8 unch. · avg -1.1% · Bytecode: 🔴 11 · avg -9.1%
Benchmark Interpreted Δ Bytecode Δ
integer arithmetic 160,133 ops/sec [158,520..162,288] → 154,591 ops/sec [150,695..157,647] 🔴 -3.5% 761,012 ops/sec [756,584..768,890] → 715,368 ops/sec [701,154..726,144] 🔴 -6.0%
floating point arithmetic 189,007 ops/sec [183,319..200,347] → 181,699 ops/sec [169,530..185,295] ~ overlap (-3.9%) 315,217 ops/sec [314,350..317,095] → 293,022 ops/sec [291,909..293,756] 🔴 -7.0%
number coercion 73,087 ops/sec [72,211..74,966] → 72,886 ops/sec [69,564..74,139] ~ overlap (-0.3%) 99,946 ops/sec [99,581..100,695] → 89,326 ops/sec [86,662..90,386] 🔴 -10.6%
toFixed 40,330 ops/sec [40,269..40,390] → 40,140 ops/sec [39,734..40,709] ~ overlap (-0.5%) 43,006 ops/sec [42,716..43,164] → 39,672 ops/sec [38,934..40,269] 🔴 -7.8%
toString 64,062 ops/sec [63,404..64,943] → 63,270 ops/sec [62,541..63,740] ~ overlap (-1.2%) 73,805 ops/sec [73,432..74,054] → 68,524 ops/sec [67,873..69,784] 🔴 -7.2%
valueOf 97,495 ops/sec [96,785..98,708] → 95,733 ops/sec [95,140..96,297] 🔴 -1.8% 111,929 ops/sec [111,198..112,081] → 102,596 ops/sec [102,087..104,231] 🔴 -8.3%
toPrecision 36,638 ops/sec [36,222..37,164] → 36,350 ops/sec [36,162..36,821] ~ overlap (-0.8%) 38,746 ops/sec [38,584..38,824] → 34,975 ops/sec [34,654..35,239] 🔴 -9.7%
Number.isNaN 113,098 ops/sec [111,958..115,385] → 110,706 ops/sec [110,156..112,149] ~ overlap (-2.1%) 131,865 ops/sec [131,764..132,291] → 111,188 ops/sec [107,222..112,419] 🔴 -15.7%
Number.isFinite 111,303 ops/sec [107,764..111,867] → 110,162 ops/sec [108,961..112,827] ~ overlap (-1.0%) 112,261 ops/sec [104,337..113,838] → 102,227 ops/sec [101,216..102,810] 🔴 -8.9%
Number.isInteger 117,991 ops/sec [113,403..119,479] → 118,597 ops/sec [117,445..119,163] ~ overlap (+0.5%) 119,393 ops/sec [118,428..120,570] → 107,315 ops/sec [103,203..108,104] 🔴 -10.1%
Number.parseInt and parseFloat 92,134 ops/sec [90,316..93,500] → 94,198 ops/sec [93,878..94,657] 🟢 +2.2% 86,529 ops/sec [85,048..87,621] → 78,649 ops/sec [77,624..81,510] 🔴 -9.1%
objects.js — Interp: 7 unch. · avg -0.9% · Bytecode: 🔴 7 · avg -9.0%
Benchmark Interpreted Δ Bytecode Δ
create simple object 211,134 ops/sec [206,258..213,400] → 210,813 ops/sec [207,734..212,348] ~ overlap (-0.2%) 267,963 ops/sec [260,532..270,339] → 238,991 ops/sec [234,153..239,760] 🔴 -10.8%
create nested object 113,015 ops/sec [109,079..114,378] → 110,182 ops/sec [107,967..112,203] ~ overlap (-2.5%) 117,006 ops/sec [112,056..118,649] → 102,924 ops/sec [101,203..104,657] 🔴 -12.0%
create 50 objects via Array.from 3,930 ops/sec [3,889..3,995] → 3,934 ops/sec [3,849..3,997] ~ overlap (+0.1%) 4,660 ops/sec [4,547..4,753] → 4,245 ops/sec [4,217..4,282] 🔴 -8.9%
property read 189,016 ops/sec [187,738..190,833] → 190,859 ops/sec [187,842..192,725] ~ overlap (+1.0%) 314,972 ops/sec [312,202..315,653] → 278,531 ops/sec [276,298..282,003] 🔴 -11.6%
Object.keys 118,935 ops/sec [117,709..122,456] → 118,793 ops/sec [114,463..121,912] ~ overlap (-0.1%) 143,238 ops/sec [140,344..146,188] → 131,638 ops/sec [130,537..134,316] 🔴 -8.1%
Object.entries 49,599 ops/sec [48,132..50,486] → 47,850 ops/sec [47,502..48,654] ~ overlap (-3.5%) 55,201 ops/sec [53,234..55,716] → 51,548 ops/sec [49,377..51,725] 🔴 -6.6%
spread operator 86,974 ops/sec [85,468..89,898] → 86,046 ops/sec [85,328..88,864] ~ overlap (-1.1%) 103,795 ops/sec [102,528..106,569] → 98,334 ops/sec [92,950..99,231] 🔴 -5.3%
promises.js — Interp: 12 unch. · avg +0.0% · Bytecode: 🔴 12 · avg -9.7%
Benchmark Interpreted Δ Bytecode Δ
Promise.resolve(value) 201,989 ops/sec [195,209..203,755] → 199,158 ops/sec [195,832..201,463] ~ overlap (-1.4%) 235,236 ops/sec [231,483..238,977] → 213,696 ops/sec [211,538..214,697] 🔴 -9.2%
new Promise(resolve => resolve(value)) 78,184 ops/sec [76,489..79,496] → 78,672 ops/sec [78,309..79,511] ~ overlap (+0.6%) 107,323 ops/sec [105,193..108,422] → 102,053 ops/sec [98,879..103,914] 🔴 -4.9%
Promise.reject(reason) 206,886 ops/sec [204,263..210,438] → 203,155 ops/sec [198,407..211,072] ~ overlap (-1.8%) 233,841 ops/sec [231,854..236,787] → 211,418 ops/sec [206,916..215,130] 🔴 -9.6%
resolve + then (1 handler) 75,257 ops/sec [73,961..77,298] → 75,557 ops/sec [75,154..77,924] ~ overlap (+0.4%) 96,554 ops/sec [95,751..100,614] → 89,512 ops/sec [87,006..90,268] 🔴 -7.3%
resolve + then chain (3 deep) 31,063 ops/sec [30,854..31,447] → 31,776 ops/sec [31,137..31,951] ~ overlap (+2.3%) 40,496 ops/sec [39,748..41,778] → 38,193 ops/sec [37,600..38,583] 🔴 -5.7%
resolve + then chain (10 deep) 10,260 ops/sec [10,178..10,274] → 10,358 ops/sec [10,061..10,495] ~ overlap (+1.0%) 13,673 ops/sec [13,612..13,733] → 12,661 ops/sec [12,362..13,080] 🔴 -7.4%
reject + catch + then 45,200 ops/sec [44,311..45,923] → 45,111 ops/sec [44,175..45,878] ~ overlap (-0.2%) 58,384 ops/sec [57,659..58,692] → 52,045 ops/sec [51,386..52,174] 🔴 -10.9%
resolve + finally + then 39,731 ops/sec [39,288..40,430] → 39,903 ops/sec [39,248..40,098] ~ overlap (+0.4%) 50,246 ops/sec [49,758..50,440] → 43,487 ops/sec [42,491..44,299] 🔴 -13.5%
Promise.all (5 resolved) 16,249 ops/sec [16,072..16,554] → 15,760 ops/sec [15,363..16,386] ~ overlap (-3.0%) 17,265 ops/sec [17,010..17,574] → 15,175 ops/sec [15,039..15,250] 🔴 -12.1%
Promise.race (5 resolved) 16,995 ops/sec [16,569..17,304] → 17,080 ops/sec [16,733..17,927] ~ overlap (+0.5%) 18,691 ops/sec [18,685..18,726] → 15,908 ops/sec [15,658..16,020] 🔴 -14.9%
Promise.allSettled (5 mixed) 13,594 ops/sec [13,495..14,095] → 13,845 ops/sec [13,525..13,902] ~ overlap (+1.8%) 15,065 ops/sec [13,931..15,369] → 12,942 ops/sec [12,700..13,143] 🔴 -14.1%
Promise.any (5 mixed) 16,163 ops/sec [15,573..16,849] → 16,109 ops/sec [15,870..16,487] ~ overlap (-0.3%) 16,442 ops/sec [16,143..16,746] → 15,325 ops/sec [15,156..15,473] 🔴 -6.8%
regexp.js — Interp: 🔴 3, 8 unch. · avg -17.4% · Bytecode: 🟢 6, 🔴 5 · avg -12.8%
Benchmark Interpreted Δ Bytecode Δ
regex literal creation 113,458 ops/sec [112,178..114,168] → 8,291 ops/sec [8,186..8,548] 🔴 -92.7% 105,736 ops/sec [104,923..108,318] → 8,304 ops/sec [8,137..8,374] 🔴 -92.1%
new RegExp(pattern, flags) 89,892 ops/sec [87,969..90,733] → 8,409 ops/sec [8,103..8,464] 🔴 -90.6% 102,733 ops/sec [101,481..103,883] → 8,260 ops/sec [8,191..8,384] 🔴 -92.0%
RegExp(existingRegex) returns the same regex 242,052 ops/sec [238,863..245,343] → 248,161 ops/sec [240,466..256,784] ~ overlap (+2.5%) 413,975 ops/sec [412,697..417,859] → 362,035 ops/sec [349,154..370,045] 🔴 -12.5%
test() on a global regex 40,805 ops/sec [40,551..40,871] → 41,190 ops/sec [39,934..42,439] ~ overlap (+0.9%) 48,710 ops/sec [48,316..49,072] → 44,110 ops/sec [43,610..44,705] 🔴 -9.4%
exec() with capture groups 15,855 ops/sec [15,586..16,007] → 15,758 ops/sec [15,508..15,977] ~ overlap (-0.6%) 14,836 ops/sec [14,749..15,036] → 16,517 ops/sec [16,411..16,617] 🟢 +11.3%
toString() 196,355 ops/sec [195,498..197,677] → 193,659 ops/sec [190,103..198,123] ~ overlap (-1.4%) 260,966 ops/sec [259,435..273,777] → 246,579 ops/sec [245,437..250,997] 🔴 -5.5%
match() with global regex 1,737 ops/sec [1,723..1,739] → 1,695 ops/sec [1,654..1,744] ~ overlap (-2.4%) 1,525 ops/sec [1,514..1,551] → 1,722 ops/sec [1,700..1,736] 🟢 +12.9%
matchAll() with capture groups 4,093 ops/sec [4,078..4,112] → 3,972 ops/sec [3,909..4,164] ~ overlap (-3.0%) 4,143 ops/sec [4,052..4,243] → 4,426 ops/sec [4,399..4,469] 🟢 +6.8%
replace() with global regex 1,710 ops/sec [1,688..1,720] → 1,684 ops/sec [1,679..1,712] ~ overlap (-1.5%) 1,522 ops/sec [1,477..1,543] → 1,717 ops/sec [1,700..1,718] 🟢 +12.8%
search() with regex 1,889 ops/sec [1,885..1,900] → 1,860 ops/sec [1,844..1,877] 🔴 -1.5% 1,629 ops/sec [1,624..1,635] → 1,881 ops/sec [1,873..1,892] 🟢 +15.5%
split() with regex separator 1,521 ops/sec [1,511..1,529] → 1,510 ops/sec [1,504..1,528] ~ overlap (-0.7%) 1,325 ops/sec [1,311..1,334] → 1,484 ops/sec [1,478..1,486] 🟢 +12.0%
strings.js — Interp: 🔴 8, 11 unch. · avg -2.7% · Bytecode: 🔴 15, 4 unch. · avg -7.1%
Benchmark Interpreted Δ Bytecode Δ
string concatenation 151,366 ops/sec [147,588..157,588] → 156,859 ops/sec [144,628..157,561] ~ overlap (+3.6%) 1,024,982 ops/sec [980,903..1,048,652] → 911,684 ops/sec [907,804..980,911] ~ overlap (-11.1%)
template literal 292,009 ops/sec [289,629..306,517] → 281,168 ops/sec [277,439..289,849] ~ overlap (-3.7%) 697,089 ops/sec [693,118..706,795] → 631,641 ops/sec [601,201..665,657] 🔴 -9.4%
string repeat 176,524 ops/sec [168,418..182,798] → 167,568 ops/sec [165,511..167,809] 🔴 -5.1% 214,169 ops/sec [211,037..218,420] → 204,221 ops/sec [201,270..207,323] 🔴 -4.6%
split and join 29,204 ops/sec [28,242..31,405] → 30,212 ops/sec [30,052..30,255] ~ overlap (+3.5%) 31,975 ops/sec [31,955..32,049] → 31,561 ops/sec [30,630..31,661] 🔴 -1.3%
indexOf and includes 55,136 ops/sec [54,608..55,649] → 51,856 ops/sec [51,132..52,404] 🔴 -5.9% 54,232 ops/sec [52,382..55,277] → 53,273 ops/sec [53,158..53,502] ~ overlap (-1.8%)
toUpperCase and toLowerCase 91,352 ops/sec [89,838..92,195] → 84,754 ops/sec [83,238..85,084] 🔴 -7.2% 93,589 ops/sec [92,614..96,241] → 93,171 ops/sec [92,238..93,914] ~ overlap (-0.4%)
slice and substring 56,185 ops/sec [55,382..56,745] → 51,309 ops/sec [50,637..51,430] 🔴 -8.7% 57,909 ops/sec [57,134..58,005] → 54,189 ops/sec [53,776..54,738] 🔴 -6.4%
trim operations 84,735 ops/sec [84,139..85,437] → 75,614 ops/sec [74,270..76,926] 🔴 -10.8% 85,313 ops/sec [83,010..87,779] → 79,720 ops/sec [77,684..81,085] 🔴 -6.6%
replace and replaceAll 81,398 ops/sec [79,288..81,823] → 78,809 ops/sec [77,969..79,737] ~ overlap (-3.2%) 81,682 ops/sec [78,501..83,280] → 74,425 ops/sec [73,433..77,829] 🔴 -8.9%
startsWith and endsWith 49,143 ops/sec [48,802..49,782] → 49,144 ops/sec [47,917..49,813] ~ overlap (+0.0%) 47,537 ops/sec [45,666..51,575] → 44,714 ops/sec [44,207..46,310] ~ overlap (-5.9%)
padStart and padEnd 73,448 ops/sec [71,145..74,788] → 72,546 ops/sec [72,110..73,245] ~ overlap (-1.2%) 79,010 ops/sec [78,435..81,766] → 73,589 ops/sec [72,177..74,852] 🔴 -6.9%
identity tag, no substitutions 155,287 ops/sec [151,935..160,294] → 159,011 ops/sec [158,129..162,408] ~ overlap (+2.4%) 610,268 ops/sec [605,170..615,343] → 532,994 ops/sec [529,360..536,017] 🔴 -12.7%
tag with 1 substitution 34,319 ops/sec [33,047..34,453] → 33,681 ops/sec [33,042..34,118] ~ overlap (-1.9%) 55,584 ops/sec [54,837..56,662] → 51,415 ops/sec [51,017..51,663] 🔴 -7.5%
tag with 3 substitutions 18,210 ops/sec [17,918..18,564] → 17,802 ops/sec [17,463..18,115] ~ overlap (-2.2%) 32,123 ops/sec [31,271..32,492] → 29,313 ops/sec [28,808..29,517] 🔴 -8.7%
tag with 6 substitutions 10,915 ops/sec [10,786..11,056] → 10,633 ops/sec [10,387..10,728] 🔴 -2.6% 19,454 ops/sec [19,223..19,619] → 17,283 ops/sec [16,998..17,382] 🔴 -11.2%
String.raw, no substitutions 221,646 ops/sec [218,791..226,976] → 220,431 ops/sec [196,349..224,689] ~ overlap (-0.5%) 244,427 ops/sec [242,743..246,871] → 233,532 ops/sec [231,009..235,980] 🔴 -4.5%
String.raw, 2 substitutions 162,040 ops/sec [160,246..165,511] → 159,375 ops/sec [155,359..160,166] 🔴 -1.6% 161,895 ops/sec [160,479..163,361] → 145,167 ops/sec [142,731..146,277] 🔴 -10.3%
tag accessing .raw array 67,245 ops/sec [65,941..68,950] → 65,406 ops/sec [64,484..66,282] ~ overlap (-2.7%) 93,987 ops/sec [93,395..94,873] → 85,533 ops/sec [83,819..86,742] 🔴 -9.0%
method as tag (this binding) 25,650 ops/sec [25,183..25,970] → 24,782 ops/sec [24,373..25,017] 🔴 -3.4% 41,059 ops/sec [40,440..41,990] → 37,491 ops/sec [37,023..37,611] 🔴 -8.7%
tsv.js — Interp: 🟢 1, 🔴 1, 7 unch. · avg -0.2% · Bytecode: 🔴 8, 1 unch. · avg -7.6%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column TSV 48,496 ops/sec [47,179..50,380] → 48,587 ops/sec [47,745..49,224] ~ overlap (+0.2%) 53,235 ops/sec [52,876..54,307] → 50,439 ops/sec [50,002..50,743] 🔴 -5.3%
parse 10-row TSV 13,637 ops/sec [13,343..14,126] → 13,748 ops/sec [13,275..13,952] ~ overlap (+0.8%) 14,467 ops/sec [14,220..15,113] → 13,766 ops/sec [13,395..14,088] 🔴 -4.8%
parse 100-row TSV 2,164 ops/sec [2,142..2,214] → 2,156 ops/sec [2,098..2,200] ~ overlap (-0.4%) 2,236 ops/sec [2,190..2,266] → 2,148 ops/sec [2,122..2,159] 🔴 -3.9%
parse TSV with backslash-escaped fields 9,961 ops/sec [9,833..10,106] → 10,084 ops/sec [9,713..10,396] ~ overlap (+1.2%) 10,529 ops/sec [10,337..11,016] → 10,136 ops/sec [9,935..10,528] ~ overlap (-3.7%)
parse without headers (array of arrays) 6,246 ops/sec [6,169..6,304] → 5,902 ops/sec [5,833..5,913] 🔴 -5.5% 6,270 ops/sec [6,188..6,319] → 5,784 ops/sec [5,733..5,874] 🔴 -7.7%
stringify array of objects 41,139 ops/sec [40,912..41,393] → 40,967 ops/sec [40,547..41,229] ~ overlap (-0.4%) 47,093 ops/sec [45,302..47,957] → 41,457 ops/sec [40,806..41,859] 🔴 -12.0%
stringify array of arrays 12,277 ops/sec [12,036..12,402] → 11,939 ops/sec [11,548..12,257] ~ overlap (-2.8%) 13,293 ops/sec [13,220..13,563] → 11,828 ops/sec [11,598..11,879] 🔴 -11.0%
stringify with values needing escaping 32,400 ops/sec [32,119..32,605] → 33,872 ops/sec [32,676..34,155] 🟢 +4.5% 37,068 ops/sec [36,706..37,532] → 32,521 ops/sec [32,211..32,968] 🔴 -12.3%
parse then stringify 7,485 ops/sec [7,357..7,564] → 7,499 ops/sec [7,324..7,583] ~ overlap (+0.2%) 8,066 ops/sec [7,943..8,171] → 7,469 ops/sec [7,388..7,539] 🔴 -7.4%
typed-arrays.js — Interp: 🟢 5, 🔴 2, 15 unch. · avg +9.7% · Bytecode: 🟢 1, 🔴 20, 1 unch. · avg -12.5%
Benchmark Interpreted Δ Bytecode Δ
new Int32Array(0) 119,087 ops/sec [116,481..122,557] → 118,302 ops/sec [116,219..119,818] ~ overlap (-0.7%) 149,474 ops/sec [144,881..155,567] → 136,429 ops/sec [133,362..142,542] 🔴 -8.7%
new Int32Array(100) 111,269 ops/sec [110,677..112,270] → 111,672 ops/sec [110,857..111,829] ~ overlap (+0.4%) 140,894 ops/sec [136,100..142,768] → 129,668 ops/sec [127,068..132,159] 🔴 -8.0%
new Int32Array(1000) 83,222 ops/sec [82,681..84,746] → 85,013 ops/sec [83,395..86,449] ~ overlap (+2.2%) 95,184 ops/sec [93,374..97,217] → 94,002 ops/sec [93,265..95,653] ~ overlap (-1.2%)
new Float64Array(100) 105,953 ops/sec [105,551..106,567] → 107,332 ops/sec [105,521..108,288] ~ overlap (+1.3%) 132,522 ops/sec [129,091..134,962] → 120,899 ops/sec [118,710..127,811] 🔴 -8.8%
Int32Array.from([...]) 4,986 ops/sec [4,945..5,047] → 5,192 ops/sec [5,146..5,283] 🟢 +4.1% 5,587 ops/sec [5,475..5,694] → 4,993 ops/sec [4,909..5,131] 🔴 -10.6%
Int32Array.of(1, 2, 3, 4, 5) 130,018 ops/sec [128,300..133,460] → 133,438 ops/sec [132,672..133,794] ~ overlap (+2.6%) 160,339 ops/sec [158,539..160,893] → 154,384 ops/sec [152,070..155,453] 🔴 -3.7%
sequential write 100 elements 1,437 ops/sec [1,419..1,452] → 1,473 ops/sec [1,454..1,496] 🟢 +2.5% 7,061 ops/sec [7,013..7,321] → 6,233 ops/sec [6,171..6,276] 🔴 -11.7%
sequential read 100 elements 1,537 ops/sec [1,518..1,551] → 1,535 ops/sec [1,513..1,556] ~ overlap (-0.1%) 7,196 ops/sec [6,970..7,998] → 6,136 ops/sec [6,117..6,254] 🔴 -14.7%
Float64Array write 100 elements 1,318 ops/sec [1,309..1,324] → 1,336 ops/sec [1,322..1,347] ~ overlap (+1.3%) 7,265 ops/sec [7,228..7,313] → 4,205 ops/sec [4,172..4,221] 🔴 -42.1%
fill(42) 25,185 ops/sec [24,702..25,289] → 26,817 ops/sec [26,728..26,914] 🟢 +6.5% 27,899 ops/sec [27,826..28,065] → 26,808 ops/sec [26,714..26,960] 🔴 -3.9%
slice() 109,308 ops/sec [107,803..110,643] → 108,448 ops/sec [107,553..110,238] ~ overlap (-0.8%) 137,144 ops/sec [130,196..137,764] → 125,093 ops/sec [124,268..125,899] 🔴 -8.8%
map(x => x * 2) 2,603 ops/sec [2,530..2,622] → 2,646 ops/sec [2,620..2,663] ~ overlap (+1.6%) 4,392 ops/sec [4,384..4,485] → 4,067 ops/sec [4,042..4,141] 🔴 -7.4%
filter(x => x > 50) 2,635 ops/sec [2,609..2,646] → 2,741 ops/sec [2,633..2,766] ~ overlap (+4.0%) 5,008 ops/sec [4,891..5,137] → 4,514 ops/sec [4,500..4,533] 🔴 -9.9%
reduce (sum) 2,625 ops/sec [2,620..2,636] → 2,655 ops/sec [2,634..2,686] ~ overlap (+1.1%) 4,251 ops/sec [4,196..6,995] → 3,863 ops/sec [3,830..3,902] 🔴 -9.1%
sort() 100,220 ops/sec [99,144..104,492] → 101,250 ops/sec [100,435..102,151] ~ overlap (+1.0%) 122,374 ops/sec [119,544..126,187] → 110,452 ops/sec [109,953..110,912] 🔴 -9.7%
indexOf() 193,739 ops/sec [186,232..195,126] → 199,118 ops/sec [198,699..199,421] 🟢 +2.8% 248,223 ops/sec [247,206..248,711] → 232,319 ops/sec [225,784..232,874] 🔴 -6.4%
reverse() 160,903 ops/sec [159,450..162,333] → 156,137 ops/sec [154,554..156,503] 🔴 -3.0% 205,083 ops/sec [202,489..205,827] → 180,688 ops/sec [179,811..180,822] 🔴 -11.9%
create view over existing buffer 137,503 ops/sec [136,957..138,075] → 135,307 ops/sec [133,544..136,319] 🔴 -1.6% 173,420 ops/sec [172,295..174,341] → 157,545 ops/sec [156,430..158,100] 🔴 -9.2%
subarray() 182,353 ops/sec [181,141..184,615] → 294,620 ops/sec [176,280..297,391] ~ overlap (+61.6%) 369,229 ops/sec [361,387..373,614] → 208,678 ops/sec [207,064..210,202] 🔴 -43.5%
set() from array 207,886 ops/sec [206,144..208,837] → 347,405 ops/sec [346,043..349,526] 🟢 +67.1% 483,480 ops/sec [482,355..484,397] → 251,493 ops/sec [249,949..252,437] 🔴 -48.0%
for-of loop 2,274 ops/sec [2,236..3,704] → 3,613 ops/sec [3,592..3,619] ~ overlap (+58.8%) 17,394 ops/sec [17,361..17,701] → 17,959 ops/sec [17,821..18,040] 🟢 +3.2%
spread into array 14,604 ops/sec [14,223..14,812] → 14,626 ops/sec [14,426..14,753] ~ overlap (+0.2%) 60,773 ops/sec [60,153..61,088] → 59,779 ops/sec [59,647..59,947] 🔴 -1.6%
uint8array-encoding.js — Interp: 🟢 4, 🔴 4, 10 unch. · avg +4.9% · Bytecode: 🟢 10, 🔴 3, 5 unch. · avg +24.2%
Benchmark Interpreted Δ Bytecode Δ
short (5 bytes) 271,422 ops/sec [268,105..273,466] → 271,722 ops/sec [268,425..273,937] ~ overlap (+0.1%) 405,483 ops/sec [403,741..415,107] → 367,682 ops/sec [364,354..374,492] 🔴 -9.3%
medium (450 bytes) 159,664 ops/sec [158,921..160,334] → 161,477 ops/sec [158,937..163,006] ~ overlap (+1.1%) 188,386 ops/sec [181,689..193,646] → 186,720 ops/sec [183,999..187,008] ~ overlap (-0.9%)
large (4096 bytes) 35,790 ops/sec [34,034..35,889] → 35,419 ops/sec [34,138..35,885] ~ overlap (-1.0%) 34,044 ops/sec [33,303..34,839] → 35,986 ops/sec [35,536..36,931] 🟢 +5.7%
base64url alphabet 112,003 ops/sec [111,827..113,521] → 114,063 ops/sec [111,546..114,144] ~ overlap (+1.8%) 117,538 ops/sec [115,759..121,686] → 112,207 ops/sec [112,016..112,369] 🔴 -4.5%
omitPadding 162,987 ops/sec [161,741..163,865] → 260,672 ops/sec [252,903..263,367] 🟢 +59.9% 197,616 ops/sec [194,447..199,706] → 287,477 ops/sec [286,212..289,773] 🟢 +45.5%
short (8 chars) 146,617 ops/sec [144,071..226,857] → 233,900 ops/sec [229,676..235,697] 🟢 +59.5% 172,708 ops/sec [171,592..173,494] → 249,661 ops/sec [248,654..250,511] 🟢 +44.6%
medium (600 chars) 119,089 ops/sec [118,565..119,977] → 121,708 ops/sec [119,074..121,971] ~ overlap (+2.2%) 79,344 ops/sec [78,950..80,817] → 116,986 ops/sec [116,701..117,524] 🟢 +47.4%
large (5464 chars) 25,365 ops/sec [24,419..25,445] → 14,517 ops/sec [14,434..15,129] 🔴 -42.8% 14,548 ops/sec [14,529..14,891] → 24,979 ops/sec [24,582..25,116] 🟢 +71.7%
short (5 bytes) 443,632 ops/sec [441,805..446,557] → 275,356 ops/sec [274,134..277,300] 🔴 -37.9% 478,101 ops/sec [468,378..487,382] → 759,405 ops/sec [756,141..764,489] 🟢 +58.8%
medium (450 bytes) 222,082 ops/sec [220,586..224,083] → 137,161 ops/sec [136,093..140,262] 🔴 -38.2% 174,354 ops/sec [173,687..175,003] → 276,419 ops/sec [275,058..276,665] 🟢 +58.5%
large (4096 bytes) 43,050 ops/sec [42,899..43,144] → 26,405 ops/sec [26,018..27,039] 🔴 -38.7% 28,310 ops/sec [28,125..29,159] → 44,970 ops/sec [44,197..45,184] 🟢 +58.8%
short (10 chars) 160,809 ops/sec [154,819..247,029] → 159,243 ops/sec [158,049..161,176] ~ overlap (-1.0%) 184,877 ops/sec [182,777..186,210] → 276,394 ops/sec [269,970..277,864] 🟢 +49.5%
medium (900 chars) 104,347 ops/sec [103,502..105,570] → 108,050 ops/sec [105,333..109,260] ~ overlap (+3.5%) 194,728 ops/sec [191,364..196,336] → 190,199 ops/sec [187,282..191,789] ~ overlap (-2.3%)
large (8192 chars) 28,155 ops/sec [26,823..28,479] → 27,610 ops/sec [26,525..27,880] ~ overlap (-1.9%) 44,464 ops/sec [27,690..48,058] → 53,186 ops/sec [50,689..53,584] 🟢 +19.6%
setFromBase64 (450 bytes) 71,782 ops/sec [71,491..72,057] → 72,165 ops/sec [71,963..72,403] ~ overlap (+0.5%) 137,273 ops/sec [82,853..137,577] → 126,554 ops/sec [125,655..128,426] ~ overlap (-7.8%)
setFromHex (450 bytes) 100,205 ops/sec [99,434..100,900] → 102,001 ops/sec [100,966..102,963] 🟢 +1.8% 186,532 ops/sec [185,369..187,893] → 185,056 ops/sec [183,632..185,686] ~ overlap (-0.8%)
toBase64 → fromBase64 (450 bytes) 57,733 ops/sec [57,439..58,376] → 89,083 ops/sec [57,530..90,333] ~ overlap (+54.3%) 89,861 ops/sec [89,702..90,982] → 88,400 ops/sec [86,666..88,583] 🔴 -1.6%
toHex → fromHex (450 bytes) 69,718 ops/sec [66,381..69,871] → 115,079 ops/sec [112,751..115,301] 🟢 +65.1% 115,976 ops/sec [115,376..117,212] → 118,375 ops/sec [115,883..119,466] ~ overlap (+2.1%)
weak-collections.js — Interp: 🟢 2, 🔴 5, 8 unch. · avg +5.8% · Bytecode: 🔴 15 · avg -28.7%
Benchmark Interpreted Δ Bytecode Δ
constructor from 50 entries 11,502 ops/sec [11,309..11,921] → 12,139 ops/sec [11,864..12,270] ~ overlap (+5.5%) 13,935 ops/sec [13,832..14,047] → 12,374 ops/sec [12,199..12,433] 🔴 -11.2%
set 50 object keys 4,449 ops/sec [4,413..4,625] → 4,252 ops/sec [4,209..4,351] 🔴 -4.4% 6,280 ops/sec [6,258..6,314] → 5,729 ops/sec [5,702..5,759] 🔴 -8.8%
get lookups (50 entries) 59,242 ops/sec [58,562..60,393] → 57,734 ops/sec [57,359..58,043] 🔴 -2.5% 96,508 ops/sec [94,389..97,024] → 85,981 ops/sec [84,549..86,875] 🔴 -10.9%
has checks (50 entries) 76,504 ops/sec [75,594..79,027] → 74,277 ops/sec [73,150..75,925] ~ overlap (-2.9%) 205,785 ops/sec [121,905..208,228] → 109,294 ops/sec [109,033..109,670] 🔴 -46.9%
delete entries 4,107 ops/sec [4,085..4,130] → 3,973 ops/sec [3,957..4,081] 🔴 -3.2% 10,271 ops/sec [10,220..10,368] → 5,741 ops/sec [5,709..5,754] 🔴 -44.1%
non-registered symbol keys 10,170 ops/sec [10,068..10,217] → 10,641 ops/sec [9,586..16,304] ~ overlap (+4.6%) 24,818 ops/sec [24,224..25,164] → 13,267 ops/sec [13,129..13,372] 🔴 -46.5%
getOrInsert 4,127 ops/sec [4,087..4,160] → 6,476 ops/sec [6,440..6,666] 🟢 +56.9% 9,105 ops/sec [8,245..9,222] → 5,142 ops/sec [5,114..5,219] 🔴 -43.5%
getOrInsertComputed 2,500 ops/sec [2,102..3,269] → 3,257 ops/sec [3,215..3,278] ~ overlap (+30.3%) 4,566 ops/sec [4,408..4,580] → 2,717 ops/sec [2,654..2,741] 🔴 -40.5%
forced gc live-key retention 6,766 ops/sec [6,728..6,799] → 6,669 ops/sec [6,618..6,703] 🔴 -1.4% 5,592 ops/sec [5,526..5,833] → 5,030 ops/sec [4,775..5,098] 🔴 -10.0%
constructor from 50 values 25,396 ops/sec [25,251..25,484] → 26,059 ops/sec [25,299..26,218] ~ overlap (+2.6%) 29,848 ops/sec [28,738..30,964] → 16,026 ops/sec [15,938..16,551] 🔴 -46.3%
add 50 object values 7,660 ops/sec [7,587..7,735] → 7,490 ops/sec [7,336..7,545] 🔴 -2.2% 6,950 ops/sec [6,906..7,010] → 6,286 ops/sec [6,236..6,337] 🔴 -9.6%
has checks (50 values) 124,398 ops/sec [123,382..124,786] → 123,334 ops/sec [122,344..123,486] ~ overlap (-0.9%) 124,604 ops/sec [123,742..124,724] → 115,881 ops/sec [113,510..116,569] 🔴 -7.0%
delete values 19,376 ops/sec [19,184..19,468] → 20,362 ops/sec [19,963..20,469] 🟢 +5.1% 15,986 ops/sec [15,554..16,328] → 13,995 ops/sec [13,757..14,128] 🔴 -12.5%
non-registered symbol values 16,895 ops/sec [16,621..17,011] → 16,984 ops/sec [16,637..17,090] ~ overlap (+0.5%) 26,154 ops/sec [14,962..26,446] → 13,810 ops/sec [13,681..13,894] 🔴 -47.2%
forced gc pruning smoke 8,343 ops/sec [8,180..8,522] → 8,294 ops/sec [8,226..8,371] ~ overlap (-0.6%) 11,506 ops/sec [11,382..11,696] → 6,336 ops/sec [6,227..6,377] 🔴 -44.9%

Deterministic profile diff

Deterministic profile diff: no significant changes.

Measured on ubuntu-latest x64. Benchmark ranges compare cached main-branch min/max ops/sec with the PR run; overlapping ranges are treated as unchanged noise. Percentage deltas are secondary context.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 10, 2026

test262 Conformance

🚫 Regression vs cached main baseline. 66 previously-passing test(s) now fail; pass count Δ +65. This run blocks merge — see "Newly failing" below.

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,449 14,938 +20 8,505 63.7% +0.1pp
harness 116 71 ±0 45 61.2% ±0pp
intl402 3,324 732 +41 2,592 22.0% +1.2pp
language 23,635 12,575 ±0 11,060 53.2% ±0pp
staging 1,484 492 +4 990 33.2% +0.3pp
total 52,008 28,808 +65 23,192 55.4% +0.1pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
built-ins/WeakSet 98.8% ±0pp 84 / 85
built-ins/WeakMap 98.6% ±0pp 139 / 141
language/asi 97.1% ±0pp 99 / 102
Per-test deltas (+131 / -66)

Newly failing (66):

  • built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js
  • built-ins/RegExp/property-escapes/generated/Dash.js
  • built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Kawi.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Khitan_Small_Script.js
  • built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js
  • built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js
  • built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js
  • intl402/Collator/prototype/compare/non-normative-basic.js
  • intl402/Collator/prototype/compare/non-normative-sensitivity.js
  • intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js
  • intl402/DateTimeFormat/prototype/formatToParts/related-year-zh.js
  • intl402/DateTimeFormat/prototype/formatToParts/time-clip-to-integer.js
  • intl402/Intl/getCanonicalLocales/grandfathered.js
  • intl402/NumberFormat/prototype/format/format-rounding-increment-1000.js
  • intl402/NumberFormat/prototype/format/format-rounding-increment-2000.js
  • intl402/NumberFormat/prototype/format/format-rounding-increment-2500.js
  • intl402/NumberFormat/prototype/format/format-rounding-increment-5000.js
  • intl402/NumberFormat/prototype/format/format-rounding-priority-less-precision.js
  • intl402/NumberFormat/prototype/format/format-rounding-priority-more-precision.js
  • intl402/NumberFormat/test-option-roundingPriority-mixed-options.js
  • intl402/supportedLocalesOf-unicode-extensions-ignored.js

Newly passing (131):

  • built-ins/Number/prototype/toExponential/undefined-fractiondigits.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js
  • built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js
  • built-ins/RegExp/property-escapes/special-property-value-Script_Extensions-Unknown.js
  • built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-lower-w.js
  • built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-upper-p.js
  • built-ins/RegExp/unicode_full_case_folding.js
  • built-ins/String/prototype/toLocaleLowerCase/Final_Sigma_U180E.js
  • built-ins/String/prototype/toLocaleLowerCase/special_casing_conditional.js
  • built-ins/String/prototype/toLocaleUpperCase/special_casing.js
  • intl402/Collator/ignore-invalid-unicode-ext-values.js
  • intl402/Collator/supportedLocalesOf/basic.js
  • intl402/Collator/unicode-ext-value-collation.js
  • intl402/DateTimeFormat/default-options-object-prototype.js
  • intl402/DateTimeFormat/prototype/resolvedOptions/order-fractionalSecondDigits.js
  • intl402/DateTimeFormat/supportedLocalesOf/basic.js
  • intl402/default-locale-is-supported.js
  • intl402/DurationFormat/supportedLocalesOf/basic.js
  • intl402/DurationFormat/supportedLocalesOf/locales-specific.js
  • intl402/Intl/getCanonicalLocales/non-iana-canon.js
  • intl402/Intl/supportedValuesOf/calendars-accepted-by-DisplayNames.js
  • intl402/ListFormat/constructor/supportedLocalesOf/basic.js
  • intl402/ListFormat/constructor/supportedLocalesOf/result-type.js
  • intl402/Locale/constructor-non-iana-canon.js
  • intl402/Locale/constructor-options-numeric-undefined.js
  • intl402/Locale/constructor-unicode-ext-valid.js
  • intl402/Locale/prototype/minimize/removing-likely-subtags-first-adds-likely-subtags.js
  • intl402/NumberFormat/constructor-compactDisplay-compact.js
  • intl402/NumberFormat/constructor-default-value.js
  • intl402/NumberFormat/constructor-notation.js
  • intl402/NumberFormat/constructor-options-throwing-getters-rounding-increment.js
  • intl402/NumberFormat/constructor-options-throwing-getters-rounding-priority.js
  • intl402/NumberFormat/constructor-options-throwing-getters-trailing-zero-display.js
  • intl402/NumberFormat/constructor-roundingIncrement.js
  • intl402/NumberFormat/constructor-signDisplay.js
  • intl402/NumberFormat/constructor-trailingZeroDisplay.js
  • intl402/NumberFormat/default-options-object-prototype.js
  • intl402/NumberFormat/prototype/format/format-negative-numbers.js
  • … 31 more

Steady-state failures are non-blocking; regressions vs the cached main baseline (lower total pass count, or any PASS → non-PASS transition) fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached main baseline.

…crement

Configure ICU number formatter with ECMA-402 options by passing
minimumIntegerDigits, fraction digits, significant digits, useGrouping,
roundingMode, and roundingIncrement through to ICU via unum_setAttribute,
unum_applyPattern, and engine-side rounding increment arithmetic.

Use unum_applyPattern with '@' notation for significant digits mode,
since unum_setAttribute(UNUM_SIGNIFICANT_DIGITS_USED) has no effect
on Apple ICU. Implement rounding increment in Pascal using integer-scaled
arithmetic to avoid IEEE 754 precision issues and ICU portability gaps.

Fix ICU symbol resolution on Linux where libraries export versioned
symbols (e.g. unum_open_76). Store the version suffix discovered during
library loading and try versioned names when bare lookups fail.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@frostney frostney force-pushed the issue-595-intl-resolved-options branch from 98bba51 to 48953ca Compare May 11, 2026 07:15
frostney and others added 3 commits May 11, 2026 23:07
The ICU symbol resolution fix causes uset_* functions to load on
Linux for the first time. The system ICU may ship a different Unicode
version than the embedded tables were generated from, producing
mismatches for 52 property-escape tests. Swap the lookup order so
embedded data is tried first and ICU is the fallback for properties
not in the embedded tables.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

Intl: resolvedOptions() missing required fields across all constructors

1 participant