#!/bin/bash cd -- "$(dirname "$0")" N=14 if test -z "$tool"; then tool=../${algo}sum fi s="$PREFIX $tool" 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 } multiple_files_order () { $s $(seq $N) | tr '[A-F]' '[a-f]' | sed 's/[\t ]*/ /' | cut -d ' ' -f 2 > tmp1 < $algo sed 's/ */ /' | cut -d ' ' -f 2 > tmp2 diff tmp1 tmp2 > /dev/null report $? "multiple_files_order" rm tmp1 tmp2 } multiple_files_delim () { $s $(seq $N) | tr '[A-F]' '[a-f]' | sed 's/^[0-9a-f]*//' | sort > tmp1 seq $N | sed 's/^/ /' | sort > tmp2 diff tmp1 tmp2 > /dev/null report $? "multiple_files_delim" rm tmp1 tmp2 } multiple_files_sum () { $s $(seq $N) | tr '[A-F]' '[a-f]' | sed 's/\t/ /' | cut -d ' ' -f 1 | sort > tmp1 < $algo cut -d ' ' -f 1 | sort > tmp2 diff tmp1 tmp2 > /dev/null report $? "multiple_files_sum" rm tmp1 tmp2 } multiple_files () { $s $(seq $N) | tr '[A-F]' '[a-f]' > tmp1 diff tmp1 $algo > /dev/null report $? "multiple_files" rm tmp1 } one_file () { $s 1 | tr '[A-F]' '[a-f]' > tmp1 < $algo head -n 1 > tmp2 diff tmp1 tmp2 > /dev/null report $? "one_file" rm tmp1 } stdin () { $s < 1 | tr '[A-F]' '[a-f]' | sed 's/[\t ]/ /' | cut -d ' ' -f 1 > tmp1 < $algo head -n 1 | cut -d ' ' -f 1 > tmp2 diff tmp1 tmp2 > /dev/null report $? "stdin" rm tmp1 } dash () { $s - < 1 | tr '[A-F]' '[a-f]' | sed 's/[\t ]/ /' | cut -d ' ' -f 1 > tmp1 < $algo head -n 1 | cut -d ' ' -f 1 > tmp2 diff tmp1 tmp2 > /dev/null report $? "dash" rm tmp1 } check_file_match () { $s $(seq $N) > tmp1 $s -c tmp1 > /dev/null report $? "check_file_match" rm tmp1 } check_stdin_match () { $s $(seq $N) > tmp1 $s -c < tmp1 > /dev/null report $? "check_stdin_match" rm tmp1 } check_dash_match () { $s $(seq $N) > tmp1 $s -c - < tmp1 > /dev/null report $? "check_dash_match" rm tmp1 } check_file_mismatch () { $s $(seq $N) | tr '[a-f]' '[1-6]' | tr '[A-F]' '[1-6]' > tmp1 ! $s -c tmp1 > /dev/null 2> /dev/null report $? "check_file_mismatch" rm tmp1 } check_stdin_mismatch () { $s $(seq $N) | tr '[a-f]' '[1-6]' | tr '[A-F]' '[1-6]' > tmp1 ! $s -c < tmp1 > /dev/null 2> /dev/null report $? "check_stdin_mismatch" rm tmp1 } check_dash_mismatch () { $s $(seq $N) | tr '[a-f]' '[1-6]' | tr '[A-F]' '[1-6]' > tmp1 ! $s -c - < tmp1 > /dev/null 2> /dev/null report $? "check_dash_mismatch" rm tmp1 } check_case () { $s $(seq $N) | tr '[A-F]' '[a-f]' > tmp1 tr '[a-f]' '[A-F]' < tmp1 > tmp2 $s -c tmp1 > /dev/null && $s -c tmp2 > /dev/null report $? "check_case" rm tmp1 tmp2 } check_multi () { $s $(seq 1 5) > tmp1 $s $(seq 6 $N) > tmp2 $s -c tmp1 tmp2 > /dev/null report $? "check_multi" rm tmp1 tmp2 } massive () { diff <($s $(cat bytes)) ${algo}-bytes > /dev/null report $? "massive" } if test $# = 0; then set multiple_files_order multiple_files_delim multiple_files_sum multiple_files one_file \ stdin dash check_file_match check_stdin_match check_dash_match check_file_mismatch \ check_stdin_mismatch check_dash_mismatch check_case check_multi massive 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