#!/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-STANDARD)\033[m\n" "$2" else printf "\033[1;31mTest %s FAILED (NON-STANDARD)\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" if test -f tmp; then rm tmp fi } 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 $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-STANDARD | wc -l) = 0; then ret=1 else ret=2 fi fi rm result exit $ret