#!/bin/sh REF_OUT="ref.out" TEST_OUT="test.out" testrpn() { echo "$2" > "$REF_OUT" echo "Evaluating '$1' in RPN notation..." echo "$1" | ./evalexpr -rpn > "$TEST_OUT" diff "$REF_OUT" "$TEST_OUT" && echo "Success" } testeval() { echo "$1" | bc 2> /dev/null > "$REF_OUT" echo "Evaluating '$1' in standard notation..." echo "$1" | ./evalexpr > "$TEST_OUT" diff "$REF_OUT" "$TEST_OUT" && echo "Success" } testerror() { echo "Testing error code '$2'..." echo "$1" | ./evalexpr error="$(echo $?)" [ "$2" -eq "$error" ] && echo "Succesful failure" || echo "Wrong error $error" } clean() { rm "$REF_OUT" "$TEST_OUT" } # RPN echo "Tests for RPN:" echo "======" testrpn "1 1 +" 2 testrpn "5 2 2 ^ 3 + *" 35 testrpn "10 6 9 3 + 0 11 - * / * 17 + 5 +" 22 testrpn "3 4 5 * 3 + -" "-20" testrpn "3 2 % 9 3 1 2 + * / -" 0 echo echo "=============================================" echo # Standard echo "Tests for standard notation:" echo "======" testeval "1 + 1" testeval " 1 + 1 +1 " testeval "2 * 2" testeval "5 * (2 + 4)" testeval "5 * (2 % 4)" testeval " 5 *(2 ^4) " testeval " 5 *(2 ^4 " echo echo "=============================================" echo # Errors echo "Error tests:" echo "======" testerror "" 0 testerror "a+1" 1 testerror "1%0" 3 echo "Testing error code '4'..." ./evalexpr --toto 2> /dev/null echo $? # Cleanup clean