1 /* tests.c - test cases for rx-xml 2 * 3 **************************************************************** 4 * Copyright (C) 2000 Tom Lord 5 * 6 * See the file "COPYING" for further information about 7 * the copyright and warranty status of this work. 8 */ 9 10 11 #include "hackerlab/tests/rx-xml-tests/tests.h" 12 13 14 15 #define TEST(name,re,comperr,str,matcherr,ismatch) \ 16 { name, re, comperr, str, matcherr, ismatch } 17 18 #define TEST_LIST \ 19 \ 20 /* ATOM TESTS \ 21 */ \ 22 \ 23 \ 24 /* normal characters */ \ 25 TEST("atom test 0", "x", 0, "x", 0, 1), \ 26 \ 27 /* character classes */ \ 28 \ 29 /* single character escape */ \ 30 TEST("atom test 1", "\\n", 0, "\n", 0, 1), \ 31 TEST("atom test 2", "\\r", 0, "\r", 0, 1), \ 32 TEST("atom test 3", "\\t", 0, "\t", 0, 1), \ 33 TEST("atom test 4", "\\\\", 0, "\\", 0, 1), \ 34 TEST("atom test 5", "\\.", 0, ".", 0, 1), \ 35 TEST("atom test 6", "\\.", 0, "x", 0, 0), \ 36 \ 37 TEST("atom test 7", "\\-", 0, "-", 0, 1), \ 38 TEST("atom test 8", "\\^", 0, "^", 0, 1), \ 39 TEST("atom test 9", "\\?", 0, "?", 0, 1), \ 40 TEST("atom test 10", "\\*", 0, "*", 0, 1), \ 41 TEST("atom test 11", "\\+", 0, "+", 0, 1), \ 42 TEST("atom test 12", "\\{", 0, "{", 0, 1), \ 43 TEST("atom test 13", "\\}", 0, "}", 0, 1), \ 44 TEST("atom test 14", "\\(", 0, "(", 0, 1), \ 45 TEST("atom test 15", "\\)", 0, ")", 0, 1), \ 46 TEST("atom test 16", "\\[", 0, "[", 0, 1), \ 47 \ 48 TEST("atom test 17", "\\a", rx_xml_recomp_BOGUS_CHAR, "a", 0, 0), \ 49 \ 50 /* category escapes */ \ 51 TEST("category test 0", "\\p{isGreek}", 0, "\\u0370", 0, 1), \ 52 TEST("category test 1", "\\p{isBasicLatin}", 0, "\\u0370", 0, 0), \ 53 TEST("category test 2", "\\p{isbasiclatin}", 0, "\\u0370", 0, 0), \ 54 TEST("category test 3", "\\p{isBasic Latin}", 0, "\\u0370", 0, 0), \ 55 TEST("category test 4", "\\p{isbasic latin}", 0, "\\u0370", 0, 0), \ 56 TEST("category test 5", "\\p{isGreek}", 0, "a", 0, 0), \ 57 TEST("category test 6", "\\p{isBasicLatin}", 0, "a", 0, 1), \ 58 TEST("category test 7", "\\p{isbasiclatin}", 0, "a", 0, 1), \ 59 TEST("category test 8", "\\p{isBasic Latin}", 0, "a", 0, 1), \ 60 TEST("category test 9", "\\p{isbasic latin}", 0, "a", 0, 1), \ 61 \ 62 /* multi-character escapes */ \ 63 TEST("mce test 0", ".", 0, "a", 0, 1), \ 64 TEST("mce test 1", ".", 0, "b", 0, 1), \ 65 TEST("mce test 2", ".", 0, "\n", 0, 0), \ 66 TEST("mce test 3", ".", 0, "\r", 0, 0), \ 67 TEST("mce test 4", ".", 0, " ", 0, 1), \ 68 TEST("mce test 5", ".", 0, "\\u2200", 0, 1), \ 69 \ 70 TEST("mce test 6", "\\s", 0, " ", 0, 1), \ 71 TEST("mce test 7", "\\s", 0, "\t", 0, 1), \ 72 TEST("mce test 8", "\\s", 0, "\n", 0, 1), \ 73 TEST("mce test 9", "\\s", 0, "\r", 0, 1), \ 74 TEST("mce test 10", "\\s", 0, "x", 0, 0), \ 75 \ 76 TEST("mce test 11", "\\S", 0, " ", 0, 0), \ 77 TEST("mce test 12", "\\S", 0, "\t", 0, 0), \ 78 TEST("mce test 13", "\\S", 0, "\n", 0, 0), \ 79 TEST("mce test 14", "\\S", 0, "\r", 0, 0), \ 80 TEST("mce test 15", "\\S", 0, "x", 0, 1), \ 81 \ 82 \ 83 TEST("mce test 16", "\\i", 0, "a", 0, 1), \ 84 TEST("mce test 17", "\\i", 0, "A", 0, 1), \ 85 TEST("mce test 18", "\\i", 0, "\\u4e00", 0, 1), \ 86 TEST("mce test 19", "\\i", 0, ":", 0, 1), \ 87 TEST("mce test 20", "\\i", 0, "_", 0, 1), \ 88 TEST("mce test 21", "\\i", 0, "2", 0, 0), \ 89 TEST("mce test 22", "\\i", 0, ".", 0, 0), \ 90 TEST("mce test 23", "\\i", 0, "\\u0300", 0, 0), \ 91 TEST("mce test 24", "\\i", 0, " ", 0, 0), \ 92 TEST("mce test 25", "\\i", 0, "\n", 0, 0), \ 93 \ 94 TEST("mce test 26", "\\I", 0, "a", 0, 0), \ 95 TEST("mce test 27", "\\I", 0, "A", 0, 0), \ 96 TEST("mce test 28", "\\I", 0, "\\u4e00", 0, 0), \ 97 TEST("mce test 29", "\\I", 0, ":", 0, 0), \ 98 TEST("mce test 30", "\\I", 0, "_", 0, 0), \ 99 TEST("mce test 31", "\\I", 0, "2", 0, 1), \ 100 TEST("mce test 32", "\\I", 0, ".", 0, 1), \ 101 TEST("mce test 33", "\\I", 0, "\\u0300", 0, 1), \ 102 TEST("mce test 34", "\\I", 0, " ", 0, 1), \ 103 TEST("mce test 35", "\\I", 0, "\n", 0, 1), \ 104 \ 105 TEST("mce test 36", "\\c", 0, "a", 0, 1), \ 106 TEST("mce test 37", "\\c", 0, "A", 0, 1), \ 107 TEST("mce test 38", "\\c", 0, "\\u4e00", 0, 1), \ 108 TEST("mce test 39", "\\c", 0, ":", 0, 1), \ 109 TEST("mce test 40", "\\c", 0, "_", 0, 1), \ 110 TEST("mce test 41", "\\c", 0, "2", 0, 1), \ 111 TEST("mce test 42", "\\c", 0, ".", 0, 1), \ 112 TEST("mce test 43", "\\c", 0, "\\u0300", 0, 1), \ 113 TEST("mce test 44", "\\c", 0, " ", 0, 0), \ 114 TEST("mce test 45", "\\c", 0, "\n", 0, 0), \ 115 \ 116 TEST("mce test 46", "\\C", 0, "a", 0, 0), \ 117 TEST("mce test 47", "\\C", 0, "A", 0, 0), \ 118 TEST("mce test 48", "\\C", 0, "\\u4e00", 0, 0), \ 119 TEST("mce test 49", "\\C", 0, ":", 0, 0), \ 120 TEST("mce test 50", "\\C", 0, "_", 0, 0), \ 121 TEST("mce test 51", "\\C", 0, "2", 0, 0), \ 122 TEST("mce test 52", "\\C", 0, ".", 0, 0), \ 123 TEST("mce test 53", "\\C", 0, "\\u0300", 0, 0), \ 124 TEST("mce test 54", "\\C", 0, " ", 0, 1), \ 125 TEST("mce test 55", "\\C", 0, "\n", 0, 1), \ 126 \ 127 TEST("mce test 56", "\\d", 0, "0", 0, 1), \ 128 TEST("mce test 57", "\\d", 0, "9", 0, 1), \ 129 TEST("mce test 58", "\\d", 0, "\\u0660", 0, 1), \ 130 TEST("mce test 59", "\\d", 0, "\\u0966", 0, 1), \ 131 TEST("mce test 60", "\\d", 0, "x", 0, 0), \ 132 \ 133 TEST("mce test 61", "\\D", 0, "0", 0, 0), \ 134 TEST("mce test 62", "\\D", 0, "9", 0, 0), \ 135 TEST("mce test 63", "\\D", 0, "\\u0660", 0, 0), \ 136 TEST("mce test 64", "\\D", 0, "\\u0966", 0, 0), \ 137 TEST("mce test 65", "\\D", 0, "x", 0, 1), \ 138 \ 139 TEST("mce test 66", "\\w", 0, "a", 0, 1), \ 140 TEST("mce test 67", "\\w", 0, "\\u2200", 0, 1), \ 141 TEST("mce test 68", "\\w", 0, "\\u4e00", 0, 1), \ 142 TEST("mce test 69", "\\w", 0, " ", 0, 0), \ 143 TEST("mce test 70", "\\w", 0, "\t", 0, 0), \ 144 \ 145 TEST("mce test 71", "\\W", 0, "a", 0, 0), \ 146 TEST("mce test 72", "\\W", 0, "\\u2200", 0, 0), \ 147 TEST("mce test 73", "\\W", 0, "\\u4e00", 0, 0), \ 148 TEST("mce test 74", "\\W", 0, " ", 0, 1), \ 149 TEST("mce test 75", "\\W", 0, "\t", 0, 1), \ 150 \ 151 \ 152 /* character class expression */ \ 153 TEST("class test 0", "[ABC]", 0, "A", 0, 1), \ 154 TEST("class test 1", "[a" RANGE "z]", 0, "m", 0, 1), \ 155 TEST("class test 2", "[a" RANGE "z]", 0, "z", 0, 1), \ 156 TEST("class test 3", "[012]", 0, "1", 0, 1), \ 157 TEST("class test 4", "[7" RANGE "9]", 0, "8", 0, 1), \ 158 TEST("class test 5", "[\\p{Sm}]", 0, "\\u2200", 0, 1), \ 159 TEST("class test 6", "[\\p{isGreek}]", 0, "\\u0370", 0, 1), \ 160 TEST("class test 7", "[\\p{isGreek}]", 0, "\\u03ff", 0, 1), \ 161 TEST("class test 8", "[\\p{isGreek}]", 0, "\\u036f", 0, 0), \ 162 TEST("class test 9", "[\\p{isGreek}]", 0, "\\u0400", 0, 0), \ 163 \ 164 TEST("class test 10", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "A", 0, 1), \ 165 TEST("class test 11", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "m", 0, 1), \ 166 TEST("class test 12", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "1", 0, 1), \ 167 TEST("class test 13", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "8", 0, 1), \ 168 TEST("class test 14", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u2200", 0, 1), \ 169 TEST("class test 15", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0370", 0, 1), \ 170 TEST("class test 16", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0400", 0, 0), \ 171 TEST("class test 17", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "M", 0, 0), \ 172 \ 173 TEST("class test 18", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "A", 0, 0), \ 174 TEST("class test 19", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "z", 0, 0), \ 175 TEST("class test 20", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "m", 0, 0), \ 176 TEST("class test 21", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "1", 0, 0), \ 177 TEST("class test 22", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "8", 0, 0), \ 178 TEST("class test 23", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u2200", 0, 0), \ 179 TEST("class test 24", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0370", 0, 0), \ 180 TEST("class test 25", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0400", 0, 1), \ 181 TEST("class test 26", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "M", 0, 1), \ 182 \ 183 TEST("class test 27", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "A", 0, 1), \ 184 TEST("class test 28", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "e", 0, 0), \ 185 TEST("class test 29", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "1", 0, 1), \ 186 TEST("class test 30", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "8", 0, 0), \ 187 \ 188 /* simple concatenation */ \ 189 TEST("concat test 187", "abcd", 0, "abcd", 0, 1), \ 190 TEST("concat test 188", "abcd", 0, "abcde", 0, 0), \ 191 TEST("concat test 189", "abcd", 0, "abc", 0, 0), \ 192 \ 193 /* parenthesized subexpressions */ \ 194 TEST("paren test 0", "(\\n)", 0, "\n", 0, 1), \ 195 TEST("paren test 1", "(\\t)", 0, "\t", 0, 1), \ 196 TEST("paren test 2", "(\\.)", 0, ".", 0, 1), \ 197 TEST("paren test 3", "(\\-)", 0, "-", 0, 1), \ 198 TEST("paren test 4", "(\\?)", 0, "?", 0, 1), \ 199 TEST("paren test 5", "(\\+)", 0, "+", 0, 1), \ 200 TEST("paren test 6", "(\\})", 0, "}", 0, 1), \ 201 TEST("paren test 7", "(\\))", 0, ")", 0, 1), \ 202 TEST("paren test 8", "(\\a)", rx_xml_recomp_BOGUS_CHAR, "a", 0, 0), \ 203 TEST("paren test 9", "(.)", 0, "b", 0, 1), \ 204 TEST("paren test 10", "(.)", 0, "\r", 0, 0), \ 205 TEST("paren test 11", "(.)", 0, "\\u2200", 0, 1), \ 206 TEST("paren test 12", "(\\s)", 0, "\t", 0, 1), \ 207 TEST("paren test 13", "(\\s)", 0, "\r", 0, 1), \ 208 TEST("paren test 14", "(\\S)", 0, " ", 0, 0), \ 209 TEST("paren test 15", "(\\S)", 0, "\n", 0, 0), \ 210 TEST("paren test 16", "(\\S)", 0, "x", 0, 1), \ 211 TEST("paren test 17", "(\\i)", 0, "A", 0, 1), \ 212 TEST("paren test 18", "(\\i)", 0, ":", 0, 1), \ 213 TEST("paren test 19", "(\\i)", 0, "2", 0, 0), \ 214 TEST("paren test 20", "(\\i)", 0, "\\u0300", 0, 0), \ 215 TEST("paren test 21", "(\\i)", 0, "\n", 0, 0), \ 216 TEST("paren test 22", "(\\I)", 0, "A", 0, 0), \ 217 TEST("paren test 23", "(\\I)", 0, ":", 0, 0), \ 218 TEST("paren test 24", "(\\I)", 0, "2", 0, 1), \ 219 TEST("paren test 25", "(\\I)", 0, "\\u0300", 0, 1), \ 220 TEST("paren test 26", "(\\I)", 0, "\n", 0, 1), \ 221 TEST("paren test 27", "(\\c)", 0, "A", 0, 1), \ 222 TEST("paren test 28", "(\\c)", 0, ":", 0, 1), \ 223 TEST("paren test 29", "(\\c)", 0, "2", 0, 1), \ 224 TEST("paren test 30", "(\\c)", 0, "\\u0300", 0, 1), \ 225 TEST("paren test 31", "(\\c)", 0, "\n", 0, 0), \ 226 TEST("paren test 32", "(\\C)", 0, "A", 0, 0), \ 227 TEST("paren test 33", "(\\C)", 0, ":", 0, 0), \ 228 TEST("paren test 34", "(\\C)", 0, "2", 0, 0), \ 229 TEST("paren test 35", "(\\C)", 0, "\\u0300", 0, 0), \ 230 TEST("paren test 36", "(\\C)", 0, "\n", 0, 1), \ 231 TEST("paren test 37", "(\\d)", 0, "9", 0, 1), \ 232 TEST("paren test 38", "(\\d)", 0, "\\u0966", 0, 1), \ 233 TEST("paren test 39", "(\\D)", 0, "0", 0, 0), \ 234 TEST("paren test 40", "(\\D)", 0, "\\u0660", 0, 0), \ 235 TEST("paren test 41", "(\\D)", 0, "x", 0, 1), \ 236 TEST("paren test 42", "(\\w)", 0, "\\u2200", 0, 1), \ 237 TEST("paren test 43", "(\\w)", 0, " ", 0, 0), \ 238 TEST("paren test 44", "(\\W)", 0, "a", 0, 0), \ 239 TEST("paren test 45", "(\\W)", 0, "\\u4e00", 0, 0), \ 240 TEST("paren test 46", "(\\W)", 0, "\t", 0, 1), \ 241 TEST("paren test 47", "([a" RANGE "z])", 0, "m", 0, 1), \ 242 TEST("paren test 48", "([012])", 0, "1", 0, 1), \ 243 TEST("paren test 49", "([\\p{Sm}])", 0, "\\u2200", 0, 1), \ 244 TEST("paren test 50", "([\\p{isGreek}])", 0, "\\u03ff", 0, 1), \ 245 TEST("paren test 51", "([\\p{isGreek}])", 0, "\\u0400", 0, 0), \ 246 TEST("paren test 52", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "m", 0, 1), \ 247 TEST("paren test 53", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "8", 0, 1), \ 248 TEST("paren test 54", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u0370", 0, 1), \ 249 TEST("paren test 55", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "M", 0, 0), \ 250 TEST("paren test 56", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "z", 0, 0), \ 251 TEST("paren test 57", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "1", 0, 0), \ 252 TEST("paren test 58", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u2200", 0, 0), \ 253 TEST("paren test 59", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u0400", 0, 1), \ 254 TEST("paren test 60", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]])", 0, "A", 0, 1),\ 255 TEST("paren test 61", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]])", 0, "1", 0, 1),\ 256 \ 257 TEST("paren test 62", "(abcd)", 0, "abcd", 0, 1), \ 258 TEST("paren test 63", "(abcd)", 0, "abcde", 0, 0), \ 259 TEST("paren test 64", "(abcd)", 0, "abc", 0, 0), \ 260 \ 261 \ 262 \ 263 /* PIECE TESTS \ 264 */ \ 265 \ 266 TEST("piece test 0", "x?", 0, "", 0, 1), \ 267 TEST("piece test 1", "x?", 0, "x", 0, 1), \ 268 TEST("piece test 2", "x?", 0, "y", 0, 0), \ 269 TEST("piece test 3", "abcx?", 0, "abc", 0, 1), \ 270 TEST("piece test 4", "abcx?", 0, "abcx", 0, 1), \ 271 TEST("piece test 5", "abcx?", 0, "abcy", 0, 0), \ 272 \ 273 TEST("piece test 6", "x*", 0, "", 0, 1), \ 274 TEST("piece test 7", "x*", 0, "x", 0, 1), \ 275 TEST("piece test 8", "x*", 0, "xx", 0, 1), \ 276 TEST("piece test 9", "x*", 0, "xxx", 0, 1), \ 277 TEST("piece test 10", "x*", 0, "y", 0, 0), \ 278 TEST("piece test 11", "x*", 0, "xxy", 0, 0), \ 279 \ 280 TEST("piece test 12", "abcx*", 0, "abc", 0, 1), \ 281 TEST("piece test 13", "abcx*", 0, "abcx", 0, 1), \ 282 TEST("piece test 14", "abcx*", 0, "abcxx", 0, 1), \ 283 TEST("piece test 15", "abcx*", 0, "abcxxx", 0, 1), \ 284 TEST("piece test 16", "abcx*", 0, "abcy", 0, 0), \ 285 TEST("piece test 17", "abcx*", 0, "abcxxy", 0, 0), \ 286 \ 287 \ 288 TEST("piece test 18", "x+", 0, "", 0, 0), \ 289 TEST("piece test 19", "x+", 0, "x", 0, 1), \ 290 TEST("piece test 20", "x+", 0, "xx", 0, 1), \ 291 TEST("piece test 21", "x+", 0, "xxx", 0, 1), \ 292 TEST("piece test 22", "x+", 0, "y", 0, 0), \ 293 TEST("piece test 23", "x+", 0, "xxy", 0, 0), \ 294 \ 295 TEST("piece test 24", "abcx+", 0, "abc", 0, 0), \ 296 TEST("piece test 25", "abcx+", 0, "abcx", 0, 1), \ 297 TEST("piece test 26", "abcx+", 0, "abcxx", 0, 1), \ 298 TEST("piece test 27", "abcx+", 0, "abcxxx", 0, 1), \ 299 TEST("piece test 28", "abcx+", 0, "abcy", 0, 0), \ 300 TEST("piece test 29", "abcx+", 0, "abcxxy", 0, 0), \ 301 \ 302 TEST("piece test 30", "x{0,0}", 0, "", 0, 1), \ 303 TEST("piece test 31", "x{0,0}", 0, "x", 0, 0), \ 304 TEST("piece test 32", "x{0,1}", 0, "", 0, 1), \ 305 TEST("piece test 33", "x{0,1}", 0, "x", 0, 1), \ 306 TEST("piece test 34", "x{0,1}", 0, "xx", 0, 0), \ 307 TEST("piece test 35", "x{0,3}", 0, "", 0, 1), \ 308 TEST("piece test 36", "x{0,3}", 0, "x", 0, 1), \ 309 TEST("piece test 37", "x{0,3}", 0, "xx", 0, 1), \ 310 TEST("piece test 38", "x{0,3}", 0, "xxx", 0, 1), \ 311 TEST("piece test 39", "x{0,3}", 0, "xxxx", 0, 0), \ 312 \ 313 TEST("piece test 40", "x{1,0}", rx_xml_recomp_BAD_DUPLICATION_RANGE, "", 0, 1), \ 314 TEST("piece test 41", "x{1,0}", rx_xml_recomp_BAD_DUPLICATION_RANGE, "x", 0, 0), \ 315 TEST("piece test 42", "x{1,1}", 0, "", 0, 0), \ 316 TEST("piece test 43", "x{1,1}", 0, "x", 0, 1), \ 317 TEST("piece test 44", "x{1,1}", 0, "xx", 0, 0), \ 318 TEST("piece test 45", "x{1,3}", 0, "", 0, 0), \ 319 TEST("piece test 46", "x{1,3}", 0, "x", 0, 1), \ 320 TEST("piece test 47", "x{1,3}", 0, "xx", 0, 1), \ 321 TEST("piece test 48", "x{1,3}", 0, "xxx", 0, 1), \ 322 TEST("piece test 49", "x{1,3}", 0, "xxxx", 0, 0), \ 323 \ 324 \ 325 TEST("piece test 50", "abcx{0,0}lmn", 0, "abclmn", 0, 1), \ 326 TEST("piece test 51", "abcx{0,0}lmn", 0, "abcxlmn", 0, 0), \ 327 TEST("piece test 52", "abcx{0,1}lmn", 0, "abclmn", 0, 1), \ 328 TEST("piece test 53", "abcx{0,1}lmn", 0, "abcxlmn", 0, 1), \ 329 TEST("piece test 54", "abcx{0,1}lmn", 0, "abcxxlmn", 0, 0), \ 330 TEST("piece test 55", "abcx{0,3}lmn", 0, "abclmn", 0, 1), \ 331 TEST("piece test 56", "abcx{0,3}lmn", 0, "abcxlmn", 0, 1), \ 332 TEST("piece test 57", "abcx{0,3}lmn", 0, "abcxxlmn", 0, 1), \ 333 TEST("piece test 58", "abcx{0,3}lmn", 0, "abcxxxlmn", 0, 1), \ 334 TEST("piece test 59", "abcx{0,3}lmn", 0, "abcxxxxlmn", 0, 0), \ 335 \ 336 TEST("piece test 60", "abcx{1,0}lmn", rx_xml_recomp_BAD_DUPLICATION_RANGE, "abclmn", 0, 1), \ 337 TEST("piece test 61", "abcx{1,0}lmn", rx_xml_recomp_BAD_DUPLICATION_RANGE, "abcxlmn", 0, 0), \ 338 TEST("piece test 62", "abcx{1,1}lmn", 0, "abclmn", 0, 0), \ 339 TEST("piece test 63", "abcx{1,1}lmn", 0, "abcxlmn", 0, 1), \ 340 TEST("piece test 64", "abcx{1,1}lmn", 0, "abcxxlmn", 0, 0), \ 341 TEST("piece test 65", "abcx{1,3}lmn", 0, "abclmn", 0, 0), \ 342 TEST("piece test 66", "abcx{1,3}lmn", 0, "abcxlmn", 0, 1), \ 343 TEST("piece test 67", "abcx{1,3}lmn", 0, "abcxxlmn", 0, 1), \ 344 TEST("piece test 68", "abcx{1,3}lmn", 0, "abcxxxlmn", 0, 1), \ 345 TEST("piece test 69", "abcx{1,3}lmn", 0, "abcxxxxlmn", 0, 0), \ 346 \ 347 TEST("piece test 70", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ 348 TEST("piece test 71", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ 349 TEST("piece test 72", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ 350 TEST("piece test 73", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ 351 TEST("piece test 74", "abcx{0,}lmn", 0, "abcxxlmn", 0, 1), \ 352 TEST("piece test 75", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ 353 TEST("piece test 76", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ 354 TEST("piece test 77", "abcx{0,}lmn", 0, "abcxxlmn", 0, 1), \ 355 TEST("piece test 78", "abcx{0,}lmn", 0, "abcxxxlmn", 0, 1), \ 356 TEST("piece test 79", "abcx{0,}lmn", 0, "abcxxxxlmn", 0, 1), \ 357 TEST("piece test 80", "abcx{0,}lmn", 0, "abcxxxxxxxxxxxxxxlmn", 0, 1), \ 358 \ 359 TEST("piece test 81", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ 360 TEST("piece test 82", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ 361 TEST("piece test 83", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ 362 TEST("piece test 84", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ 363 TEST("piece test 85", "abcx{1,}lmn", 0, "abcxxlmn", 0, 1), \ 364 TEST("piece test 86", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ 365 TEST("piece test 87", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ 366 TEST("piece test 88", "abcx{1,}lmn", 0, "abcxxlmn", 0, 1), \ 367 TEST("piece test 89", "abcx{1,}lmn", 0, "abcxxxlmn", 0, 1), \ 368 TEST("piece test 90", "abcx{1,}lmn", 0, "abcxxxxlmn", 0, 1), \ 369 TEST("piece test 91", "abcx{1,}lmn", 0, "abcxxxxxxxxxxxxxxlmn", 0, 1), \ 370 \ 371 TEST("piece test 92", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "lmnop-09876", 0, 0), \ 372 TEST("piece test 93", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u03ac\\u03ad\\u03ae\\u03af-12345", 0, 1), \ 373 TEST("piece test 94", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u0255\\u0256\\u0257\\u0258-67890", 0, 1), \ 374 TEST("piece test 95", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u0561\\u0562\\u0563\\u0564-24680", 0, 1), \ 375 TEST("piece test 96", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "abcd-13579", 0, 1), \ 376 TEST("piece test 97", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u00e0\\u00e1\\u00e2\\u00e3-\\u0966\\u0967\\u0968\\u0969\\u096a", 0, 1), \ 377 \ 378 /* BRANCH TESTS \ 379 */ \ 380 \ 381 TEST("alternative test 0", "(wee|week)(night|knights)", 0, "weeknights", 0, 1), \ 382 TEST("alternative test 1", "(week|wee)(night|knights)", 0, "weeknights", 0, 1), \ 383 TEST("alternative test 2", "(wee|week)(knights|night)", 0, "weeknights", 0, 1), \ 384 TEST("alternative test 3", "(week|wee)(knights|night)", 0, "weeknights", 0, 1), \ 385 \ 386 \ 387 \ 388 TEST("tutorial example 0", "Chapter \\d", 0, "Chapter 0", 0, 1), \ 389 TEST("tutorial example 1", "Chapter \\d", 0, "Chapter 1", 0, 1), \ 390 TEST("tutorial example 2", "Chapter \\d", 0, "Chapter 9", 0, 1), \ 391 TEST("tutorial example 3", "Chapter \\d", 0, "Chapter x", 0, 0), \ 392 TEST("tutorial example 4", "Chapter \\d", 0, "Chapter 19", 0, 0), \ 393 TEST("tutorial example 5", "Chapter \\d", 0, "Chapter ", 0, 0), \ 394 \ 395 \ 396 TEST("tutorial example 6", "Chapter\\s\\d", 0, "Chapter 0", 0, 1), \ 397 TEST("tutorial example 7", "Chapter\\s\\d", 0, "Chapter.0", 0, 0), \ 398 TEST("tutorial example 8", "Chapter\\s\\d", 0, "Chapter 1", 0, 1), \ 399 TEST("tutorial example 9", "Chapter\\s\\d", 0, "Chapter\n9", 0, 1), \ 400 TEST("tutorial example 10", "Chapter\\s\\d", 0, "Chapter\rx", 0, 0), \ 401 TEST("tutorial example 11", "Chapter\\s\\d", 0, "Chapter 19", 0, 0), \ 402 TEST("tutorial example 12", "Chapter\\s\\d", 0, "Chapter ", 0, 0), \ 403 \ 404 /* complex expressions */ \ 405 \ 406 TEST("complex 0", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "", 0, 1), \ 407 TEST("complex 1", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "abcd-1234", 0, 1), \ 408 TEST("complex 2", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "abcdx-1234", 0, 0), \ 409 TEST("complex 3", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af", 0, 1), \ 410 TEST("complex 4", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af-", 0, 1), \ 411 TEST("complex 5", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af-234", 0, 1), \ 412 TEST("complex 6", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03acx\\u03ae\\u03af-234", 0, 1), \ 413 \ 414 /* invalid expressions */ \ 415 TEST("error 0", "a{1x}", rx_xml_recomp_MISSING_COMMA, 0, 0, 0), \ 416 TEST("error 1", "a{1,", rx_xml_recomp_MISSING_BRACE, 0, 0, 0), \ 417 TEST("error 2", "a{3,2}", rx_xml_recomp_BAD_DUPLICATION_RANGE, 0, 0, 0), \ 418 TEST("error 3", "(a", rx_xml_recomp_MISSING_RPAREN, 0, 0, 0), \ 419 TEST("error 4", "[abc", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ 420 TEST("error 5", "\\px", rx_xml_recomp_BOGUS_CATEGORY_ESCAPE, 0, 0, 0), \ 421 TEST("error 6", "\\P", rx_xml_recomp_BOGUS_CATEGORY_ESCAPE, 0, 0, 0), \ 422 TEST("error 7", "[z" RANGE "a]", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ 423 TEST("error 8", "[z" RANGE "]", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ 424 TEST(0, 0, 0, 0, 0, 0) 425 426 427 428 struct xml_re_test_case xml_re_test_cases[] = 429 { 430 #define RANGE "-" 431 #define MINUS "-" 432 433 TEST_LIST 434 }; 435 436 struct xml_re_test_case xml_re_test_cases_alternative_syntax[] = 437 { 438 #undef RANGE 439 #undef MINUS 440 #define RANGE ".." 441 #define MINUS "^" 442 443 TEST_LIST 444 }; 445 446