75 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
| # @(#)precedence_test 1.0 91/07/24 Maarten Litmaath
 | |
| # 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
 | 
