1 echo T.re: tests of regular expression code 2 3 awk ' 4 BEGIN { 5 FS = "\t" 6 awk = "../a.out" 7 } 8 NF == 0 { 9 next 10 } 11 $1 != "" { # new test 12 re = $1 13 } 14 $2 != "" { # either ~ or !~ 15 op = $2 16 if (op == "~") 17 neg = "!" 18 else if (op == "!~") 19 neg = "" 20 } 21 $3 != "" { # new test string 22 str = $3 23 } 24 $3 == "\"\"" { # explicit empty line 25 $3 = "" 26 } 27 NF > 2 { # generate a test 28 input = $3 29 test = sprintf("./echo '"'"'%s'"'"' | %s '"'"'%s/%s/ {print \"%d fails %s %s %s\"}'"'"'", 30 input, awk, neg, re, NR, re, op, input) 31 # printf(" %3d %s %s %s:\n", NR, re, op, input) 32 # print "test is |" test "|" 33 system(test) 34 # system("bprint -c ../a.out") 35 nt++ 36 } 37 END { print " " nt, "tests" } 38 ' <<\!!!! 39 ~ a 40 aa 41 aaa 42 "" 43 a ~ a 44 ba 45 bab 46 !~ "" 47 x 48 xxxxx 49 = ~ = 50 b= 51 b=b 52 !~ "" 53 x 54 xxxxx 55 . ~ x 56 xxx 57 !~ "" 58 .a ~ xa 59 xxa 60 xax 61 !~ a 62 ax 63 "" 64 $ ~ x 65 "" 66 .$ ~ x 67 xx 68 !~ "" 69 a$ ~ a 70 ba 71 bbba 72 !~ ab 73 x 74 "" 75 ^ ~ x 76 "" 77 ^ 78 ^a$ ~ a 79 !~ xa 80 ax 81 xax 82 "" 83 ^a.$ ~ ax 84 aa 85 !~ xa 86 aaa 87 axy 88 "" 89 ^$ ~ "" 90 !~ x 91 ^ 92 ^.a ~ xa 93 xaa 94 !~ a 95 "" 96 ^.*a ~ a 97 xa 98 xxxxxxa 99 !~ "" 100 ^.+a ~ xa 101 xxxxxxa 102 !~ "" 103 a 104 ax 105 a* ~ "" 106 a 107 aaaa 108 xa 109 xxxx 110 aa* ~ a 111 aaa 112 xa 113 !~ xxxx 114 "" 115 \$ ~ x$ 116 $ 117 $x 118 x$x 119 !~ "" 120 x 121 \. ~ . 122 !~ x 123 "" 124 xr+y ~ xry 125 xrry 126 xrrrrrry 127 !~ ry 128 xy 129 xr 130 xr?y ~ xy 131 xry 132 !~ xrry 133 a?b?c? ~ "" 134 x 135 ^a?b?x ~ x 136 ax 137 bx 138 abx 139 xa 140 !~ "" 141 ab 142 aba 143 [0-9] ~ 1 144 567 145 x0y 146 !~ abc 147 "" 148 [^0-9] !~ 1 149 567 150 "" 151 ~ abc 152 x0y 153 [0-25-69] ~ 0 154 1 155 2 156 5 157 6 158 9 159 !~ 3 160 4 161 7 162 8 163 [[:lower:]] ~ a 164 b 165 z 166 !~ A 167 Z 168 1 169 : 170 [ 171 ] 172 [[:upper:]] ~ A 173 B 174 Z 175 !~ a 176 z 177 1 178 : 179 [ 180 ] 181 [[:digit:]] ~ 0 182 1 183 9 184 !~ d 185 : 186 [ 187 ] 188 x[0-9]+y ~ x0y 189 x23y 190 x12345y 191 !~ 0y 192 xy 193 x[0-9]?y ~ xy 194 x1y 195 !~ x23y 196 x[[]y ~ x[y 197 !~ xy 198 x[[]y 199 x]y 200 x[[-]y ~ x[y 201 x-y 202 !~ xy 203 x[[]y 204 x]y 205 x[[-a]y ~ x[y 206 xay 207 x]y 208 !~ xy 209 x[[]y 210 x-y 211 x[]-a]y ~ x]y 212 xay 213 !~ xy 214 x[y 215 x-y 216 x[]]y ~ x]y 217 !~ xy 218 x[]]y 219 x[y 220 x[^[]y ~ xay 221 !~ x[y 222 x[-]y ~ x-y 223 !~ xy 224 x+y 225 x[^-]y ~ x+y 226 !~ x-y 227 xy 228 x[][]y ~ x[y 229 x]y 230 !~ xy 231 x][y 232 x[]y 233 x[z-a]y ~ xy 234 !~ x 235 y 236 xay 237 xzy 238 x-y 239 [0\-9] ~ 0 240 - 241 9 242 !~ 1 243 "" 244 [-1] ~ - 245 1 246 !~ 0 247 [0-] ~ 0 248 - 249 !~ 1 250 [^-0] ~ x 251 ^ 252 !~ - 253 0 254 "" 255 [^0-] ~ x 256 ^ 257 !~ - 258 0 259 "" 260 x|y ~ x 261 y 262 xy 263 !~ a 264 "" 265 ^abc|xyz$ ~ abc 266 abcd 267 axyz 268 xyz 269 !~ xabc 270 xyza 271 ^(abc|xyz)$ ~ abc 272 xyz 273 !~ abcxyz 274 abcx 275 cxyz 276 ^x\|y$ ~ x|y 277 !~ xy 278 ^x\\y$ ~ x\y 279 !~ xy 280 x\\y 281 xay 282 \141\142 ~ ab 283 xab 284 abx 285 !~ a 286 b 287 ax 288 axb 289 x\056y ~ x.y 290 !~ x. 291 .x 292 xxx 293 xby because \056 is not the metacharacter . 294 xcy ditto 295 [\60-\62\65-6\71] ~ 0 296 1 297 2 298 5 299 6 300 9 301 !~ 3 302 4 303 7 304 8 305 [\60-2\65-6\71] ~ 0 306 1 307 2 308 5 309 6 310 9 311 !~ 3 312 4 313 7 314 8 315 [\x30-\x32\x35-6\71] ~ 0 316 1 317 2 318 5 319 6 320 9 321 !~ 3 322 4 323 7 324 8 325 [\x30-2\x35-6\x39] ~ 0 326 1 327 2 328 5 329 6 330 9 331 !~ 3 332 4 333 7 334 8 335 \f !~ x 336 \b !~ x 337 \r !~ x 338 \n !~ x 339 ...) ~ abc) 340 !!!! 341