This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,132 @@
open Import
(*
* Tests based on description of emacs regular expressions given at
* http://www.gnu.org/manual/elisp-manual-20-2.5/html_chapter/elisp_34.html
*)
let re re = Format.printf "%a@." Re.pp (Re.Emacs.re re)
let%expect_test "not supported" =
let re s =
try ignore (Re.Emacs.re s) with
| Re.Emacs.Parse_error -> print_endline "Parse error"
| Re.Emacs.Not_supported -> print_endline "Not supported"
in
re "*ab";
[%expect {| Parse error |}];
re "+ab";
[%expect {| Parse error |}];
re "?ab";
[%expect {| Parse error |}];
re "\\0";
[%expect {| Not supported |}]
;;
let%expect_test "escaping special characters" =
re "\\.";
[%expect {| (Set 46) |}];
re "\\*";
[%expect {| (Set 42) |}];
re "\\+";
[%expect {| (Set 43) |}];
re "\\?";
[%expect {| (Set 63) |}];
re "\\[";
[%expect {| (Set 91) |}];
re "\\]";
[%expect {| (Set 93) |}];
re "\\^";
[%expect {| (Set 94) |}];
re "\\$";
[%expect {| (Set 36) |}];
re "\\\\";
[%expect {| (Set 92) |}]
;;
let%expect_test "special characeters" =
re ".";
[%expect {| (Set 0-9, 11-255) |}];
re "a*";
[%expect {| (Repeat (Set 97) 0) |}];
re "a+";
[%expect {| (Repeat (Set 97) 1) |}];
re "a?";
[%expect {| (Repeat (Set 97) 0 1) |}];
re "[ab]";
[%expect {| (Alternative (Set 98)(Set 97)) |}];
re "[a-z]";
[%expect {| (Set 97-122) |}];
re "[a-z$%.]";
[%expect {| (Alternative (Set 46)(Set 37)(Set 36)(Set 97-122)) |}];
re "[]a]";
[%expect {| (Alternative (Set 97)(Set 93)) |}];
re "[]-]";
[%expect {| (Alternative (Set 93)(Set 45)) |}];
re "[a^]";
[%expect {| (Alternative (Set 94)(Set 97)) |}];
re "[^a-z]";
[%expect {| (Complement (Set 97-122)) |}];
re "[^a-z$]";
[%expect {| (Complement (Set 36)(Set 97-122)) |}];
re "^";
[%expect {| Beg_of_line |}];
re "$";
[%expect {| End_of_line |}]
;;
let%expect_test "alternatives" =
re "a\\|b";
[%expect {| (Alternative (Set 97)(Set 98)) |}];
re "aa\\|bb";
[%expect {| (Alternative (Sequence (Set 97)(Set 97))(Sequence (Set 98)(Set 98))) |}]
;;
let%expect_test "contexts" =
re "\\`";
[%expect {| Beg_of_str |}];
re "\\'";
[%expect {| End_of_str |}];
re "\\=";
[%expect {| Start |}];
re "\\b";
[%expect {| (Alternative Beg_of_wordEnd_of_word) |}];
re "\\B";
[%expect {| Not_bound |}];
re "\\<";
[%expect {| Beg_of_word |}];
re "\\>";
[%expect {| End_of_word |}]
;;
let%expect_test "word-constituent" =
re "\\w";
[%expect
{|
(Alternative
(Set 48-57, 65-90, 97-122, 170, 181, 186, 192-214, 216-246, 248-255)
(Set 95)) |}];
re "\\W";
[%expect
{|
(Complement
(Set 48-57, 65-90, 97-122, 170, 181, 186, 192-214, 216-246, 248-255)
(Set 95)) |}]
;;
let%expect_test "grouping" =
re "\\(a\\)";
[%expect {| (Group (Set 97)) |}];
re "\\(a\\|b\\)c";
[%expect {| (Sequence (Group (Alternative (Set 97)(Set 98)))(Set 99)) |}]
;;
let%expect_test "concatenation" =
re "ab";
[%expect {| (Sequence (Set 97)(Set 98)) |}]
;;
let%expect_test "ordinary characters" =
re "a";
[%expect {| (Set 97) |}]
;;