From: Bernhard Urban Date: Wed, 31 Mar 2010 21:20:11 +0000 (+0200) Subject: scanner: testcase-generator von georg X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=testub10.git;a=commitdiff_plain;h=2c9cf7104f3c039e475891dc588d981161b0d92c scanner: testcase-generator von georg --- diff --git a/scanner/georg.sh b/scanner/georg.sh new file mode 100755 index 0000000..198db29 --- /dev/null +++ b/scanner/georg.sh @@ -0,0 +1,35 @@ +#! /bin/bash + +TCG=./georg_testcase-generator.sh +DIR=~/abgabe/scanner +ELF=~/abgabe/scanner/scanner + +make -C $DIR/ + +while read DIGITS i +do + PROGRAM=$ELF DIGITS=$DIGITS $TCG $i > /dev/null + + mv -f $i.0.0 georg_$i.0 + mv -f $i.0.1 georg_$i.out + + rm -f $i.*.* + +done << EOF +3 $(echo -ne ' :=' | xxd -ps) +6 $(echo -ne ' /*1' | xxd -ps) +5 $(echo -ne ' if1' | xxd -ps) +4 $(echo -ne ' 0x1' | xxd -ps) +2 $(echo -ne ' \t\r\f\b' | xxd -ps) +EOF +cat > /dev/null << EOF +3 $(echo -ne '0123' | xxd -ps) +6 $(echo -ne ' if39' | xxd -ps) +7 $(echo -ne ' if0x1' | xxd -ps) +EOF + +make -C $DIR/ test + +## Georg Schiesser @ UBVL 2010S # GPLv2 +## vim: filetype=sh shiftwidth=8 tabstop=8 noexpandtab nopaste: +## EOF diff --git a/scanner/georg_testcase-generator.sh b/scanner/georg_testcase-generator.sh new file mode 100755 index 0000000..3f1e24e --- /dev/null +++ b/scanner/georg_testcase-generator.sh @@ -0,0 +1,89 @@ +#! /bin/bash + +[ "$SCRIPT" ] || SCRIPT="$(basename $0)" +[ "$PROGRAM" ] || PROGRAM='scanner' +[ "$DIGITS" ] || DIGITS='3' + +if ! test $# -eq 1 +then + cat >&2 << EOF +Usage: + [ PATH="\$PATH:/a/b" ] [ PROGRAM='$PROGRAM' ] [ DIGITS='$DIGITS' ] \\ + $SCRIPT hexcharset + +Example: + PROGRAM='~/abgabe/scanner/scanner' DIGITS='6' \\ + $SCRIPT 202f2a31 ## \$(echo -n ' /*1' | xxd -ps) + $SCRIPT 2009 ## \$(echo -ne ' \\t' | xxd -ps) + $SCRIPT 203a3d ## := ## if0x1 # \\t\\r + $SCRIPT 202f2a ## /* ## if39 ## \\f\\b + $SCRIPT 202f2a31 ## /*1 # 0x1 ### 0123 + | sha1sum --check + + scanner < 202f2a31.0.0 \\ + | diff -u 202f2a31.0.1 - \\ + || (echo >&2 ERROR ; false) + +Result: + sha1sum hexcharset.retval.fileno + +Warning: first character in hexcharset behaves slightly differently. +EOF + exit 1 +fi + +HEX="$1" +HEX=$(echo "$HEX" | xxd -r -ps | xxd -ps | head -1) +NUM=$(echo "$HEX" | xxd -r -ps | wc -c) + +if ! test $NUM -ge 2 +then + echo >&2 "ERROR: charset too small" + exit 1 +fi + +if ! test $NUM -le 16 +then + echo >&2 "ERROR: charset too big" + exit 1 +fi + +if ! ( echo | $PROGRAM ) +then + echo >&2 "ERROR: program failed" + exit 1 +fi + +MAX=$((NUM**(DIGITS)-1)) +SRC=$(seq 0 $((NUM-1)) | sed -e "1iobase=$NUM" | bc | tr -d '\n') + +rm -f $HEX.i.* +rm -f $HEX.*.* + +for i in $(seq $MAX | sed -e "1iobase=$NUM" | bc) +do + echo $i | tr "$SRC" "$(echo $HEX | xxd -r -ps)" > $HEX.i.0 + + cat $HEX.i.0 | $PROGRAM >$HEX.i.1 2>$HEX.i.2 + RET=$? + + cat $HEX.i.0 >> $HEX.$RET.0 + cat $HEX.i.1 >> $HEX.$RET.1 + cat $HEX.i.2 >> $HEX.$RET.2 +done + +rm -f $HEX.i.* +sha1sum $HEX.*.* + +# WISHLIST +# set -o pipefail +# MD5 SHA1 +# *.[^0].* keep split +# find -iname "$HEX.*.*" -ls +# head $HEX.*.* +# SCRIPT +# multiple string args + +## Georg Schiesser @ UBVL 2010S # GPLv2 +## vim: filetype=sh shiftwidth=8 tabstop=8 noexpandtab nopaste: +## EOF