/* Test whether BRE REG_ICASE works. */ #include "suite.h" int main(void) { cflags = 0; match("a", "a"); reject("a", "A"); reject("a", "b"); reject("a", "B"); reject("A", "a"); match("A", "A"); reject("A", "b"); reject("A", "B"); match(".", "a"); match(".", "A"); match("^a", "a"); reject("^a", "A"); reject("^a", "b"); reject("^a", "B"); reject("^A", "a"); match("^A", "A"); reject("^A", "b"); reject("^A", "B"); match("a$", "a"); reject("a$", "A"); reject("a$", "b"); reject("a$", "B"); reject("A$", "a"); match("A$", "A"); reject("A$", "b"); reject("A$", "B"); match("[a]", "a"); reject("[a]", "A"); reject("[a]", "b"); reject("[a]", "B"); match("[aB]", "a"); reject("[aB]", "A"); reject("[aB]", "b"); match("[aB]", "B"); reject("[aB]", "c"); reject("[aB]", "C"); match("[a-f]", "a"); reject("[a-f]", "A"); match("[a-f]", "d"); reject("[a-f]", "D"); match("[a-f]", "f"); reject("[a-f]", "F"); reject("[a-f]", "g"); reject("[a-f]", "G"); match("[A-f]", "A"); match("[A-f]", "a"); match("[A-f]", "D"); match("[A-f]", "d"); match("[A-f]", "F"); match("[A-f]", "f"); match("[A-f]", "G"); reject("[A-f]", "g"); match("[A-f]", "Z"); reject("[A-f]", "z"); match("[A-f]", "^"); reject("[A-f]", "|"); match("[[.a.]]", "a"); reject("[[.a.]]", "A"); reject("[[.a.]]", "b"); reject("[[.a.]]", "B"); match("[[.A.]-[.f.]]", "A"); match("[[.A.]-[.f.]]", "a"); match("[[.A.]-[.f.]]", "D"); match("[[.A.]-[.f.]]", "d"); match("[[.A.]-[.f.]]", "F"); match("[[.A.]-[.f.]]", "f"); match("[[.A.]-[.f.]]", "G"); reject("[[.A.]-[.f.]]", "g"); match("[[.A.]-[.f.]]", "Z"); reject("[[.A.]-[.f.]]", "z"); match("[[.A.]-[.f.]]", "^"); reject("[[.A.]-[.f.]]", "|"); match("[[=a=]]", "a"); reject("[[=a=]]", "A"); reject("[[=a=]]", "b"); reject("[[=a=]]", "B"); reject("[^a]", "a"); match("[^a]", "A"); match("[^a]", "b"); match("[^a]", "B"); reject("[^aB]", "a"); match("[^aB]", "A"); match("[^aB]", "b"); reject("[^aB]", "B"); match("[^aB]", "c"); match("[^aB]", "C"); reject("[^a-f]", "a"); match("[^a-f]", "A"); reject("[^a-f]", "d"); match("[^a-f]", "D"); reject("[^a-f]", "f"); match("[^a-f]", "F"); match("[^a-f]", "g"); match("[^a-f]", "G"); reject("[^A-f]", "A"); reject("[^A-f]", "a"); reject("[^A-f]", "D"); reject("[^A-f]", "d"); reject("[^A-f]", "F"); reject("[^A-f]", "f"); reject("[^A-f]", "G"); match("[^A-f]", "g"); reject("[^A-f]", "Z"); match("[^A-f]", "z"); reject("[^A-f]", "^"); match("[^A-f]", "|"); reject("[^[.a.]]", "a"); match("[^[.a.]]", "A"); match("[^[.a.]]", "b"); match("[^[.a.]]", "B"); reject("[^[.A.]-[.f.]]", "A"); reject("[^[.A.]-[.f.]]", "a"); reject("[^[.A.]-[.f.]]", "D"); reject("[^[.A.]-[.f.]]", "d"); reject("[^[.A.]-[.f.]]", "F"); reject("[^[.A.]-[.f.]]", "f"); reject("[^[.A.]-[.f.]]", "G"); match("[^[.A.]-[.f.]]", "g"); reject("[^[.A.]-[.f.]]", "Z"); match("[^[.A.]-[.f.]]", "z"); reject("[^[.A.]-[.f.]]", "^"); match("[^[.A.]-[.f.]]", "|"); reject("[^[=a=]]", "a"); match("[^[=a=]]", "A"); match("[^[=a=]]", "b"); match("[^[=a=]]", "B"); match("a*", ""); match("a*", "a"); partial("a*", "A", m(0, 0)); partial("a*", "b", m(0, 0)); partial("a*", "B", m(0, 0)); match("a*", "aa"); partial("a*", "aA", m(0, 1)); partial("a*", "ab", m(0, 1)); partial("a*", "aB", m(0, 1)); partial("a*", "Aa", m(0, 0)); partial("a*", "AA", m(0, 0)); partial("a*", "Ab", m(0, 0)); partial("a*", "AB", m(0, 0)); partial("a*", "ba", m(0, 0)); partial("a*", "bA", m(0, 0)); partial("a*", "bb", m(0, 0)); partial("a*", "bB", m(0, 0)); partial("a*", "Ba", m(0, 0)); partial("a*", "BA", m(0, 0)); partial("a*", "Bb", m(0, 0)); partial("a*", "BB", m(0, 0)); reject("a\\{2\\}", ""); reject("a\\{2\\}", "a"); reject("a\\{2\\}", "A"); reject("a\\{2\\}", "b"); reject("a\\{2\\}", "B"); match("a\\{2\\}", "aa"); reject("a\\{2\\}", "aA"); reject("a\\{2\\}", "ab"); reject("a\\{2\\}", "aB"); reject("a\\{2\\}", "Aa"); reject("a\\{2\\}", "AA"); reject("a\\{2\\}", "Ab"); reject("a\\{2\\}", "AB"); reject("a\\{2\\}", "ba"); reject("a\\{2\\}", "bA"); reject("a\\{2\\}", "bb"); reject("a\\{2\\}", "bB"); reject("a\\{2\\}", "Ba"); reject("a\\{2\\}", "BA"); reject("a\\{2\\}", "Bb"); reject("a\\{2\\}", "BB"); matches("\\(a\\)", "a", 2, (M[]) { m(0, 1), m(0, 1) }); reject("\\(a\\)", "A"); reject("\\(a\\)", "b"); reject("\\(a\\)", "B"); reject("\\(A\\)", "a"); matches("\\(A\\)", "A", 2, (M[]) { m(0, 1), m(0, 1) }); reject("\\(A\\)", "b"); reject("\\(A\\)", "B"); cflags = 0 | REG_ICASE; match("a", "a"); match("a", "A"); reject("a", "b"); reject("a", "B"); match("A", "a"); match("A", "A"); reject("A", "b"); reject("A", "B"); match(".", "a"); match(".", "A"); match("^a", "a"); match("^a", "A"); reject("^a", "b"); reject("^a", "B"); match("^A", "a"); match("^A", "A"); reject("^A", "b"); reject("^A", "B"); match("a$", "a"); match("a$", "A"); reject("a$", "b"); reject("a$", "B"); match("A$", "a"); match("A$", "A"); reject("A$", "b"); reject("A$", "B"); match("[a]", "a"); match("[a]", "A"); reject("[a]", "b"); reject("[a]", "B"); match("[aB]", "a"); match("[aB]", "A"); match("[aB]", "b"); match("[aB]", "B"); reject("[aB]", "c"); reject("[aB]", "C"); match("[a-f]", "a"); match("[a-f]", "A"); match("[a-f]", "d"); match("[a-f]", "D"); match("[a-f]", "f"); match("[a-f]", "F"); reject("[a-f]", "g"); reject("[a-f]", "G"); match("[A-f]", "A"); match("[A-f]", "a"); match("[A-f]", "D"); match("[A-f]", "d"); match("[A-f]", "F"); match("[A-f]", "f"); // glibc reinterpets [A-f] as [a-f] but POSIX.1-2024 sections 9.2 and 4.1 // only talk about changing the case of the input string, not the pattern. // In that case, [A-f] should continue to be interpreted under ASCII as the // [][A-Z\]^_`a-f] pattern, and then each of those would have their both of // their case codepoints added. #if 1 match("[A-f]", "G"); match("[A-f]", "g"); match("[A-f]", "Z"); match("[A-f]", "z"); match("[A-f]", "^"); #endif reject("[A-f]", "|"); match("[[.a.]]", "a"); match("[[.a.]]", "A"); reject("[[.a.]]", "b"); reject("[[.a.]]", "B"); match("[[.A.]-[.f.]]", "A"); match("[[.A.]-[.f.]]", "a"); match("[[.A.]-[.f.]]", "D"); match("[[.A.]-[.f.]]", "d"); match("[[.A.]-[.f.]]", "F"); match("[[.A.]-[.f.]]", "f"); #if 1 match("[[.A.]-[.f.]]", "G"); match("[[.A.]-[.f.]]", "g"); match("[[.A.]-[.f.]]", "Z"); match("[[.A.]-[.f.]]", "z"); match("[[.A.]-[.f.]]", "^"); #endif reject("[[.A.]-[.f.]]", "|"); match("[[=a=]]", "a"); match("[[=a=]]", "A"); reject("[[=a=]]", "b"); reject("[[=a=]]", "B"); reject("[^a]", "a"); reject("[^a]", "A"); match("[^a]", "b"); match("[^a]", "B"); reject("[^aB]", "a"); reject("[^aB]", "A"); reject("[^aB]", "b"); reject("[^aB]", "B"); match("[^aB]", "c"); match("[^aB]", "C"); reject("[^a-f]", "a"); reject("[^a-f]", "A"); reject("[^a-f]", "d"); reject("[^a-f]", "D"); reject("[^a-f]", "f"); reject("[^a-f]", "F"); match("[^a-f]", "g"); match("[^a-f]", "G"); reject("[^A-f]", "A"); reject("[^A-f]", "a"); reject("[^A-f]", "D"); reject("[^A-f]", "d"); reject("[^A-f]", "F"); reject("[^A-f]", "f"); #if 1 reject("[^A-f]", "G"); reject("[^A-f]", "g"); reject("[^A-f]", "Z"); reject("[^A-f]", "z"); reject("[^A-f]", "^"); #endif match("[^A-f]", "|"); reject("[^[.a.]]", "a"); reject("[^[.a.]]", "A"); match("[^[.a.]]", "b"); match("[^[.a.]]", "B"); reject("[^[.A.]-[.f.]]", "A"); reject("[^[.A.]-[.f.]]", "a"); reject("[^[.A.]-[.f.]]", "D"); reject("[^[.A.]-[.f.]]", "d"); reject("[^[.A.]-[.f.]]", "F"); reject("[^[.A.]-[.f.]]", "f"); #if 1 reject("[^[.A.]-[.f.]]", "G"); reject("[^[.A.]-[.f.]]", "g"); reject("[^[.A.]-[.f.]]", "Z"); reject("[^[.A.]-[.f.]]", "z"); reject("[^[.A.]-[.f.]]", "^"); #endif match("[^[.A.]-[.f.]]", "|"); reject("[^[=a=]]", "a"); reject("[^[=a=]]", "A"); match("[^[=a=]]", "b"); match("[^[=a=]]", "B"); match("a*", ""); match("a*", "a"); match("a*", "A"); partial("a*", "b", m(0, 0)); partial("a*", "B", m(0, 0)); match("a*", "aa"); match("a*", "aA"); partial("a*", "ab", m(0, 1)); partial("a*", "aB", m(0, 1)); match("a*", "Aa"); match("a*", "AA"); partial("a*", "Ab", m(0, 1)); partial("a*", "AB", m(0, 1)); partial("a*", "ba", m(0, 0)); partial("a*", "bA", m(0, 0)); partial("a*", "bb", m(0, 0)); partial("a*", "bB", m(0, 0)); partial("a*", "Ba", m(0, 0)); partial("a*", "BA", m(0, 0)); partial("a*", "Bb", m(0, 0)); partial("a*", "BB", m(0, 0)); reject("a\\{2\\}", ""); reject("a\\{2\\}", "a"); reject("a\\{2\\}", "A"); reject("a\\{2\\}", "b"); reject("a\\{2\\}", "B"); match("a\\{2\\}", "aa"); match("a\\{2\\}", "aA"); reject("a\\{2\\}", "ab"); reject("a\\{2\\}", "aB"); match("a\\{2\\}", "Aa"); match("a\\{2\\}", "AA"); reject("a\\{2\\}", "Ab"); reject("a\\{2\\}", "AB"); reject("a\\{2\\}", "ba"); reject("a\\{2\\}", "bA"); reject("a\\{2\\}", "bb"); reject("a\\{2\\}", "bB"); reject("a\\{2\\}", "Ba"); reject("a\\{2\\}", "BA"); reject("a\\{2\\}", "Bb"); reject("a\\{2\\}", "BB"); matches("\\(a\\)", "a", 2, (M[]) { m(0, 1), m(0, 1) }); matches("\\(a\\)", "A", 2, (M[]) { m(0, 1), m(0, 1) }); reject("\\(a\\)", "b"); reject("\\(a\\)", "B"); matches("\\(A\\)", "a", 2, (M[]) { m(0, 1), m(0, 1) }); matches("\\(A\\)", "A", 2, (M[]) { m(0, 1), m(0, 1) }); reject("\\(A\\)", "b"); reject("\\(A\\)", "B"); return 0; }