Chris@118: Chris@182: set -e Chris@119: Chris@182: mypath=$(dirname $0) Chris@182: Chris@182: case "$(pwd)/$mypath" in Chris@182: *" "*) Chris@182: echo 1>&2 Chris@182: echo "ERROR: Test scripts do not handle paths containing spaces (yes, I know)" 1>&2 Chris@182: echo "(Path is: \"$(pwd)/$mypath\")" 1>&2 Chris@182: exit 1;; Chris@182: *) Chris@182: ;; Chris@182: esac Chris@182: Chris@119: testdir=$mypath/.. Chris@119: r=$testdir/../sonic-annotator Chris@119: Chris@369: version=$(perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' $testdir/../version.h | sed 's/-//g') Chris@369: nextversion=$version.1 Chris@369: Chris@119: audiopath=$testdir/audio Chris@118: Chris@118: percplug=vamp:vamp-example-plugins:percussiononsets Chris@126: amplplug=vamp:vamp-example-plugins:amplitudefollower Chris@118: testplug=vamp:vamp-test-plugin:vamp-test-plugin Chris@30: Chris@30: fail() { Chris@30: echo "Test failed: $1" Chris@30: exit 1 Chris@30: } Chris@30: Chris@30: csvcompare() { Chris@30: # permit some fuzz in final few digits Chris@30: a="$1" Chris@30: b="$2" cannam@296: perl -p -e 's/(\d+\.\d{6})\d+/$1/g' "$a" > "${a}__" cannam@296: perl -p -e 's/(\d+\.\d{6})\d+/$1/g' "$b" > "${b}__" Chris@30: cmp -s "${a}__" "${b}__" Chris@30: rv=$? Chris@30: rm "${a}__" "${b}__" Chris@30: return $rv Chris@30: } Chris@30: Chris@75: csvcompare_ignorefirst() { Chris@75: # a bit like the above, but ignoring first column (and without temp files) Chris@75: out=`cat "$1" "$2" | cut -d, -f2- | perl -p -e 's/(\d+\.\d{6})\d+/$1/' | sort | uniq -c | grep -v ' 2 '` Chris@75: return `[ -z "$out" ]` Chris@75: } Chris@75: Chris@196: midicompare() { Chris@196: a="$1" Chris@196: b="$2" Chris@196: od -c "$a" > "${a}__" Chris@196: od -c "$b" > "${b}__" Chris@196: cmp -s "${a}__" "${b}__" Chris@196: rv=$? Chris@196: rm "${a}__" "${b}__" Chris@196: return $rv Chris@196: } Chris@196: Chris@204: jsoncompare() { Chris@221: # The Sonic Annotator version number appears in the JAMS output -- Chris@221: # filter that out, and also reformat to ignore whitespace differences Chris@204: a="$1" Chris@204: b="$2" Chris@287: cat "$a" | sed 's/Sonic Annotator v[0-9a-z.]*/Sonic Annotator vXXX/' | json_reformat > "${a}__" Chris@287: cat "$b" | sed 's/Sonic Annotator v[0-9a-z.]*/Sonic Annotator vXXX/' | json_reformat > "${b}__" Chris@221: cmp -s "${a}__" "${b}__" Chris@208: rv=$? Chris@208: rm "${a}__" "${b}__" Chris@208: return $rv Chris@204: } Chris@204: Chris@261: SDIFF_WIDTH=140 Chris@261: Chris@108: faildiff() { Chris@108: echo "Test failed: $1" Chris@108: if [ -n "$2" -a -n "$3" ]; then Chris@108: echo "Output follows:" Chris@108: echo "--" Chris@196: cat "$2" Chris@108: echo "--" Chris@261: echo "Expected output follows ($3):" Chris@108: echo "--" Chris@196: cat "$3" Chris@108: echo "--" Chris@226: echo "Diff (output on left, expected on right):" Chris@108: echo "--" Chris@261: sdiff -w${SDIFF_WIDTH} "$2" "$3" Chris@196: echo "--" Chris@196: fi Chris@196: exit 1 Chris@196: } Chris@196: Chris@196: faildiff_od() { Chris@196: echo "Test failed: $1" Chris@196: if [ -n "$2" -a -n "$3" ]; then Chris@196: echo "Output follows:" Chris@196: echo "--" Chris@196: od -c "$2" Chris@196: echo "--" Chris@261: echo "Expected output follows ($3):" Chris@196: echo "--" Chris@196: od -c "$3" Chris@196: echo "--" Chris@196: echo "Diff:" Chris@196: echo "--" Chris@196: od -w8 -c "$3" > "${3}__" Chris@261: od -w8 -c "$2" | sdiff -w${SDIFF_WIDTH} - "${3}__" Chris@196: rm "${3}__" Chris@108: echo "--" Chris@108: fi Chris@108: exit 1 Chris@108: } Chris@75: Chris@191: failshow() { Chris@191: echo "Test failed: $1" Chris@191: if [ -n "$2" ]; then Chris@191: echo "Output follows:" Chris@191: echo "--" Chris@191: cat $2 Chris@191: echo "--" Chris@191: fi Chris@191: exit 1 Chris@191: } Chris@108: Chris@191: check_json() { Chris@191: test -f $1 || \ Chris@191: fail "Fails to write output to expected location $1 for $2" Chris@191: cat $1 | json_verify -q || \ Chris@191: failshow "Writes invalid JSON to location $1 for $2" $1 Chris@191: rm -f $1 Chris@191: } Chris@191: Chris@191: