From a5fec6f1a2458d289e0678edf6e5cc4d53e851da Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 9 Oct 2025 06:06:07 +0100 Subject: [PATCH] add tests for escape sequences --- fcore/search-list/dfa-gen.sml | 1 - test/regex-tests.sml | 40 ++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/fcore/search-list/dfa-gen.sml b/fcore/search-list/dfa-gen.sml index 6686bb7..7551ee5 100644 --- a/fcore/search-list/dfa-gen.sml +++ b/fcore/search-list/dfa-gen.sml @@ -157,7 +157,6 @@ struct | #"f" => (true, #"\f") | #"r" => (true, #"\r") | #"\\" => (true, chr) - | #"\"" => (true, chr) | _ => (false, chr) fun getCharsBetween (lowChr, highChr, acc) = diff --git a/test/regex-tests.sml b/test/regex-tests.sml index 35cbb78..2fcddaa 100644 --- a/test/regex-tests.sml +++ b/test/regex-tests.sml @@ -119,5 +119,43 @@ struct Expect.isTrue (actualLength = expectedLength) end)] - val tests = [caseInsensitiveTests, caseSensitiveTests, endMarkerTests] + fun recogniseEscapeSequence (regexString, inputString) = + let + (* arrange *) + val dfa = CiDfa.fromString regexString + + (* act *) + val matches = CiDfa.matchString (dfa, inputString) + + (* assert *) + val expectedMatches = [(6, 6)] + in + Expect.isTrue (matches = expectedMatches) + end + + val escapeSequenceTests = describe "regex escape sequences" + [ test "recognises alert" (fn _ => + recogniseEscapeSequence ("\\a", "hello \a world")) + , test "recognises backspace" (fn _ => + recogniseEscapeSequence ("\\b", "hello \b world")) + , test "recognises tab" (fn _ => + recogniseEscapeSequence ("\\t", "hello \t world")) + , test "recognises newline" (fn _ => + recogniseEscapeSequence ("\\n", "hello \n world")) + , test "recognises vertical tab" (fn _ => + recogniseEscapeSequence ("\\v", "hello \v world")) + , test "recognises form feed" (fn _ => + recogniseEscapeSequence ("\\f", "hello \f world")) + , test "recognises carriage return" (fn _ => + recogniseEscapeSequence ("\\r", "hello \r world")) + , test "recognises backslash" (fn _ => + recogniseEscapeSequence ("\\\\", "hello \\ world")) + ] + + val tests = + [ caseInsensitiveTests + , caseSensitiveTests + , endMarkerTests + , escapeSequenceTests + ] end