aboutsummaryrefslogtreecommitdiffstats
path: root/uniq-test/test
diff options
context:
space:
mode:
Diffstat (limited to 'uniq-test/test')
-rwxr-xr-xuniq-test/test147
1 files changed, 147 insertions, 0 deletions
diff --git a/uniq-test/test b/uniq-test/test
new file mode 100755
index 0000000..f5393a0
--- /dev/null
+++ b/uniq-test/test
@@ -0,0 +1,147 @@
+#!/bin/bash
+
+cd -- "$(dirname "$0")"
+if test -z "$UNIQ"; then
+ UNIQ=../uniq
+fi
+N=7
+u="$PREFIX $UNIQ"
+
+report ()
+{
+ if test $1 = 0; then
+ printf "\033[1;32mTest %s OK\033[m\n" "$2"
+ else
+ printf "\033[1;31mTest %s FAILED\033[m\n" "$2"
+ fi
+}
+
+report_np ()
+{
+ if test $1 = 0; then
+ printf "\033[1;32mTest %s OK (NON-POSIX)\033[m\n" "$2"
+ else
+ printf "\033[1;31mTest %s FAILED (NON-POSIX)\033[m\n" "$2"
+ fi
+}
+
+test_file ()
+{
+ diff <($u < $1.in) $1.out > /dev/null
+ report $? "file_$1"
+}
+
+
+file_1 () { test_file 1; }
+file_2 () { test_file 2; }
+file_3 () { test_file 3; }
+file_4 () { test_file 4; }
+file_5 () { test_file 5; }
+file_6 () { test_file 6; }
+file_7 () { test_file 7; }
+
+dflag ()
+{
+ diff <($u -d < dflag.in) dflag.out > /dev/null
+ report $? "dflag"
+}
+
+uflag ()
+{
+ diff <($u -u < uflag.in) uflag.out > /dev/null
+ report $? "uflag"
+}
+
+cflag ()
+{
+ diff <($u -c < cflag.in | sed 's/^ *//') cflag.out > /dev/null
+ # The `sed` is due to conflicting specifications in uniq(1p).
+ report $? "cflag"
+}
+
+sflag_excess ()
+{
+ diff <($u -s10 < sflag_excess.in) sflag_excess.out > /dev/null
+ report $? "sflag_excess"
+}
+
+sflag ()
+{
+ diff <($u -s1 < sflag.in) sflag.out > /dev/null
+ report $? "sflag"
+}
+
+f0flag ()
+{
+ diff <($u -f0 < 5.in) 5.out > /dev/null
+ report_np $? "f0flag"
+}
+
+fflag_excess ()
+{
+ diff <($u -f10 < 5.in) <(head -n 1 < 5.out) > /dev/null
+ report $? "fflag_excess"
+}
+
+fflag ()
+{
+ diff <($u -f2 < fflag.in) fflag.out > /dev/null
+ report $? "fflag"
+}
+
+fsflag ()
+{
+ diff <($u -f2 -s2 < fsflag.in) fsflag.out > /dev/null
+ report $? "fsflag"
+}
+
+file_in ()
+{
+ diff <($u 5.in) 5.out > /dev/null
+ report $? "file_in"
+}
+
+dash_in ()
+{
+ diff <($u - < 5.in) 5.out > /dev/null
+ report $? "dash_in"
+}
+
+file_out ()
+{
+ $u - tmp < 5.in && diff tmp 5.out > /dev/null
+ report $? "file_out"
+}
+
+dash_out ()
+{
+ touch tmp; rm tmp;
+ $u - - < 5.in > tmp && diff tmp 5.out > /dev/null
+ report_np $? "dash_out"
+ if test -f ./-; then
+ rm ./-
+ fi
+}
+
+
+if test $# = 0; then
+ set $(printf 'file_%i\n' $(seq 1 $N)) dflag uflag cflag sflag_excess \
+ sflag f0flag fflag_excess fflag fsflag file_in dash_in file_out \
+ dash_out
+fi
+(
+for f in $@; do
+ $f
+done
+) | tee result
+! grep FAILED < result > /dev/null
+ret=$?
+if test $ret != 0; then
+ if test $(grep FAILED < result | grep -v NON-POSIX | wc -l) = 0; then
+ ret=1
+ else
+ ret=2
+ fi
+fi
+rm result
+exit $ret