aboutsummaryrefslogblamecommitdiffstats
path: root/base16-test/test
blob: 735eb35b7648c8a8769f7cb01ac97ef2575c0ac0 (plain) (tree)



































































































                                                                                            
                                                                          

















                                                                                                      
                                                                                 






















                                                                                                       
#!/bin/bash

cd -- "$(dirname "$0")"
if test -z "$BASE16"; then
	BASE16=../base16
fi
b="$PREFIX $BASE16"

f="66"
fo="666F"
foo="666F6F"
foob="666F6F62"
fooba="666F6F6261"
foobar="666F6F626172"

seq 10000 | od -t x1 | cut -d ' ' -f 2- | grep ' ' | sed 's/ //g' | tr '[a-f]' '[A-F]' > tmp

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_string ()
{
	test "$(printf "%s" "$1" | $b)" = "$2"
	report $? "$1"
	test "$(printf "%s" "$2" | $b -d)" = "$1"
	report $? "$1 -d"
}



empty ()
{
	test "$(printf "%s" "" | $b)" = ""
	report $? "empty"
	test "$(printf "%s" "" | $b -d)" = ""
	report $? "empty -d"
}

f () { test_string "f" "$f"; }
fo () { test_string "fo" "$fo"; }
foo () { test_string "foo" "$foo"; }
foob () { test_string "foob" "$foob"; }
fooba () { test_string "fooba" "$fooba"; }
foobar () { test_string "foobar" "$foobar"; }

massive ()
{
	diff <(seq 10000 | $b | tr -d $'\n') <(tr -d $'\n' < tmp) > /dev/null
	report $? "massive"
	diff <($b -d < tmp) <(seq 10000) > /dev/null
	report $? "massive -d"
}

file ()
{
	test $($b <(printf "foo")) = "$foo"
	report $? "file"
	test $($b -d <(printf "$foo")) = "foo"
	report $? "file -d"
}

dash ()
{
	test $(printf "foo" | $b -) = "$foo"
	report $? "dash"
	test $(printf "$foo" | $b -d -) = "foo"
	report $? "dash -d"
}

ddash ()
{
	test $(printf "foo" | $b --) = "$foo"
	report $? "ddash"
	test $(printf "$foo" | $b -d --) = "foo"
	report $? "ddash -d"
}

iflag ()
{
	test $(printf "$foo" | sed 's/./\%&/g' | $b -di) = "foo"
	report_np $? "iflag -d"
}

iflagless ()
{
	! printf "$foo" | sed 's/./\%&/g' | $b -d > /dev/null 2> /dev/null
	report_np $? "iflagless -d"
}

wflag ()
{
	diff <(seq 10000 | $b -w10) <(tr -d $'\n' < tmp | sed 's/........../&\n/g' ; echo) > /dev/null
	report_np $? "wflag"
}

w0flag ()
{
	diff <(seq 10000 | $b -w0) <(tr -d $'\n' < tmp ; echo) > /dev/null ||
	diff <(seq 10000 | $b -w0) <(tr -d $'\n' < tmp) > /dev/null
	report_np $? "w0flag"
}

lcase ()
{
	test "$(printf abcdef | $b -d 2> /dev/null)" = "$(printf ABCDEF | $b -d)"
	report_np $? "lcase -d"
}


if test $# = 0; then
	set empty f fo foo foob fooba foobar massive file dash ddash iflag iflagless wflag w0flag lcase
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 tmp
exit $ret