/*[nonstandard]*/ /* Test whether BRE alternations work combined with subexpressions. */ #include "suite.h" int main(void) { cflags = 0; reject("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", ""); matches("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "a", 7, (M[]) { m(0, 1), m(0, 1), m(1, 1), m(-1, -1), m(-1, -1), m(-1, -1), m(-1, -1) }); reject("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "b"); matches("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "aa", 7, (M[]) { m(0, 2), m(-1, -1), m(-1, -1), m(-1, -1), m(0, 2), m(0, 1), m(1, 2) }); matches("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "ab", 7, (M[]) { m(0, 2), m(0, 2), m(1, 2), m(-1, -1), m(-1, -1), m(-1, -1), m(-1, -1) }); matches("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "ba", 7, (M[]) { m(0, 2), m(-1, -1), m(-1, -1), m(0, 2), m(-1, -1), m(-1, -1), m(-1, -1) }); matches("\\(a\\(b*\\)\\)\\|\\(ba\\)\\|\\(\\(b\\|a\\)\\(a\\|b\\)\\)", "bb", 7, (M[]) { m(0, 2), m(-1, -1), m(-1, -1), m(-1, -1), m(0, 2), m(0, 1), m(1, 2) }); matches("\\(fo\\|foo\\)\\(obars\\|bar\\)", "foobar", 3, (M[]) { m(0, 6), m(0, 3), m(3, 6) }); matches("\\(fo\\|foo\\)\\(obars\\|bar\\)", "foobars", 3, (M[]) { m(0, 7), m(0, 2), m(2, 7) }); matches("\\(a\\)\\|\\(a\\)", "a", 3, (M[]) { m(0, 1), m(0, 1), m(-1, -1) }); return 0; }