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