Added tests for 'math' class
This commit is contained in:
parent
bc558c02e1
commit
51777de716
24
tests/test_div
Normal file
24
tests/test_div
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="128"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '256 2 / p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'/' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '/' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'/' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 /' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test division by zero
|
||||||
|
EXPECTED="Cannot divide by zero"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '5 0 /' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
21
tests/test_divmod
Normal file
21
tests/test_divmod
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED_X="1"
|
||||||
|
EXPECTED_Y="2"
|
||||||
|
read -r ACTUAL_X ACTUAL_Y <<< $(dc -e '15 7 ~ p R p' | tr '\n' ' ')
|
||||||
|
assert_eq "$EXPECTED_X" "$ACTUAL_X"
|
||||||
|
assert_eq "$EXPECTED_Y" "$ACTUAL_Y"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'~' requires two operands"
|
||||||
|
ACTUAL="$(dc -e '~' 2>&1)" || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'~' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 ~' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
19
tests/test_exp
Normal file
19
tests/test_exp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="25"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '5 2 ^ p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'^' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '^' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'^' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '5 [ foo ] ^' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
24
tests/test_mod
Normal file
24
tests/test_mod
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="1"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '6 5 % p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'%' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '%' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'%' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 %' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test division by zero
|
||||||
|
EXPECTED="Cannot divide by zero"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '5 0 %' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
19
tests/test_modexp
Normal file
19
tests/test_modexp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="445"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '4 13 497 | p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'|' requires three operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '|' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'|' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 4 |' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
20
tests/test_mul
Normal file
20
tests/test_mul
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="18"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '6 3 * p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'*' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '*' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'*' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 *' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
20
tests/test_sub
Normal file
20
tests/test_sub
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="-1"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '-5 -4 - p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'-' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '-' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'-' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 -' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
20
tests/test_sum
Normal file
20
tests/test_sum
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
utest() {
|
||||||
|
PROGRAM="$PWD/build/dc"
|
||||||
|
EXPECTED="9"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '5 4 + p')
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test empty stack
|
||||||
|
EXPECTED="'+' requires two operands"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '+' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
# Test non numerical values
|
||||||
|
EXPECTED="'+' requires numeric values"
|
||||||
|
ACTUAL=$("$PROGRAM" -e '[ foo ] 5 +' 2>&1) || true
|
||||||
|
assert_eq "$EXPECTED" "$ACTUAL"
|
||||||
|
|
||||||
|
}
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
80
utest.sh
Executable file
80
utest.sh
Executable file
@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
# μTest: modular testing framework written in POSIX sh
|
||||||
|
# Developed by Marco Cetica 2024 <email@marcocetica.com
|
||||||
|
#
|
||||||
|
|
||||||
|
### Assert functions ###
|
||||||
|
assert_eq() {
|
||||||
|
[ "$1" = "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s == %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_neq() {
|
||||||
|
[ "$1" != "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s != %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_t() {
|
||||||
|
assert_eq "$1" true
|
||||||
|
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_f() {
|
||||||
|
assert_eq "$1" false
|
||||||
|
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_gt() {
|
||||||
|
[ "$1" -gt "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s > %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_ge() {
|
||||||
|
[ "$1" -ge "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s >= %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_lt() {
|
||||||
|
[ "$1" -lt "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s < %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_le() {
|
||||||
|
[ "$1" -le "$2" ] && return 0;
|
||||||
|
|
||||||
|
printf "Assertion failed('%s <= %s')\n" "$1" "$2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
######
|
||||||
|
|
||||||
|
# Check whether tests directory is specified and exists
|
||||||
|
[ "$#" -ne 1 ] && { echo "Specify tests directory"; exit 1; } || TESTS_DIR="$1"
|
||||||
|
[ ! -d "$TESTS_DIR" ] && { echo "'$TESTS_DIR' directory not found"; exit 1; }
|
||||||
|
|
||||||
|
# Count number of test files
|
||||||
|
count_files() { echo "$#"; }
|
||||||
|
NUM_TESTS=$(count_files "$TESTS_DIR"/test_*)
|
||||||
|
IDX=1
|
||||||
|
# Execute all tests from $TESTS_DIR in ascending order
|
||||||
|
for test_file in $(printf "%s\n" "$TESTS_DIR"/test_* | sort -n -t '_' -k 2); do
|
||||||
|
if [ -f "$test_file" ]; then
|
||||||
|
printf "[%s/%s] - Running '%s'...\n" "$IDX" "$NUM_TESTS" "$test_file"
|
||||||
|
# shellcheck source=tests/test_1
|
||||||
|
. "$test_file"
|
||||||
|
utest
|
||||||
|
IDX=$((IDX+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# vim: ts=4 sw=4 softtabstop=4 expandtab:
|
Loading…
Reference in New Issue
Block a user