summaryrefslogtreecommitdiff
path: root/tests/test-grammar-integration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-grammar-integration.cpp')
-rw-r--r--tests/test-grammar-integration.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/test-grammar-integration.cpp b/tests/test-grammar-integration.cpp
index 01c5bb27..9bdab05a 100644
--- a/tests/test-grammar-integration.cpp
+++ b/tests/test-grammar-integration.cpp
@@ -292,6 +292,82 @@ static void test_quantifiers() {
"catyyy",
}
);
+ test_grammar(
+ "simple exact repetition",
+ // Grammar
+ R"""(
+ root ::= [ab]{4}
+ )""",
+ // Passing strings
+ {
+ "aaaa",
+ "bbbb",
+ "abab",
+ },
+ // Failing strings
+ {
+ "a",
+ "b",
+ "aaaaa",
+ }
+ );
+ test_grammar(
+ "simple min repetition",
+ // Grammar
+ R"""(
+ root ::= [ab]{4,}
+ )""",
+ // Passing strings
+ {
+ "aaaa",
+ "aaaaab",
+ "bbbb",
+ "ababab",
+ },
+ // Failing strings
+ {
+ "",
+ "aba",
+ }
+ );
+ test_grammar(
+ "simple max repetition",
+ // Grammar
+ R"""(
+ root ::= [ab]{0,4}
+ )""",
+ // Passing strings
+ {
+ "",
+ "a",
+ "aa",
+ "aaa",
+ "aaab",
+ },
+ // Failing strings
+ {
+ "aaaaa",
+ }
+ );
+ test_grammar(
+ "min / max repetition",
+ // Grammar
+ R"""(
+ root ::= ("0x" [A-F0-9]{2} " "?){3,5}
+ )""",
+ // Passing strings
+ {
+ "0xFF 0x12 0xAB",
+ "0xFF 0x12 0xAB 0x00 0x00",
+ },
+ // Failing strings
+ {
+ "",
+ "0xFF",
+ "0xFF 0x12",
+ "0xFF 0x12 0xAB 0x00 0x00 0x00",
+ }
+ );
}
static void test_failure_missing_root() {