aboutsummaryrefslogblamecommitdiffstats
path: root/uniq-test/test
blob: f5393a02087ecd1b02ac2d9e7a429aff7ee57271 (plain) (tree)


















































































































































                                                                              
#!/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