From 414fa60033cb80396fbcf1139651916f4ab84223 Mon Sep 17 00:00:00 2001 From: Marko Lahma Date: Sun, 17 May 2026 12:29:11 +0300 Subject: [PATCH] Serialize Atomics.waitAsync test262 group instead of excluding it Test262Harness 1.0.6 (lahma/test262-harness-dotnet#142) adds NonParallel{Features,Flags,Files} options that emit [NonParallelizable] on selected generated test methods, overriding the inherited [Parallelizable(ParallelScope.All)]. Use it here for the Atomics.waitAsync suite: previously the no-spurious-wakeup-on- exchange.js case was excluded wholesale because Task.Delay-driven timeout resolution on loaded Windows runners can fire a few ms shy of the requested $262.agent.timeouts.small (200ms), tripping the lapse >= TIMEOUT assertion when the test ran alongside other CPU- bound suites. Serialising the whole Atomics_WaitAsync group is a softer fix that restores test coverage of the previously-disabled case while keeping the rest of the suite parallel. Bump Test262Harness package and the test262harness.console tool manifest to 1.0.6 so the generator emits the new attribute. Verified [NonParallelizable] lands on exactly the two generated methods (Atomics/waitAsync root and bigint subdir) and nowhere else. Co-Authored-By: Claude Opus 4.7 (1M context) --- Directory.Packages.props | 2 +- Jint.Tests.Test262/.config/dotnet-tools.json | 2 +- .../Test262Harness.settings.json | 20 ++++++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index ca44f664ad..22b60c8fdb 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -31,7 +31,7 @@ - + diff --git a/Jint.Tests.Test262/.config/dotnet-tools.json b/Jint.Tests.Test262/.config/dotnet-tools.json index d03ea04024..14114ea56a 100644 --- a/Jint.Tests.Test262/.config/dotnet-tools.json +++ b/Jint.Tests.Test262/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "test262harness.console": { - "version": "1.0.4", + "version": "1.0.6", "commands": [ "test262" ] diff --git a/Jint.Tests.Test262/Test262Harness.settings.json b/Jint.Tests.Test262/Test262Harness.settings.json index 97dd99cce0..9527d1aae1 100644 --- a/Jint.Tests.Test262/Test262Harness.settings.json +++ b/Jint.Tests.Test262/Test262Harness.settings.json @@ -97,15 +97,17 @@ "intl402/Temporal/ZonedDateTime/prototype/daysInYear/basic-islamic-umalqura.js", "intl402/Temporal/ZonedDateTime/prototype/inLeapYear/basic-islamic-umalqura.js", "intl402/Temporal/ZonedDateTime/prototype/with/basic-islamic-umalqura.js", - "intl402/Temporal/ZonedDateTime/prototype/withCalendar/extreme-dates.js", - - // === ATOMICS WAITASYNC TIMING FLAKES === - // The no-spurious-wakeup-* siblings all assert `lapse >= TIMEOUT` where - // TIMEOUT is $262.agent.timeouts.small (200ms). On slow/loaded Windows CI - // runners, Task.Delay-driven timeout resolution can complete a few ms shy - // of the requested interval (Windows timer-tick granularity), producing - // a non-deterministic failure even though the implementation is correct. - "built-ins/Atomics/waitAsync/no-spurious-wakeup-on-exchange.js" + "intl402/Temporal/ZonedDateTime/prototype/withCalendar/extreme-dates.js" + ], + // Timing-sensitive suites: serialise the whole generated test method instead of + // disabling individual cases. The Atomics.waitAsync no-spurious-wakeup-* tests + // assert `lapse >= TIMEOUT` where TIMEOUT is $262.agent.timeouts.small (200ms); + // under [Parallelizable(ParallelScope.All)] on loaded Windows CI runners, + // Task.Delay-driven timeout resolution can complete a few ms shy of the + // requested interval (timer-tick granularity), producing non-deterministic + // failures even though the implementation is correct. + "NonParallelFeatures": [ + "Atomics.waitAsync" ] }