316 lines
4.5 KiB
Plaintext
Executable File
316 lines
4.5 KiB
Plaintext
Executable File
echo T.sub: tests of sub and gsub code
|
|
|
|
# input lines are of form
|
|
# pattern replacement input-string sub-output gsub-output
|
|
|
|
awk '
|
|
BEGIN {
|
|
FS = "\t"
|
|
awk = "../a.out"
|
|
}
|
|
NF == 0 { next }
|
|
$1 ~ /^#/ { next }
|
|
|
|
$1 != "" { # new pattern
|
|
pat = $1
|
|
}
|
|
$2 != "" { # new replacement
|
|
repl = $2
|
|
}
|
|
$3 != "" { # new input string
|
|
str = $3
|
|
}
|
|
$4 != "" { # new sub output
|
|
subout = $4
|
|
}
|
|
$5 != "" { # new gsub output
|
|
gsubout = $5
|
|
}
|
|
NF < 5 { # weird input line
|
|
printf("weird test spec `%s` ignored\n", $0) | "cat 1>&2"
|
|
next
|
|
}
|
|
{ # "" => explicitly empty
|
|
# printf(" %3d: %s %s %s %s %s:\n", NR, pat, repl, str, subout, gsubout)
|
|
if (pat == "\"\"") pat = ""
|
|
if (repl == "\"\"") repl = ""
|
|
if (str == "\"\"") str = ""
|
|
if (subout == "\"\"") subout = ""
|
|
if (gsubout == "\"\"") gsubout = ""
|
|
}
|
|
{ # generate a test
|
|
nt++
|
|
gsub(/\\/, "&&", repl) # in case of \ enclosed
|
|
test = sprintf("echo '"'"'%s'"'"' | %s '"'\n"'", str, awk) \
|
|
sprintf("{ temp = $0; sub(/%s/, \"%s\", temp)\n", pat, repl) \
|
|
sprintf(" if (temp != \"%s\") print \" sub %d fails:\", temp, \"should be %s in %s\"\n",
|
|
subout, nt, subout, (pat " " repl " " str " " subout)) \
|
|
sprintf(" gsub(/%s/, \"%s\")\n", pat, repl) \
|
|
sprintf(" if ($0 != \"%s\") print \"gsub %d fails:\", $0, \"should be %s in %s\"\n}",
|
|
gsubout, nt, gsubout, (pat " " repl " " str " " gsubout)) \
|
|
"'" '"'"
|
|
# if (nt >= 55) print "test is: " test
|
|
system(test)
|
|
# system("bprint -c ../a.out")
|
|
}
|
|
END { print nt, "tests" }
|
|
|
|
' <<\!!!!
|
|
a x aaa xaa xxx
|
|
axa xxa xxx
|
|
bbb bbb bbb
|
|
"" "" ""
|
|
a xy aaa xyaa xyxyxy
|
|
axa xyxa xyxxy
|
|
bbb bbb bbb
|
|
"" "" ""
|
|
. x aaa xaa xxx
|
|
axa xxa xxx
|
|
bbb xbb xxx
|
|
"" "" ""
|
|
.a x a a a
|
|
ax ax ax
|
|
aa x x
|
|
aaab xab xab
|
|
aaaa xaa xx
|
|
"" "" ""
|
|
$ x a ax ax
|
|
"" x x
|
|
.$ x "" "" ""
|
|
a x x
|
|
ab ax ax
|
|
a$ x "" "" ""
|
|
a x x
|
|
b b b
|
|
ab ab ab
|
|
^ x "" x x
|
|
a xa xa
|
|
^a$ xx a xx xx
|
|
"" "" ""
|
|
b b b
|
|
aa aa aa
|
|
^a.$ xy a a a
|
|
"" "" ""
|
|
ab xy xy
|
|
ba ba ba
|
|
^$ x "" x x
|
|
a a a
|
|
^.a x aa x x
|
|
ba x x
|
|
ab ab ab
|
|
a a a
|
|
^.*a xy "" "" ""
|
|
a xy xy
|
|
b b b
|
|
ba xy xy
|
|
^.+a xy "" "" ""
|
|
a a a
|
|
bb bb bb
|
|
ba xy xy
|
|
a &x&y a axay axay
|
|
aa axaya axayaxay
|
|
|
|
a* x "" x x
|
|
z xz xzx
|
|
az xz xzx
|
|
aza xza xzx
|
|
b xxx bxxx bxbxbxb
|
|
x& paq xpaq xpxaqx
|
|
x\& paq x&paq x&px&qx&
|
|
x&y paq xypaq xypxayqxy
|
|
x\&y paq x&ypaq x&ypx&yqx&y
|
|
a+ x& paq pxaq pxaq
|
|
x\& paq px&q px&q
|
|
x&y paq pxayq pxayq
|
|
x\&y paq px&yq px&yq
|
|
aa* x a x x
|
|
aa x x
|
|
wawa wxwa wxwx
|
|
\$ x "" "" ""
|
|
a a a
|
|
a$ ax ax
|
|
$$$ x$$ xxx
|
|
z$z$z zxz$z zxzxz
|
|
\. x "" "" ""
|
|
a a a
|
|
a. ax ax
|
|
... x.. xxx
|
|
z.z.z zxz.z zxzxz
|
|
xr+y q xy xy xy
|
|
xry q q
|
|
xrry q q
|
|
xryWxry qWxry qWq
|
|
xr?y q AxyB AqB AqB
|
|
AxryB AqB AqB
|
|
Axrry Axrry Axrry
|
|
a?b?c? x "" x x
|
|
a x x
|
|
b x x
|
|
c x x
|
|
ac x x
|
|
acc xc xx
|
|
^a?b?q x "" "" ""
|
|
q x x
|
|
a a a
|
|
aq x x
|
|
bq x x
|
|
abq x x
|
|
qab xab xab
|
|
abqabq xabq xabq
|
|
[0-9] xyz 0 xyz xyz
|
|
00 xyz0 xyzxyz
|
|
000 xyz00 xyzxyzxyz
|
|
0a xyza xyza
|
|
a0 axyz axyz
|
|
0a0 xyza0 xyzaxyz
|
|
xx xx xx
|
|
"" "" ""
|
|
^[0-9] xyz 0 xyz xyz
|
|
00 xyz0 xyz0
|
|
000 xyz00 xyz00
|
|
0a xyza xyza
|
|
a0 a0 a0
|
|
xx xx xx
|
|
"" "" ""
|
|
[0-9]$ xyz 0 xyz xyz
|
|
00 0xyz 0xyz
|
|
000 00xyz 00xyz
|
|
0a 0a 0a
|
|
a0 axyz axyz
|
|
xx xx xx
|
|
"" "" ""
|
|
[0-9]* xyz 0 xyz xyz
|
|
000 xyz xyz
|
|
0a xyza xyzaxyz
|
|
a0 xyza0 xyzaxyz
|
|
0a0 xyza0 xyzaxyz
|
|
pq xyzpq xyzpxyzqxyz
|
|
"" xyz xyz
|
|
|
|
"" <&> abc <>abc <>a<>b<>c<> fixed 2/07, we think
|
|
"" <\&> abc <&>abc <&>a<&>b<&>c<&>
|
|
"" <&&> abc <>abc <>a<>b<>c<>
|
|
"" <&> "" <> <>
|
|
|
|
d?abc <&> abc <abc> <abc>
|
|
d? <&> abc <>abc <>a<>b<>c<>
|
|
|
|
x[0-9]+y Q xy xy xy no change
|
|
x0y Q Q
|
|
x12y Q Q
|
|
x1y2 Q2 Q2
|
|
x1yax23y Qax23y QaQ
|
|
|
|
# x[0-9]?y ~ xy
|
|
# x1y
|
|
# !~ x23y
|
|
# x[[]y ~ x[y
|
|
# !~ xy
|
|
# x[[]y
|
|
# x]y
|
|
# x[^[]y ~ xay
|
|
# !~ x[y
|
|
# x[-]y ~ x-y
|
|
# !~ xy
|
|
# x+y
|
|
# x[^-]y ~ x+y
|
|
# !~ x-y
|
|
# xy
|
|
# [0\-9] ~ 0
|
|
# -
|
|
# 9
|
|
# !~ 1
|
|
# ""
|
|
# [-1] ~ -
|
|
# 1
|
|
# !~ 0
|
|
# [0-] ~ 0
|
|
# -
|
|
# !~ 1
|
|
# [^-0] ~ x
|
|
# ^
|
|
# !~ -
|
|
# 0
|
|
# ""
|
|
# [^0-] ~ x
|
|
# ^
|
|
# !~ -
|
|
# 0
|
|
# ""
|
|
# x|y ~ x
|
|
# y
|
|
# xy
|
|
# !~ a
|
|
# ""
|
|
# ^abc|xyz$ ~ abc
|
|
# abcd
|
|
# axyz
|
|
# xyz
|
|
# !~ xabc
|
|
# xyza
|
|
# ^(abc|xyz)$ ~ abc
|
|
# xyz
|
|
# !~ abcxyz
|
|
# abcx
|
|
# cxyz
|
|
# ^x\|y$ ~ x|y
|
|
# !~ xy
|
|
# ^x\\y$ ~ x\y
|
|
# !~ xy
|
|
# x\\y
|
|
# xay
|
|
# \141\142 ~ ab
|
|
# xab
|
|
# abx
|
|
# !~ a
|
|
# b
|
|
# ax
|
|
# axb
|
|
# x\056y ~ x.y
|
|
# !~ x.
|
|
# .x
|
|
# xxx
|
|
# xby because \056 is not the metacharacter .
|
|
# xcy ditto
|
|
# [\60-\62\65-6\71] ~ 0
|
|
# 1
|
|
# 2
|
|
# 5
|
|
# 6
|
|
# 9
|
|
# !~ 3
|
|
# 4
|
|
# 7
|
|
# 8
|
|
# [\60-2\65-6\71] ~ 0
|
|
# 1
|
|
# 2
|
|
# 5
|
|
# 6
|
|
# 9
|
|
# !~ 3
|
|
# 4
|
|
# 7
|
|
# 8
|
|
# [\x30-\x32\x35-6\71] ~ 0
|
|
# 1
|
|
# 2
|
|
# 5
|
|
# 6
|
|
# 9
|
|
# !~ 3
|
|
# 4
|
|
# 7
|
|
# 8
|
|
# [\x30-2\x35-6\x39] ~ 0
|
|
# 1
|
|
# 2
|
|
# 5
|
|
# 6
|
|
# 9
|
|
# !~ 3
|
|
# 4
|
|
# 7
|
|
# 8
|
|
!!!!
|