1 | #include <regex.h> |
2 | #include <stdio.h> |
3 | #include <string.h> |
4 | |
5 | #define str "civic" |
6 | |
7 | #define N 10 |
8 | static const char *expected[N] = |
9 | { |
10 | str, "c" , "i" , "" , "" , "" , "" , "" , "" , "" |
11 | }; |
12 | |
13 | static int |
14 | do_test (void) |
15 | { |
16 | regex_t rbuf; |
17 | static const char pat[] = "\ |
18 | ^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$" ; |
19 | |
20 | int err = regcomp (preg: &rbuf, pattern: pat, REG_EXTENDED); |
21 | if (err != 0) |
22 | { |
23 | char errstr[300]; |
24 | regerror (errcode: err, preg: &rbuf, errbuf: errstr, errbuf_size: sizeof (errstr)); |
25 | puts (s: errstr); |
26 | return err; |
27 | } |
28 | |
29 | regmatch_t m[N]; |
30 | err = regexec (preg: &rbuf, str, N, pmatch: m, eflags: 0); |
31 | if (err != 0) |
32 | { |
33 | puts (s: "regexec failed" ); |
34 | return 1; |
35 | } |
36 | |
37 | int result = 0; |
38 | for (int i = 0; i < N; ++i) |
39 | if (m[i].rm_so == -1) |
40 | { |
41 | printf (format: "m[%d] unused\n" , i); |
42 | result = 1; |
43 | } |
44 | else |
45 | { |
46 | int len = m[i].rm_eo - m[i].rm_so; |
47 | |
48 | printf (format: "m[%d] = \"%.*s\"\n" , i, len, str + m[i].rm_so); |
49 | |
50 | if (strlen (expected[i]) != len |
51 | || memcmp (expected[i], str + m[i].rm_so, len) != 0) |
52 | result = 1; |
53 | } |
54 | |
55 | return result; |
56 | } |
57 | |
58 | #define TIMEOUT 30 |
59 | #define TEST_FUNCTION do_test () |
60 | #include "../test-skeleton.c" |
61 | |