From 9cbf2edce598255988bc7a5134f51a291ee29e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Sun, 11 Jan 2026 16:06:11 +0100 Subject: [PATCH 1/4] Add tests for Roman numeral regex validation --- src/canonicalize.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index df52f56c..ac56ac97 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -6540,6 +6540,21 @@ mod canonicalize_tests { assert!(are_strs_canonically_equal(test_str, target_str, &[])); } + #[test] + fn test_roman_numeral_regex() { + // has a duplicate ^ anchor: ^\s*^ which causes the bug + + assert!(UPPER_ROMAN_NUMERAL.is_match("XII")); + assert!(UPPER_ROMAN_NUMERAL.is_match("V ")); + assert!(UPPER_ROMAN_NUMERAL.is_match(" XII")); + assert!(UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); + + assert!(LOWER_ROMAN_NUMERAL.is_match("xii")); + assert!(LOWER_ROMAN_NUMERAL.is_match("v ")); + assert!(LOWER_ROMAN_NUMERAL.is_match(" xii")); + assert!(LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); + } + } From 183f8d22eec1f56525fed3b213b41c49a44266be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Sun, 11 Jan 2026 16:10:58 +0100 Subject: [PATCH 2/4] . --- src/canonicalize.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index ac56ac97..0cbeb178 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -6546,13 +6546,13 @@ mod canonicalize_tests { assert!(UPPER_ROMAN_NUMERAL.is_match("XII")); assert!(UPPER_ROMAN_NUMERAL.is_match("V ")); - assert!(UPPER_ROMAN_NUMERAL.is_match(" XII")); - assert!(UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); + assert!(UPPER_ROMAN_NUMERAL.is_match(" XII")); // fails + assert!(UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); // fails assert!(LOWER_ROMAN_NUMERAL.is_match("xii")); assert!(LOWER_ROMAN_NUMERAL.is_match("v ")); - assert!(LOWER_ROMAN_NUMERAL.is_match(" xii")); - assert!(LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); + assert!(LOWER_ROMAN_NUMERAL.is_match(" xii")); // fails + assert!(LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); // fails } From f0919a2db3cdf1377716ce550131f94c441a56e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Mon, 12 Jan 2026 15:13:14 +0100 Subject: [PATCH 3/4] . --- src/canonicalize.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 5dcd7a04..33d29bf8 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -6528,17 +6528,15 @@ mod canonicalize_tests { #[test] fn test_roman_numeral_regex() { - // has a duplicate ^ anchor: ^\s*^ which causes the bug - assert!(UPPER_ROMAN_NUMERAL.is_match("XII")); assert!(UPPER_ROMAN_NUMERAL.is_match("V ")); - assert!(UPPER_ROMAN_NUMERAL.is_match(" XII")); // fails - assert!(UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); // fails + assert!(!UPPER_ROMAN_NUMERAL.is_match(" XII")); + assert!(!UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); assert!(LOWER_ROMAN_NUMERAL.is_match("xii")); assert!(LOWER_ROMAN_NUMERAL.is_match("v ")); - assert!(LOWER_ROMAN_NUMERAL.is_match(" xii")); // fails - assert!(LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); // fails + assert!(!LOWER_ROMAN_NUMERAL.is_match(" xii")); + assert!(!LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); } From b4f52f9156a7a6ec3630ac12c57622a629d1ba42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Mon, 12 Jan 2026 15:17:40 +0100 Subject: [PATCH 4/4] . --- src/canonicalize.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 33d29bf8..de81bdfa 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -6530,12 +6530,12 @@ mod canonicalize_tests { fn test_roman_numeral_regex() { assert!(UPPER_ROMAN_NUMERAL.is_match("XII")); assert!(UPPER_ROMAN_NUMERAL.is_match("V ")); - assert!(!UPPER_ROMAN_NUMERAL.is_match(" XII")); + assert!(!UPPER_ROMAN_NUMERAL.is_match(" II")); assert!(!UPPER_ROMAN_NUMERAL.is_match(" MCMXCIX ")); assert!(LOWER_ROMAN_NUMERAL.is_match("xii")); assert!(LOWER_ROMAN_NUMERAL.is_match("v ")); - assert!(!LOWER_ROMAN_NUMERAL.is_match(" xii")); + assert!(!LOWER_ROMAN_NUMERAL.is_match(" ii")); assert!(!LOWER_ROMAN_NUMERAL.is_match(" mcmxcix ")); }