Add vercmp function
The existing vercmp_numbers function only handles, as the name says,
numbers. I noticed that "sort" has had a version sort for a long time
[1] and, rather than re-implement it badly, use this as a version of
vercmp that works a bit more naturally.
This is intended to be used in an "if" statement as in
prog_ver=$(prog_ver --version | grep ...)
if vercmp $prog_ver "<" 2.0; then
...
fi
A test-case is added to test the basic features and some edge-cases.
[1] http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=4c9fae4e97d95a9f89d1399a8aeb03051f0fec96
Change-Id: Ie55283acdc40a095b80b2631a55310072883ad0d
diff --git a/tests/unittest.sh b/tests/unittest.sh
index 2570319..6c697d7 100644
--- a/tests/unittest.sh
+++ b/tests/unittest.sh
@@ -92,6 +92,51 @@
fi
}
+# assert the arguments evaluate to true
+# assert_true "message" arg1 arg2
+function assert_true {
+ local lineno
+ lineno=`caller 0 | awk '{print $1}'`
+ local function
+ function=`caller 0 | awk '{print $2}'`
+ local msg=$1
+ shift
+
+ $@
+ if [ $? -eq 0 ]; then
+ PASS=$((PASS+1))
+ echo "PASS: $function:L$lineno - $msg"
+ else
+ FAILED_FUNCS+="$function:L$lineno\n"
+ echo "ERROR: test failed in $function:L$lineno!"
+ echo " $msg"
+ ERROR=$((ERROR+1))
+ fi
+}
+
+# assert the arguments evaluate to false
+# assert_false "message" arg1 arg2
+function assert_false {
+ local lineno
+ lineno=`caller 0 | awk '{print $1}'`
+ local function
+ function=`caller 0 | awk '{print $2}'`
+ local msg=$1
+ shift
+
+ $@
+ if [ $? -eq 0 ]; then
+ FAILED_FUNCS+="$function:L$lineno\n"
+ echo "ERROR: test failed in $function:L$lineno!"
+ echo " $msg"
+ ERROR=$((ERROR+1))
+ else
+ PASS=$((PASS+1))
+ echo "PASS: $function:L$lineno - $msg"
+ fi
+}
+
+
# Print a summary of passing and failing tests and exit
# (with an error if we have failed tests)
# usage: report_results