5 #include "libre9/re9.h"
8 static void TEST (const char *re
, const char *s
, int start
, int size
) {
12 p
= re9_compile(re
, RE9_FLAG_NONUTF8
, &errmsg
);
13 if (p
== NULL
) { fprintf(stderr
, "FATAL: invalid regexp '%s': %s\n", re
, errmsg
); return; }
14 if (re9_execute(p
, RE9_FLAG_NONUTF8
, s
, rs
, 10)) {
15 if (rs
[0].sp
-s
!= start
|| rs
[0].ep
-s
!= start
+size
) {
16 printf("ERROR: re=<%s>; s=<%s> %u %u (%d %d)\n", re
, s
, rs
[0].sp
-s
, rs
[0].ep
-s
, start
, start
+size
);
18 printf("OK: re=<%s>; s=<%s>\n", re
, s
);
22 printf("ERROR: re=<%s>; s=<%s> %u %u (%d %d)\n", re
, s
, rs
[0].sp
-s
, rs
[0].ep
-s
, start
, start
+size
);
24 printf("OK: re=<%s>; s=<%s>\n", re
, s
);
34 TEST("aa", "a", -1, 0);
35 TEST("aa", "aaaaa", 0, 2);
36 TEST("baa", "aaaaa", -1, 0);
37 TEST("aab", "aa", -1, 0);
38 TEST("aab", "caaab", 2, 3);
39 TEST("ab*a", "caaabbba", 1, 2);
40 TEST("acb*a", "aaacbbba", 2, 6);
41 TEST("ab+a", "aaabbba", 2, 5);
42 TEST("b[0-9]", "aabbab123bba", 5, 2);
43 TEST("b[0-9]?", "ab", 1, 1);
44 TEST("b[0-9]?", "ab5", 1, 2);
45 TEST("b[0-9]?c", "ab5c", 1, 3);
46 TEST("b[0-9]?c", "abc", 1, 2);
47 TEST("a[0-9]+", "a", -1, 0);
48 TEST("a[0-9]+", "a1", 0, 2);
49 TEST("a[0-9]+", "a123", 0, 4);
50 TEST("b[0-9]+", "aabbab123bba", 5, 4);
51 TEST("a[0-9]*", "ab", 0, 1);
52 TEST("a[0-9]*", "a123b", 0, 4);
53 TEST("a[0-9]*?", "ab", 0, 1);
54 TEST("a[0-9]*?", "a123", 0, 1);
55 TEST("a[0-9]*?c", "a123c", 0, 5);
56 TEST("a[0-9]*?[0-9]", "a123", 0, 2);
58 TEST("a.*c", "abc", 0, 3);
60 TEST("\\.", "a", -1, 0);
61 TEST("\\.", ".", 0, 1);
62 TEST("\\^", "a", -1, 0);
63 TEST("\\^", "a^", 1, 1);
64 TEST("\\$", "a", -1, 0);
65 TEST("\\$", "a$a", 1, 1);