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.sub: tests of sub and gsub code 9e6d6c189SCody Peter Mello 10e6d6c189SCody Peter Mello# input lines are of form 11e6d6c189SCody Peter Mello# pattern replacement input-string sub-output gsub-output 12e6d6c189SCody Peter Mello 13e6d6c189SCody Peter Mello$AWK ' 14e6d6c189SCody Peter MelloBEGIN { 15e6d6c189SCody Peter Mello FS = "\t" 16e6d6c189SCody Peter Mello awk = ENVIRON["AWK"] 17e6d6c189SCody Peter Mello} 18e6d6c189SCody Peter MelloNF == 0 { next } 19e6d6c189SCody Peter Mello$1 ~ /^#/ { next } 20e6d6c189SCody Peter Mello 21e6d6c189SCody Peter Mello$1 != "" { # new pattern 22e6d6c189SCody Peter Mello pat = $1 23e6d6c189SCody Peter Mello} 24e6d6c189SCody Peter Mello$2 != "" { # new replacement 25e6d6c189SCody Peter Mello repl = $2 26e6d6c189SCody Peter Mello} 27e6d6c189SCody Peter Mello$3 != "" { # new input string 28e6d6c189SCody Peter Mello str = $3 29e6d6c189SCody Peter Mello} 30e6d6c189SCody Peter Mello$4 != "" { # new sub output 31e6d6c189SCody Peter Mello subout = $4 32e6d6c189SCody Peter Mello} 33e6d6c189SCody Peter Mello$5 != "" { # new gsub output 34e6d6c189SCody Peter Mello gsubout = $5 35e6d6c189SCody Peter Mello} 36e6d6c189SCody Peter MelloNF < 5 { # weird input line 37e6d6c189SCody Peter Mello printf("weird test spec `%s` ignored\n", $0) | "cat 1>&2" 38e6d6c189SCody Peter Mello next 39e6d6c189SCody Peter Mello} 40e6d6c189SCody Peter Mello{ # "" => explicitly empty 41e6d6c189SCody Peter Mello # printf(" %3d: %s %s %s %s %s:\n", NR, pat, repl, str, subout, gsubout) 42e6d6c189SCody Peter Mello if (pat == "\"\"") pat = "" 43e6d6c189SCody Peter Mello if (repl == "\"\"") repl = "" 44e6d6c189SCody Peter Mello if (str == "\"\"") str = "" 45e6d6c189SCody Peter Mello if (subout == "\"\"") subout = "" 46e6d6c189SCody Peter Mello if (gsubout == "\"\"") gsubout = "" 47e6d6c189SCody Peter Mello} 48e6d6c189SCody Peter Mello{ # generate a test 49e6d6c189SCody Peter Mello nt++ 50e6d6c189SCody Peter Mello gsub(/\\/, "&&", repl) # in case of \ enclosed 51e6d6c189SCody Peter Mello test = sprintf("echo '"'"'%s'"'"' | %s '"'\n"'", str, awk) \ 52e6d6c189SCody Peter Mello sprintf("{ temp = $0; sub(/%s/, \"%s\", temp)\n", pat, repl) \ 53e6d6c189SCody Peter Mello sprintf(" if (temp != \"%s\") print \" sub %d fails:\", temp, \"should be %s in %s\"\n", 54e6d6c189SCody Peter Mello subout, nt, subout, (pat " " repl " " str " " subout)) \ 55e6d6c189SCody Peter Mello sprintf(" gsub(/%s/, \"%s\")\n", pat, repl) \ 56e6d6c189SCody Peter Mello sprintf(" if ($0 != \"%s\") print \"gsub %d fails:\", $0, \"should be %s in %s\"\n}", 57e6d6c189SCody Peter Mello gsubout, nt, gsubout, (pat " " repl " " str " " gsubout)) \ 58e6d6c189SCody Peter Mello "'" '"'" 59e6d6c189SCody Peter Mello # if (nt >= 55) print "test is: " test 60e6d6c189SCody Peter Mello tcode = system(test) 61e6d6c189SCody Peter Mello if (tcode > 0) { 62e6d6c189SCody Peter Mello ecode = 1 63e6d6c189SCody Peter Mello } 64e6d6c189SCody Peter Mello # system("bprint -c ../a.out") 65e6d6c189SCody Peter Mello} 66e6d6c189SCody Peter MelloEND { 67e6d6c189SCody Peter Mello print nt, "tests" 68e6d6c189SCody Peter Mello exit ecode 69e6d6c189SCody Peter Mello} 70e6d6c189SCody Peter Mello 71e6d6c189SCody Peter Mello' <<\!!!! 72e6d6c189SCody Peter Melloa x aaa xaa xxx 73e6d6c189SCody Peter Mello axa xxa xxx 74e6d6c189SCody Peter Mello bbb bbb bbb 75e6d6c189SCody Peter Mello "" "" "" 76e6d6c189SCody Peter Melloa xy aaa xyaa xyxyxy 77e6d6c189SCody Peter Mello axa xyxa xyxxy 78e6d6c189SCody Peter Mello bbb bbb bbb 79e6d6c189SCody Peter Mello "" "" "" 80e6d6c189SCody Peter Mello. x aaa xaa xxx 81e6d6c189SCody Peter Mello axa xxa xxx 82e6d6c189SCody Peter Mello bbb xbb xxx 83e6d6c189SCody Peter Mello "" "" "" 84e6d6c189SCody Peter Mello.a x a a a 85e6d6c189SCody Peter Mello ax ax ax 86e6d6c189SCody Peter Mello aa x x 87e6d6c189SCody Peter Mello aaab xab xab 88e6d6c189SCody Peter Mello aaaa xaa xx 89e6d6c189SCody Peter Mello "" "" "" 90e6d6c189SCody Peter Mello$ x a ax ax 91e6d6c189SCody Peter Mello "" x x 92e6d6c189SCody Peter Mello.$ x "" "" "" 93e6d6c189SCody Peter Mello a x x 94e6d6c189SCody Peter Mello ab ax ax 95e6d6c189SCody Peter Melloa$ x "" "" "" 96e6d6c189SCody Peter Mello a x x 97e6d6c189SCody Peter Mello b b b 98e6d6c189SCody Peter Mello ab ab ab 99e6d6c189SCody Peter Mello^ x "" x x 100e6d6c189SCody Peter Mello a xa xa 101e6d6c189SCody Peter Mello^a$ xx a xx xx 102e6d6c189SCody Peter Mello "" "" "" 103e6d6c189SCody Peter Mello b b b 104e6d6c189SCody Peter Mello aa aa aa 105e6d6c189SCody Peter Mello^a.$ xy a a a 106e6d6c189SCody Peter Mello "" "" "" 107e6d6c189SCody Peter Mello ab xy xy 108e6d6c189SCody Peter Mello ba ba ba 109e6d6c189SCody Peter Mello^$ x "" x x 110e6d6c189SCody Peter Mello a a a 111e6d6c189SCody Peter Mello^.a x aa x x 112e6d6c189SCody Peter Mello ba x x 113e6d6c189SCody Peter Mello ab ab ab 114e6d6c189SCody Peter Mello a a a 115e6d6c189SCody Peter Mello^.*a xy "" "" "" 116e6d6c189SCody Peter Mello a xy xy 117e6d6c189SCody Peter Mello b b b 118e6d6c189SCody Peter Mello ba xy xy 119e6d6c189SCody Peter Mello^.+a xy "" "" "" 120e6d6c189SCody Peter Mello a a a 121e6d6c189SCody Peter Mello bb bb bb 122e6d6c189SCody Peter Mello ba xy xy 123e6d6c189SCody Peter Melloa &x&y a axay axay 124e6d6c189SCody Peter Mello aa axaya axayaxay 125e6d6c189SCody Peter Mello 126e6d6c189SCody Peter Melloa* x "" x x 127e6d6c189SCody Peter Mello z xz xzx 128e6d6c189SCody Peter Mello az xz xzx 129e6d6c189SCody Peter Mello aza xza xzx 130e6d6c189SCody Peter Mello b xxx bxxx bxbxbxb 131e6d6c189SCody Peter Mello x& paq xpaq xpxaqx 132e6d6c189SCody Peter Mello x\& paq x&paq x&px&qx& 133e6d6c189SCody Peter Mello x&y paq xypaq xypxayqxy 134e6d6c189SCody Peter Mello x\&y paq x&ypaq x&ypx&yqx&y 135e6d6c189SCody Peter Melloa+ x& paq pxaq pxaq 136e6d6c189SCody Peter Mello x\& paq px&q px&q 137e6d6c189SCody Peter Mello x&y paq pxayq pxayq 138e6d6c189SCody Peter Mello x\&y paq px&yq px&yq 139e6d6c189SCody Peter Melloaa* x a x x 140e6d6c189SCody Peter Mello aa x x 141e6d6c189SCody Peter Mello wawa wxwa wxwx 142e6d6c189SCody Peter Mello\$ x "" "" "" 143e6d6c189SCody Peter Mello a a a 144e6d6c189SCody Peter Mello a$ ax ax 145e6d6c189SCody Peter Mello $$$ x$$ xxx 146e6d6c189SCody Peter Mello z$z$z zxz$z zxzxz 147e6d6c189SCody Peter Mello\. x "" "" "" 148e6d6c189SCody Peter Mello a a a 149e6d6c189SCody Peter Mello a. ax ax 150e6d6c189SCody Peter Mello ... x.. xxx 151e6d6c189SCody Peter Mello z.z.z zxz.z zxzxz 152e6d6c189SCody Peter Melloxr+y q xy xy xy 153e6d6c189SCody Peter Mello xry q q 154e6d6c189SCody Peter Mello xrry q q 155e6d6c189SCody Peter Mello xryWxry qWxry qWq 156e6d6c189SCody Peter Melloxr?y q AxyB AqB AqB 157e6d6c189SCody Peter Mello AxryB AqB AqB 158e6d6c189SCody Peter Mello Axrry Axrry Axrry 159e6d6c189SCody Peter Melloa?b?c? x "" x x 160e6d6c189SCody Peter Mello a x x 161e6d6c189SCody Peter Mello b x x 162e6d6c189SCody Peter Mello c x x 163e6d6c189SCody Peter Mello ac x x 164e6d6c189SCody Peter Mello acc xc xx 165e6d6c189SCody Peter Mello^a?b?q x "" "" "" 166e6d6c189SCody Peter Mello q x x 167e6d6c189SCody Peter Mello a a a 168e6d6c189SCody Peter Mello aq x x 169e6d6c189SCody Peter Mello bq x x 170e6d6c189SCody Peter Mello abq x x 171e6d6c189SCody Peter Mello qab xab xab 172e6d6c189SCody Peter Mello abqabq xabq xabq 173e6d6c189SCody Peter Mello[0-9] xyz 0 xyz xyz 174e6d6c189SCody Peter Mello 00 xyz0 xyzxyz 175e6d6c189SCody Peter Mello 000 xyz00 xyzxyzxyz 176e6d6c189SCody Peter Mello 0a xyza xyza 177e6d6c189SCody Peter Mello a0 axyz axyz 178e6d6c189SCody Peter Mello 0a0 xyza0 xyzaxyz 179e6d6c189SCody Peter Mello xx xx xx 180e6d6c189SCody Peter Mello "" "" "" 181e6d6c189SCody Peter Mello^[0-9] xyz 0 xyz xyz 182e6d6c189SCody Peter Mello 00 xyz0 xyz0 183e6d6c189SCody Peter Mello 000 xyz00 xyz00 184e6d6c189SCody Peter Mello 0a xyza xyza 185e6d6c189SCody Peter Mello a0 a0 a0 186e6d6c189SCody Peter Mello xx xx xx 187e6d6c189SCody Peter Mello "" "" "" 188e6d6c189SCody Peter Mello[0-9]$ xyz 0 xyz xyz 189e6d6c189SCody Peter Mello 00 0xyz 0xyz 190e6d6c189SCody Peter Mello 000 00xyz 00xyz 191e6d6c189SCody Peter Mello 0a 0a 0a 192e6d6c189SCody Peter Mello a0 axyz axyz 193e6d6c189SCody Peter Mello xx xx xx 194e6d6c189SCody Peter Mello "" "" "" 195e6d6c189SCody Peter Mello[0-9]* xyz 0 xyz xyz 196e6d6c189SCody Peter Mello 000 xyz xyz 197e6d6c189SCody Peter Mello 0a xyza xyzaxyz 198e6d6c189SCody Peter Mello a0 xyza0 xyzaxyz 199e6d6c189SCody Peter Mello 0a0 xyza0 xyzaxyz 200e6d6c189SCody Peter Mello pq xyzpq xyzpxyzqxyz 201e6d6c189SCody Peter Mello "" xyz xyz 202e6d6c189SCody Peter Mello 203*3ee4fc2aSCody Peter Mello"" <&> abc <>abc <>a<>b<>c<> fixed 2/07, we think 204*3ee4fc2aSCody Peter Mello"" <\&> abc <&>abc <&>a<&>b<&>c<&> 205*3ee4fc2aSCody Peter Mello"" <&&> abc <>abc <>a<>b<>c<> 206*3ee4fc2aSCody Peter Mello"" <&> "" <> <> 207*3ee4fc2aSCody Peter Mello 208e6d6c189SCody Peter Mellod?abc <&> abc <abc> <abc> 209e6d6c189SCody Peter Mellod? <&> abc <>abc <>a<>b<>c<> 210e6d6c189SCody Peter Mello 211e6d6c189SCody Peter Mellox[0-9]+y Q xy xy xy no change 212e6d6c189SCody Peter Mello x0y Q Q 213e6d6c189SCody Peter Mello x12y Q Q 214e6d6c189SCody Peter Mello x1y2 Q2 Q2 215e6d6c189SCody Peter Mello x1yax23y Qax23y QaQ 216e6d6c189SCody Peter Mello 217e6d6c189SCody Peter Mello# x[0-9]?y ~ xy 218e6d6c189SCody Peter Mello# x1y 219e6d6c189SCody Peter Mello# !~ x23y 220e6d6c189SCody Peter Mello# x[[]y ~ x[y 221e6d6c189SCody Peter Mello# !~ xy 222e6d6c189SCody Peter Mello# x[[]y 223e6d6c189SCody Peter Mello# x]y 224e6d6c189SCody Peter Mello# x[^[]y ~ xay 225e6d6c189SCody Peter Mello# !~ x[y 226e6d6c189SCody Peter Mello# x[-]y ~ x-y 227e6d6c189SCody Peter Mello# !~ xy 228e6d6c189SCody Peter Mello# x+y 229e6d6c189SCody Peter Mello# x[^-]y ~ x+y 230e6d6c189SCody Peter Mello# !~ x-y 231e6d6c189SCody Peter Mello# xy 232e6d6c189SCody Peter Mello# [0\-9] ~ 0 233e6d6c189SCody Peter Mello# - 234e6d6c189SCody Peter Mello# 9 235e6d6c189SCody Peter Mello# !~ 1 236e6d6c189SCody Peter Mello# "" 237e6d6c189SCody Peter Mello# [-1] ~ - 238e6d6c189SCody Peter Mello# 1 239e6d6c189SCody Peter Mello# !~ 0 240e6d6c189SCody Peter Mello# [0-] ~ 0 241e6d6c189SCody Peter Mello# - 242e6d6c189SCody Peter Mello# !~ 1 243e6d6c189SCody Peter Mello# [^-0] ~ x 244e6d6c189SCody Peter Mello# ^ 245e6d6c189SCody Peter Mello# !~ - 246e6d6c189SCody Peter Mello# 0 247e6d6c189SCody Peter Mello# "" 248e6d6c189SCody Peter Mello# [^0-] ~ x 249e6d6c189SCody Peter Mello# ^ 250e6d6c189SCody Peter Mello# !~ - 251e6d6c189SCody Peter Mello# 0 252e6d6c189SCody Peter Mello# "" 253e6d6c189SCody Peter Mello# x|y ~ x 254e6d6c189SCody Peter Mello# y 255e6d6c189SCody Peter Mello# xy 256e6d6c189SCody Peter Mello# !~ a 257e6d6c189SCody Peter Mello# "" 258e6d6c189SCody Peter Mello# ^abc|xyz$ ~ abc 259e6d6c189SCody Peter Mello# abcd 260e6d6c189SCody Peter Mello# axyz 261e6d6c189SCody Peter Mello# xyz 262e6d6c189SCody Peter Mello# !~ xabc 263e6d6c189SCody Peter Mello# xyza 264e6d6c189SCody Peter Mello# ^(abc|xyz)$ ~ abc 265e6d6c189SCody Peter Mello# xyz 266e6d6c189SCody Peter Mello# !~ abcxyz 267e6d6c189SCody Peter Mello# abcx 268e6d6c189SCody Peter Mello# cxyz 269e6d6c189SCody Peter Mello# ^x\|y$ ~ x|y 270e6d6c189SCody Peter Mello# !~ xy 271e6d6c189SCody Peter Mello# ^x\\y$ ~ x\y 272e6d6c189SCody Peter Mello# !~ xy 273e6d6c189SCody Peter Mello# x\\y 274e6d6c189SCody Peter Mello# xay 275e6d6c189SCody Peter Mello# \141\142 ~ ab 276e6d6c189SCody Peter Mello# xab 277e6d6c189SCody Peter Mello# abx 278e6d6c189SCody Peter Mello# !~ a 279e6d6c189SCody Peter Mello# b 280e6d6c189SCody Peter Mello# ax 281e6d6c189SCody Peter Mello# axb 282e6d6c189SCody Peter Mello# x\056y ~ x.y 283e6d6c189SCody Peter Mello# !~ x. 284e6d6c189SCody Peter Mello# .x 285e6d6c189SCody Peter Mello# xxx 286e6d6c189SCody Peter Mello# xby because \056 is not the metacharacter . 287e6d6c189SCody Peter Mello# xcy ditto 288e6d6c189SCody Peter Mello# [\60-\62\65-6\71] ~ 0 289e6d6c189SCody Peter Mello# 1 290e6d6c189SCody Peter Mello# 2 291e6d6c189SCody Peter Mello# 5 292e6d6c189SCody Peter Mello# 6 293e6d6c189SCody Peter Mello# 9 294e6d6c189SCody Peter Mello# !~ 3 295e6d6c189SCody Peter Mello# 4 296e6d6c189SCody Peter Mello# 7 297e6d6c189SCody Peter Mello# 8 298e6d6c189SCody Peter Mello# [\60-2\65-6\71] ~ 0 299e6d6c189SCody Peter Mello# 1 300e6d6c189SCody Peter Mello# 2 301e6d6c189SCody Peter Mello# 5 302e6d6c189SCody Peter Mello# 6 303e6d6c189SCody Peter Mello# 9 304e6d6c189SCody Peter Mello# !~ 3 305e6d6c189SCody Peter Mello# 4 306e6d6c189SCody Peter Mello# 7 307e6d6c189SCody Peter Mello# 8 308e6d6c189SCody Peter Mello# [\x30-\x32\x35-6\71] ~ 0 309e6d6c189SCody Peter Mello# 1 310e6d6c189SCody Peter Mello# 2 311e6d6c189SCody Peter Mello# 5 312e6d6c189SCody Peter Mello# 6 313e6d6c189SCody Peter Mello# 9 314e6d6c189SCody Peter Mello# !~ 3 315e6d6c189SCody Peter Mello# 4 316e6d6c189SCody Peter Mello# 7 317e6d6c189SCody Peter Mello# 8 318e6d6c189SCody Peter Mello# [\x30-2\x35-6\x39] ~ 0 319e6d6c189SCody Peter Mello# 1 320e6d6c189SCody Peter Mello# 2 321e6d6c189SCody Peter Mello# 5 322e6d6c189SCody Peter Mello# 6 323e6d6c189SCody Peter Mello# 9 324e6d6c189SCody Peter Mello# !~ 3 325e6d6c189SCody Peter Mello# 4 326e6d6c189SCody Peter Mello# 7 327e6d6c189SCody Peter Mello# 8 328e6d6c189SCody Peter Mello!!!! 329