/* Test whether ERE subexpressions works. */ #include "suite.h" int main(void) { cflags = REG_EXTENDED; matches("(a)", "a", 2, (M[]) { m(0, 1), m(0, 1) }); reject("(a)", "b"); matches("(b)", "abc", 2, (M[]) { m(1, 2), m(1, 2) }); matches("(b)(c)", "abc", 3, (M[]) { m(1, 3), m(1, 2), m(2, 3) }); matches("(ab(cd)ef)", "abcdef", 3, (M[]) { m(0, 6), m(0, 6), m(2, 4) }); matches("a(b(cd)e)f", "abcdef", 3, (M[]) { m(0, 6), m(1, 5), m(2, 4) }); matches("a(aa)(aa)a", "aaaaaa", 3, (M[]) { m(0, 6), m(1, 3), m(3, 5) }); reject("a(aa)(aa)a", "abcdef"); matches("a(bc)(de)f", "abcdef", 3, (M[]) { m(0, 6), m(1, 3), m(3, 5) }); reject("a(bc)(de)f", "aaaaaa"); matches("a(b(c)d)(e(f)g)h", "abcdefgh", 5, (M[]) { m(0, 8), m(1, 4), m(2, 3), m(4, 7), m(5, 6) }); matches("a(b(c)d)(e(f)g)h", "abcdefghxyz", 5, (M[]) { m(0, 8), m(1, 4), m(2, 3), m(4, 7), m(5, 6) }); reject("a(b(c)d)(e(f)g)h", "abcdefgx"); matches("a(b(c(d)))", "abcd", 4, (M[]) { m(0, 4), m(1, 4), m(2, 4), m(3, 4) }); matches("(((a)b)c)d", "abcd", 4, (M[]) { m(0, 4), m(0, 3), m(0, 2), m(0, 1) }); match(")", ")"); reject(")", "("); matches("(x))", "x)", 2, (M[]) { m(0, 2), m(0, 1) }); reject("(x))", "x"); return 0; }