added re9_subst() and sample for it
[libre9.git] / src / test2.c
blob324f2af19d2f318c3ed9c806182a1340bcdd964f
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
5 #include "libre9/re9.h"
8 static void TEST (const char *re, const char *s, int start, int size) {
9 re9_sub_t rs[10];
10 re9_prog_t *p;
11 const char *errmsg;
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);
17 } else {
18 printf("OK: re=<%s>; s=<%s>\n", re, s);
20 } else {
21 if (start >= 0) {
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);
23 } else {
24 printf("OK: re=<%s>; s=<%s>\n", re, s);
27 re9_free(p);
31 int main() {
32 TEST("", "a", 0, 0);
33 TEST("a", "a", 0, 1);
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);
67 return 0;