/* Test whether ERE intervals work combined with subexpressions. */ #include "suite.h" int main(void) { cflags = REG_EXTENDED; matches("(a{0,1})(b{0,1})", "", 3, (M[]) { m(0, 0), m(0, 0), m(0, 0) }); matches("(a{0,1})(b{0,1})", "a", 3, (M[]) { m(0, 1), m(0, 1), m(1, 1) }); matches("(a{0,1})(b{0,1})", "b", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "aa", 3, (M[]) { m(0, 1), m(0, 1), m(1, 1) }); matches("(a{0,1})(b{0,1})", "ab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{0,1})(b{0,1})", "ba", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "bb", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "aaa", 3, (M[]) { m(0, 1), m(0, 1), m(1, 1) }); matches("(a{0,1})(b{0,1})", "aab", 3, (M[]) { m(0, 1), m(0, 1), m(1, 1) }); matches("(a{0,1})(b{0,1})", "aba", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{0,1})(b{0,1})", "abb", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{0,1})(b{0,1})", "baa", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "bab", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "bba", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); matches("(a{0,1})(b{0,1})", "bbb", 3, (M[]) { m(0, 1), m(0, 0), m(0, 1) }); reject("(a{1,2})(b{1,2})", ""); reject("(a{1,2})(b{1,2})", "a"); reject("(a{1,2})(b{1,2})", "b"); reject("(a{1,2})(b{1,2})", "aa"); matches("(a{1,2})(b{1,2})", "ab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); reject("(a{1,2})(b{1,2})", "ba"); reject("(a{1,2})(b{1,2})", "bb"); reject("(a{1,2})(b{1,2})", "aaa"); matches("(a{1,2})(b{1,2})", "aab", 3, (M[]) { m(0, 3), m(0, 2), m(2, 3) }); matches("(a{1,2})(b{1,2})", "aba", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{1,2})(b{1,2})", "abb", 3, (M[]) { m(0, 3), m(0, 1), m(1, 3) }); reject("(a{1,2})(b{1,2})", "baa"); matches("(a{1,2})(b{1,2})", "bab", 3, (M[]) { m(1, 3), m(1, 2), m(2, 3) }); reject("(a{1,2})(b{1,2})", "bba"); reject("(a{1,2})(b{1,2})", "bbb"); reject("(a{1,2})(b{1,2})", "aaaa"); matches("(a{1,2})(b{1,2})", "aaab", 3, (M[]) { m(1, 4), m(1, 3), m(3, 4) }); matches("(a{1,2})(b{1,2})", "aaba", 3, (M[]) { m(0, 3), m(0, 2), m(2, 3) }); matches("(a{1,2})(b{1,2})", "aabb", 3, (M[]) { m(0, 4), m(0, 2), m(2, 4) }); matches("(a{1,2})(b{1,2})", "abaa", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{1,2})(b{1,2})", "abab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{1,2})(b{1,2})", "abba", 3, (M[]) { m(0, 3), m(0, 1), m(1, 3) }); matches("(a{1,2})(b{1,2})", "abbb", 3, (M[]) { m(0, 3), m(0, 1), m(1, 3) }); reject("(a{1,2})(b{1,2})", "baaa"); matches("(a{1,2})(b{1,2})", "baab", 3, (M[]) { m(1, 4), m(1, 3), m(3, 4) }); matches("(a{1,2})(b{1,2})", "baba", 3, (M[]) { m(1, 3), m(1, 2), m(2, 3) }); matches("(a{1,2})(b{1,2})", "babb", 3, (M[]) { m(1, 4), m(1, 2), m(2, 4) }); reject("(a{1,2})(b{1,2})", "bbaa"); matches("(a{1,2})(b{1,2})", "bbab", 3, (M[]) { m(2, 4), m(2, 3), m(3, 4) }); reject("(a{1,2})(b{1,2})", "bbba"); reject("(a{1,2})(b{1,2})", "bbbb"); matches("(a){0,1}(b){0,1}", "", 3, (M[]) { m(0, 0), m(-1, -1), m(-1, -1) }); matches("(a){0,1}(b){0,1}", "a", 3, (M[]) { m(0, 1), m(0, 1), m(-1, -1) }); matches("(a){0,1}(b){0,1}", "b", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "aa", 3, (M[]) { m(0, 1), m(0, 1), m(-1, -1) }); matches("(a){0,1}(b){0,1}", "ab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){0,1}(b){0,1}", "ba", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "bb", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "aaa", 3, (M[]) { m(0, 1), m(0, 1), m(-1, -1) }); matches("(a){0,1}(b){0,1}", "aab", 3, (M[]) { m(0, 1), m(0, 1), m(-1, -1) }); matches("(a){0,1}(b){0,1}", "aba", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){0,1}(b){0,1}", "abb", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){0,1}(b){0,1}", "baa", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "bab", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "bba", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); matches("(a){0,1}(b){0,1}", "bbb", 3, (M[]) { m(0, 1), m(-1, -1), m(0, 1) }); reject("(a){1,2}(b){1,2}", ""); reject("(a){1,2}(b){1,2}", "a"); reject("(a){1,2}(b){1,2}", "b"); reject("(a){1,2}(b){1,2}", "aa"); matches("(a){1,2}(b){1,2}", "ab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); reject("(a){1,2}(b){1,2}", "ba"); reject("(a){1,2}(b){1,2}", "bb"); reject("(a){1,2}(b){1,2}", "aaa"); matches("(a){1,2}(b){1,2}", "aab", 3, (M[]) { m(0, 3), m(1, 2), m(2, 3) }); matches("(a){1,2}(b){1,2}", "aba", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){1,2}(b){1,2}", "abb", 3, (M[]) { m(0, 3), m(0, 1), m(2, 3) }); reject("(a){1,2}(b){1,2}", "baa"); matches("(a){1,2}(b){1,2}", "bab", 3, (M[]) { m(1, 3), m(1, 2), m(2, 3) }); reject("(a){1,2}(b){1,2}", "bba"); reject("(a){1,2}(b){1,2}", "bbb"); reject("(a){1,2}(b){1,2}", "aaaa"); matches("(a){1,2}(b){1,2}", "aaab", 3, (M[]) { m(1, 4), m(2, 3), m(3, 4) }); matches("(a){1,2}(b){1,2}", "aaba", 3, (M[]) { m(0, 3), m(1, 2), m(2, 3) }); matches("(a){1,2}(b){1,2}", "aabb", 3, (M[]) { m(0, 4), m(1, 2), m(3, 4) }); matches("(a){1,2}(b){1,2}", "abaa", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){1,2}(b){1,2}", "abab", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){1,2}(b){1,2}", "abba", 3, (M[]) { m(0, 3), m(0, 1), m(2, 3) }); matches("(a){1,2}(b){1,2}", "abbb", 3, (M[]) { m(0, 3), m(0, 1), m(2, 3) }); reject("(a){1,2}(b){1,2}", "baaa"); matches("(a){1,2}(b){1,2}", "baab", 3, (M[]) { m(1, 4), m(2, 3), m(3, 4) }); matches("(a){1,2}(b){1,2}", "baba", 3, (M[]) { m(1, 3), m(1, 2), m(2, 3) }); matches("(a){1,2}(b){1,2}", "babb", 3, (M[]) { m(1, 4), m(1, 2), m(3, 4) }); reject("(a){1,2}(b){1,2}", "bbaa"); matches("(a){1,2}(b){1,2}", "bbab", 3, (M[]) { m(2, 4), m(2, 3), m(3, 4) }); reject("(a){1,2}(b){1,2}", "bbba"); reject("(a){1,2}(b){1,2}", "bbbb"); reject("(a{1,2})(a{1,2})", ""); reject("(a{1,2})(a{1,2})", "a"); matches("(a{1,2})(a{1,2})", "aa", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a{1,2})(a{1,2})", "aaa", 3, (M[]) { m(0, 3), m(0, 2), m(2, 3) }); matches("(a{1,2})(a{1,2})", "aaaa", 3, (M[]) { m(0, 4), m(0, 2), m(2, 4) }); matches("(a{1,2})(a{1,2})", "aaaaa", 3, (M[]) { m(0, 4), m(0, 2), m(2, 4) }); reject("(a){1,2}(a){1,2}", ""); reject("(a){1,2}(a){1,2}", "a"); matches("(a){1,2}(a){1,2}", "aa", 3, (M[]) { m(0, 2), m(0, 1), m(1, 2) }); matches("(a){1,2}(a){1,2}", "aaa", 3, (M[]) { m(0, 3), m(1, 2), m(2, 3) }); matches("(a){1,2}(a){1,2}", "aaaa", 3, (M[]) { m(0, 4), m(1, 2), m(3, 4) }); matches("(a){1,2}(a){1,2}", "aaaaa", 3, (M[]) { m(0, 4), m(1, 2), m(3, 4) }); reject("(ab){1,2}", ""); reject("(ab){1,2}", "a"); matches("(ab){1,2}", "ab", 2, (M[]) { m(0, 2), m(0, 2) }); matches("(ab){1,2}", "aba", 2, (M[]) { m(0, 2), m(0, 2) }); matches("(ab){1,2}", "abab", 2, (M[]) { m(0, 4), m(2, 4) }); reject("(a((a{1,2}){1,2}))", ""); reject("(a((a{1,2}){1,2}))", "a"); matches("(a((a{1,2}){1,2}))", "aa", 4, (M[]) { m(0, 2), m(0, 2), m(1, 2), m(1, 2) }); matches("(a((a{1,2}){1,2}))", "aaa", 4, (M[]) { m(0, 3), m(0, 3), m(1, 3), m(1, 3) }); matches("(a((a{1,2}){1,2}))", "aaaa", 4, (M[]) { m(0, 4), m(0, 4), m(1, 4), m(3, 4) }); matches("(a((a{1,2}){1,2}))", "aaaaa", 4, (M[]) { m(0, 5), m(0, 5), m(1, 5), m(3, 5) }); matches("(a((a{1,2}){1,2}))", "aaaaaa", 4, (M[]) { m(0, 5), m(0, 5), m(1, 5), m(3, 5) }); reject("(a){1,2}ab", ""); reject("(a){1,2}ab", "a"); reject("(a){1,2}ab", "b"); reject("(a){1,2}ab", "aa"); reject("(a){1,2}ab", "ab"); matches("(a){1,2}ab", "aab", 2, (M[]) { m(0, 3), m(0, 1) }); matches("(a){1,2}ab", "aaab", 2, (M[]) { m(0, 4), m(1, 2) }); reject("(a{1,2})ab", ""); reject("(a{1,2})ab", "a"); reject("(a{1,2})ab", "b"); reject("(a{1,2})ab", "aa"); reject("(a{1,2})ab", "ab"); matches("(a{1,2})ab", "aab", 2, (M[]) { m(0, 3), m(0, 1) }); matches("(a{1,2})ab", "aaab", 2, (M[]) { m(0, 4), m(0, 2) }); matches("(a{1,2})ab", "aaaab", 2, (M[]) { m(1, 5), m(1, 3) }); return 0; }