Mercurial > hg > audiodb
annotate tests/test-utils.sh @ 119:6062e6f1dcc1 endian-neutral
Towards endian-neutrality, part 4.
A little bit of defensive coding around the byte_swap() Do What I Mean
functionality: if the maximum acceptable dimensionality exceeds 16 bits,
then the byte swapping is no longer ambiguous.
author | mas01cr |
---|---|
date | Fri, 12 Oct 2007 12:58:30 +0000 |
parents | e6cdee24d6c3 |
children | 94502600a049 |
rev | line source |
---|---|
mas01cr@48 | 1 # no shebang line: this file should be sourced by run-test.sh files |
mas01cr@48 | 2 |
mas01cr@101 | 3 set -E |
mas01cr@101 | 4 |
mas01cr@48 | 5 trap "exit 1" ERR |
mas01cr@48 | 6 |
mas01cr@48 | 7 if [ -z ${AUDIODB} ]; then |
mas01cr@48 | 8 AUDIODB=../../audioDB |
mas01cr@48 | 9 fi |
mas01cr@48 | 10 |
mas01cr@48 | 11 # FIXME: maybe generalize to multiple arguments? Also, implement it |
mas01cr@48 | 12 # properly, rather than just for a few floats that we know how to |
mas01cr@48 | 13 # encode. This might involve writing some C code, as Bash doesn't do |
mas01cr@48 | 14 # Floating Point. (scanf() is probably enough). |
mas01cr@48 | 15 |
mas01cr@54 | 16 expect_clean_error_exit() { |
mas01cr@54 | 17 trap - ERR |
mas01cr@54 | 18 "$@" |
mas01cr@54 | 19 exit_code=$? |
mas01cr@54 | 20 trap "exit 1" ERR |
mas01cr@54 | 21 if [ $exit_code -eq 0 ]; then |
mas01cr@54 | 22 exit 1 |
mas01cr@54 | 23 elif [ $exit_code -ge 126 ]; then |
mas01cr@54 | 24 exit 1 |
mas01cr@54 | 25 fi |
mas01cr@54 | 26 } |
mas01cr@54 | 27 |
mas01cr@48 | 28 floatstring() { |
mas01cr@48 | 29 for arg in "$@"; do |
mas01cr@48 | 30 case ${arg} in |
mas01cr@48 | 31 0) |
mas01cr@48 | 32 printf "\x00\x00\x00\x00\x00\x00\x00\x00";; |
mas01cr@48 | 33 0.5) |
mas01cr@48 | 34 printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";; |
mas01cr@48 | 35 1) |
mas01cr@48 | 36 printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";; |
mas01cr@48 | 37 *) |
mas01cr@48 | 38 echo "bad arg to floatstring(): ${arg}" |
mas01cr@48 | 39 exit 1;; |
mas01cr@48 | 40 esac |
mas01cr@48 | 41 done |
mas01cr@48 | 42 } |
mas01cr@48 | 43 |
mas01cr@48 | 44 # FIXME: likewise. And endianness issues (which are a reflection of |
mas01cr@48 | 45 # the endianness of audioDB as of 2007-09-18, unfortunately). |
mas01cr@48 | 46 |
mas01cr@48 | 47 intstring() { |
mas01cr@48 | 48 # works up to 9 for now |
mas01cr@48 | 49 if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi |
mas01cr@48 | 50 printf "%b\x00\x00\x00" "\\x${1}" |
mas01cr@48 | 51 } |
mas01cr@87 | 52 |
mas01cr@87 | 53 # Web services utilities |
mas01cr@87 | 54 start_server() { |
mas01cr@87 | 55 $1 -s $2 & |
mas01cr@87 | 56 # HACK: deal with race on process creation |
mas01cr@87 | 57 sleep 1 |
mas01cr@101 | 58 trap 'kill $!; exit 1' ERR |
mas01cr@87 | 59 } |
mas01cr@87 | 60 |
mas01cr@87 | 61 stop_server() { |
mas01cr@87 | 62 grep ${AUDIODB} /proc/$1/cmdline > /dev/null |
mas01cr@87 | 63 kill $1 |
mas01cr@87 | 64 # HACK: deal with race on process exit |
mas01cr@87 | 65 sleep 1 |
mas01cr@87 | 66 expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline |
mas01cr@87 | 67 } |
mas01cr@87 | 68 |
mas01cr@87 | 69 check_server() { |
mas01cr@87 | 70 grep ${AUDIODB} /proc/$1/cmdline > /dev/null |
mas01cr@87 | 71 } |
mas01cr@94 | 72 |
mas01cr@95 | 73 expect_client_failure() { |
mas01cr@94 | 74 # FIXME: work out whether and how the client should report server |
mas01cr@94 | 75 # errors. At present, the client exits with a zero exit code. |
mas01cr@94 | 76 "$@" |
mas01cr@94 | 77 } |