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