| # @(#)precedence_test 1.0 91/07/24 Maarten Litmaath |
| |
| # This program is free software: you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation, either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| # |
| |
| # test of relative precedences for `&&' and `||' operators |
| |
| echo "\`Say' echos its argument. Its return value is of no interest." |
| case `echo -n` in |
| '') Say () { echo -n "$*" ; } ;; |
| *) Say () { echo "$*\c" ; } ;; |
| esac |
| |
| echo "\`Truth' echos its argument and returns a TRUE result." |
| Truth () { |
| Say $1; |
| return 0; |
| } |
| |
| echo "\`False' echos its argument and returns a FALSE result." |
| False () { |
| Say $1; |
| return 1; |
| } |
| |
| echo "" |
| |
| cmd1='$open $test1 && $test2 $close || $test3' |
| cmd2='$test1 || $open $test2 && $test3 $close' |
| |
| grouping_sh= |
| grouping_C='( )' |
| |
| test3='Say 3' |
| |
| for i in 1 2 |
| do |
| eval proto=\$cmd$i |
| |
| for test1 in 'Truth 1' 'False 1' |
| do |
| for test2 in 'Truth 2' 'False 2' |
| do |
| for precedence in sh C |
| do |
| eval set x \$grouping_$precedence |
| shift |
| open=${1-' '} |
| close=${2-' '} |
| eval cmd=\""$proto"\" |
| Say "$cmd output=" |
| output=`eval "$cmd"` |
| Say "$output" |
| read correct || { echo 'Input fubar. Abort.' >&2; exit 1; } |
| test "X$output" = "X$correct" || echo " correct=$correct" |
| echo '' |
| done |
| |
| echo '' |
| done |
| done |
| done << EOF |
| 12 |
| 12 |
| 123 |
| 123 |
| 13 |
| 13 |
| 13 |
| 13 |
| 13 |
| 1 |
| 13 |
| 1 |
| 123 |
| 123 |
| 12 |
| 12 |
| EOF |