Added tests for 'math' class
This commit is contained in:
parent
bc558c02e1
commit
51777de716
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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:
|
|
@ -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