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