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