#!/bin/bash if [[ -z "$AWK" ]]; then printf '$AWK must be set\n' >&2 exit 1 fi echo T.re: tests of regular expression code $AWK ' BEGIN { FS = "\t" awk = ENVIRON["AWK"] } NF == 0 { next } $1 != "" { # new test re = $1 } $2 != "" { # either ~ or !~ op = $2 if (op == "~") neg = "!" else if (op == "!~") neg = "" } $3 != "" { # new test string str = $3 } $3 == "\"\"" { # explicit empty line $3 = "" } NF > 2 { # generate a test input = $3 test = sprintf("printf %%s\\\\n '"'"'%s'"'"' | %s '"'"'%s/%s/ {print \"%d fails %s %s %s\"; exit 1}'"'"'", input, awk, neg, re, NR, re, op, input) # printf(" %3d %s %s %s:\n", NR, re, op, input) # print "test is |" test "|" tcode = system(test) if (tcode > 0) { ecode = 1 } # system("bprint -c ../a.out") nt++ } END { print " " nt, "tests" exit ecode } ' <<\!!!! ~ a aa aaa "" a ~ a ba bab !~ "" x xxxxx = ~ = b= b=b !~ "" x xxxxx . ~ x xxx !~ "" .a ~ xa xxa xax !~ a ax "" $ ~ x "" .$ ~ x xx !~ "" a$ ~ a ba bbba !~ ab x "" ^ ~ x "" ^ ^a$ ~ a !~ xa ax xax "" ^a.$ ~ ax aa !~ xa aaa axy "" ^$ ~ "" !~ x ^ ^.a ~ xa xaa !~ a "" ^.*a ~ a xa xxxxxxa !~ "" ^.+a ~ xa xxxxxxa !~ "" a ax a* ~ "" a aaaa xa xxxx aa* ~ a aaa xa !~ xxxx "" \$ ~ x$ $ $x x$x !~ "" x \. ~ . !~ x "" xr+y ~ xry xrry xrrrrrry !~ ry xy xr xr?y ~ xy xry !~ xrry a?b?c? ~ "" x ^a?b?x ~ x ax bx abx xa !~ "" ab aba [0-9] ~ 1 567 x0y !~ abc "" [^0-9] !~ 1 567 "" ~ abc x0y [0-25-69] ~ 0 1 2 5 6 9 !~ 3 4 7 8 [[:lower:]] ~ a b z !~ A Z 1 : [ ] [[:upper:]] ~ A B Z !~ a z 1 : [ ] [[:lower:][:upper:]] ~ A B Z a b z !~ 1 : [ ] [[:digit:]] ~ 0 1 9 !~ d : [ ] [[:xdigit:]] ~ 0 1 9 a d f !~ g z : [ ] [[:cntrl:]] ~     !~ . Z G [ ] [[:punct:]] ~ : , - * @ !~ a 1 U  x[0-9]+y ~ x0y x23y x12345y !~ 0y xy x[0-9]?y ~ xy x1y !~ x23y x[[]y ~ x[y !~ xy x[[]y x]y x[[-]y ~ x[y x-y !~ xy x[[]y x]y x[[-a]y ~ x[y xay x]y !~ xy x[[]y x-y x[]-a]y ~ x]y xay !~ xy x[y x-y 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 x[][]y ~ x[y x]y !~ xy x][y x[]y x[z-a]y ~ xy !~ x y xay xzy x-y [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 \f !~ x \b !~ x \r !~ x \n !~ x !!!!