# @(#)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
