head 1.1; branch 1.1.1; access; symbols netbsd-11-0-RC4:1.1.1.1 NAWK20260426:1.1.1.1 netbsd-11-0-RC3:1.1.1.1 netbsd-11-0-RC2:1.1.1.1 netbsd-11-0-RC1:1.1.1.1 perseant-exfatfs-base-20250801:1.1.1.1 netbsd-11:1.1.1.1.0.14 netbsd-11-base:1.1.1.1 netbsd-10-1-RELEASE:1.1.1.1 NAWK20240817:1.1.1.1 perseant-exfatfs-base-20240630:1.1.1.1 perseant-exfatfs:1.1.1.1.0.12 perseant-exfatfs-base:1.1.1.1 netbsd-10-0-RELEASE:1.1.1.1 netbsd-10-0-RC6:1.1.1.1 netbsd-10-0-RC5:1.1.1.1 netbsd-10-0-RC4:1.1.1.1 netbsd-10-0-RC3:1.1.1.1 netbsd-10-0-RC2:1.1.1.1 netbsd-10-0-RC1:1.1.1.1 netbsd-10:1.1.1.1.0.10 netbsd-10-base:1.1.1.1 cjep_sun2x-base1:1.1.1.1 cjep_sun2x:1.1.1.1.0.8 cjep_sun2x-base:1.1.1.1 cjep_staticlib_x-base1:1.1.1.1 cjep_staticlib_x:1.1.1.1.0.6 cjep_staticlib_x-base:1.1.1.1 phil-wifi-20200421:1.1.1.1 phil-wifi:1.1.1.1.0.4 phil-wifi-20200411:1.1.1.1 is-mlppp:1.1.1.1.0.2 is-mlppp-base:1.1.1.1 phil-wifi-20200406:1.1.1.1 NAWK20200218:1.1.1.1 NAWK:1.1.1; locks; strict; comment @# @; 1.1 date 2020.02.18.20.50.48; author christos; state Exp; branches 1.1.1.1; next ; commitid 1DQROEYOeROjmcXB; 1.1.1.1 date 2020.02.18.20.50.48; author christos; state Exp; branches 1.1.1.1.4.1; next ; commitid 1DQROEYOeROjmcXB; 1.1.1.1.4.1 date 2020.02.18.20.50.48; author martin; state dead; branches; next 1.1.1.1.4.2; commitid X01YhRUPVUDaec4C; 1.1.1.1.4.2 date 2020.04.13.08.02.18; author martin; state Exp; branches; next ; commitid X01YhRUPVUDaec4C; desc @@ 1.1 log @Initial revision @ text @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 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 !!!! @ 1.1.1.1 log @Last import was 2010 when there was no ChangeLog yet. I've worked with upstream to merge all our changes and this includes many other fixes including new operator support etc. The change to pass an extra "isnew" argument to open was not preserved as none of the tests supplied with the PR fail. This also adds the testsuite and all the bugs fixed since then. @ text @@ 1.1.1.1.4.1 log @file T.sub was added on branch phil-wifi on 2020-04-13 08:02:18 +0000 @ text @d1 315 @ 1.1.1.1.4.2 log @Mostly merge changes from HEAD upto 20200411 @ text @a0 315 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 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 !!!! @