From 4d67672ef2c5d8d4a7526a451d416b4de94dc40a Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Sun, 28 Jun 2026 20:50:05 +0900 Subject: [PATCH 1/2] std.regex: drop redundant bmatch run from the test suite match and bmatch are equivalent (both pick the engine from the pattern), so running run_tests!match() only. --- std/regex/internal/tests.d | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/std/regex/internal/tests.d b/std/regex/internal/tests.d index 6b739050d85..4a694b94f25 100644 --- a/std/regex/internal/tests.d +++ b/std/regex/internal/tests.d @@ -465,7 +465,6 @@ debug(std_regex_test) import std.stdio; } ct_tests(); - run_tests!bmatch(); //backtracker - run_tests!match(); //thompson VM + run_tests!match(); } From b2562f5fabe1567f053eb72ce8169a3424d34156 Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Sun, 28 Jun 2026 20:50:05 +0900 Subject: [PATCH 2/2] std.regex: add internal helper to run tests through the backtracking engine --- std/regex/internal/tests.d | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/std/regex/internal/tests.d b/std/regex/internal/tests.d index 4a694b94f25..536bbb30d2b 100644 --- a/std/regex/internal/tests.d +++ b/std/regex/internal/tests.d @@ -464,7 +464,17 @@ debug(std_regex_test) import std.stdio; debug(std_regex_test) writeln("!!! FReD C-T test done !!!"); } + // Force the backtracking engine to exercise it on every pattern. + auto bmatchForced(R, RegEx)(R input, RegEx re) + { + import std.regex.internal.ir : RuntimeFactory, BasicElementOf; + import std.regex.internal.backtracking : BacktrackingMatcher; + alias Char = BasicElementOf!R; + return match(input, re.withFactory(new RuntimeFactory!(BacktrackingMatcher, Char))); + } + ct_tests(); - run_tests!match(); + run_tests!match(); // engine auto-selected per pattern + run_tests!bmatchForced(); // force the backtracking engine on every pattern }