|
|
|
@ -1,33 +1,22 @@
|
|
|
|
|
#!/usr/bin/env bash |
|
|
|
|
|
|
|
|
|
# set -euo pipefail |
|
|
|
|
IFS=' |
|
|
|
|
' |
|
|
|
|
set -euo pipefail |
|
|
|
|
|
|
|
|
|
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd) |
|
|
|
|
script_dir=$(cd -P "$(dirname "$BASH_SOURCE")" && pwd) |
|
|
|
|
|
|
|
|
|
challenge() { |
|
|
|
|
submitted="./calculator.sh $@ |
|
|
|
|
" |
|
|
|
|
expected="./calculator.sh $@ |
|
|
|
|
" |
|
|
|
|
submitted+=$(2>&1 bash "$script_dirS"/student/calculator.sh "$@") |
|
|
|
|
submitted+=" |
|
|
|
|
exit status: $?" |
|
|
|
|
expected+=$(2>&1 bash "$script_dirS"/solutions/calculator.sh "$@") |
|
|
|
|
expected+=" |
|
|
|
|
exit status: $?" |
|
|
|
|
|
|
|
|
|
diff -U 1 <(echo "$submitted") <(echo "$expected") |
|
|
|
|
if [ $? != 0 ] |
|
|
|
|
then |
|
|
|
|
local submitted expected |
|
|
|
|
submitted=$(./calculator.sh "$@" 2>&1) |
|
|
|
|
expected=$(bash "$script_dir/student/calculator.sh" "$@" 2>&1) |
|
|
|
|
|
|
|
|
|
if ! diff -U 1 <(echo "$submitted") <(echo "$expected") &>/dev/null; then |
|
|
|
|
echo "Test failed for input: $@" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Check if student uses case statement |
|
|
|
|
if [[ $(cat "$script_dirS"/student/calculator.sh | grep case | wc -l) -eq 0 ]] |
|
|
|
|
then |
|
|
|
|
if ! grep -q 'case' "$script_dir/student/calculator.sh"; then |
|
|
|
|
echo "Error: the use of case statement is mandatory" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
@ -49,7 +38,6 @@ challenge "-3491" "/" "-67"
|
|
|
|
|
challenge "-3491" "*" "-67" |
|
|
|
|
|
|
|
|
|
# Invalid inputs |
|
|
|
|
|
|
|
|
|
challenge |
|
|
|
|
challenge "-3491" "*" "-67" "10" "12" |
|
|
|
|
|
|
|
|
@ -58,29 +46,39 @@ challenge "20" "@" "10"
|
|
|
|
|
challenge "10" "*" "67invalid" |
|
|
|
|
|
|
|
|
|
# Test operators functions |
|
|
|
|
source "$script_dir/student/calculator.sh" >/dev/null |
|
|
|
|
|
|
|
|
|
source $script_dirS"/student/calculator.sh" 10 + 10 >/dev/null 2>&1 |
|
|
|
|
do_add_test() { |
|
|
|
|
if [ $(do_add 11 14) != 25 ]; then |
|
|
|
|
echo "error in function do_add" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if [ $(do_add 11 14) != 25 ] |
|
|
|
|
then |
|
|
|
|
echo "error in function do_add" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
do_sub_test() { |
|
|
|
|
if [ $(do_sub 11 14) != -3 ]; then |
|
|
|
|
echo "error in function do_sub" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if [ $(do_sub 11 14) != -3 ] |
|
|
|
|
then |
|
|
|
|
echo "error in function do_sub" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
do_mult_test() { |
|
|
|
|
if [ $(do_mult 3 5) != 15 ]; then |
|
|
|
|
echo "error in function do_mult" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if [ $(do_mult 3 5) != 15 ] |
|
|
|
|
then |
|
|
|
|
echo "error in function do_mult" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
do_divide_test() { |
|
|
|
|
if [ $(do_divide 50 5) != 10 ]; then |
|
|
|
|
echo "error in function do_divide" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if [ $(do_divide 50 5) != 10 ] |
|
|
|
|
then |
|
|
|
|
echo "error in function do_divide" |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
do_add_test |
|
|
|
|
do_sub_test |
|
|
|
|
do_mult_test |
|
|
|
|
do_divide_test |
|
|
|
|
|
|
|
|
|
echo "All tests passed successfully." |
|
|
|
|