echo T.re: tests of regular expression code awk ' BEGIN { FS = "\t" awk = "../a.out" } 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("./echo '"'"'%s'"'"' | %s '"'"'%s/%s/ {print \"%d fails %s %s %s\"}'"'"'", input, awk, neg, re, NR, re, op, input) # printf(" %3d %s %s %s:\n", NR, re, op, input) # print "test is |" test "|" system(test) # system("bprint -c ../a.out") nt++ } END { print " " nt, "tests" } ' <<\!!!! ~ 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 : [ ] [[:digit:]] ~ 0 1 9 !~ d : [ ] 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 ...) ~ abc) !!!!