From f3c2011efbde59eb90e3ad63c9328c02a1e87ffe Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Tue, 28 Dec 2010 14:58:08 +0000 Subject: [PATCH] sh: Add test for optimized command substitution. This test verifies that certain expansions without side effects do not cause the command substitution to be executed in a child process. This is not a correctness requirement, but it involves a nontrivial amount of code and it would be unfortunate if it stopped working. --- tools/regression/bin/sh/expansion/cmdsubst6.0 | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tools/regression/bin/sh/expansion/cmdsubst6.0 diff --git a/tools/regression/bin/sh/expansion/cmdsubst6.0 b/tools/regression/bin/sh/expansion/cmdsubst6.0 new file mode 100644 index 000000000000..6586f330db5b --- /dev/null +++ b/tools/regression/bin/sh/expansion/cmdsubst6.0 @@ -0,0 +1,53 @@ +# $FreeBSD$ +# This tests if the cmdsubst optimization is still used if possible. + +failures='' +ok='' + +testcase() { + code="$1" + + unset v + eval "pid=\$(dummy=$code echo \$(\$SH -c echo\ \\\$PPID))" + + if [ "$pid" = "$$" ]; then + ok=x$ok + else + failures=x$failures + echo "Failure for $code" + fi +} + +unset v +w=1 +testcase '$w' +testcase '1${w+1}' +testcase '1${w-1}' +testcase '1${v+1}' +testcase '1${v-1}' +testcase '1${w:+1}' +testcase '1${w:-1}' +testcase '1${v:+1}' +testcase '1${v:-1}' +testcase '${w?}' +testcase '${w:?}' +testcase '${w#x}' +testcase '${w##x}' +testcase '${w%x}' +testcase '${w%%x}' + +testcase '$((w))' +testcase '$(((w+4)*2/3))' +testcase '$((w==1))' +testcase '$((w>=0 && w<=5 && w!=2))' +testcase '$((${#w}))' +testcase '$((${#IFS}))' +testcase '$((${#w}>=1))' +testcase '$(($$))' +testcase '$(($#))' +testcase '$(($?))' + +testcase '$(: $((w=4)))' +testcase '$(: ${v=2})' + +test "x$failures" = x