Mercurial > hg > audiodb
view tests/test-utils.sh @ 465:1030664df98c api-inversion
No more audioDB::index_allocate and audioDB::index_init_query
No more SERVER_LSH_INDEX_SINGLETON, either; instead each adb_t contains
a single cache of the last used in-core index. At the moment, this
cache is unused by the server (and the previous cache code has been
replaced by a comment), but I think that this way everyone can be
allowed to benefit without anyone having to explicitly manage indexes
themselves.
I'm not going to say how long I wandered in a maze of valgrind before
giving up and keeping the hacky workaround for loading the lsh tables
[see the FIXME comment in audiodb_index_init_query()]; let's just say
that it was long enough to find the extra bonus crashy close(lshfid) in
audioDB::index_index_db.
Also, delete the abstraction-inverting LSH stuff from query.cpp where we
are making our reporters; the fix for that, which is presumably when
creating small indexes for large datasets, is to implement
space-efficient reporters. (The accumulator code, which is my second
attempt, is more space-efficient than the reporters; inspiration may
wish to be drawn...)
author | mas01cr |
---|---|
date | Tue, 30 Dec 2008 23:56:57 +0000 |
parents | e21cc48ddf4d |
children | d5ada9532a40 |
line wrap: on
line source
# no shebang line: this file should be sourced by run-test.sh files set -E trap "exit 1" ERR if [ -z "${AUDIODB}" ]; then AUDIODB=../../audioDB fi # FIXME: maybe generalize to multiple arguments? Also, implement it # properly, rather than just for a few floats that we know how to # encode. This might involve writing some C code, as Bash doesn't do # Floating Point. (scanf() is probably enough). expect_clean_error_exit() { trap - ERR "$@" exit_code=$? trap "exit 1" ERR if [ $exit_code -eq 0 ]; then exit 1 elif [ $exit_code -ge 126 ]; then exit 1 fi } floatstring() { for arg in "$@"; do case ${arg} in 0) printf "\x00\x00\x00\x00\x00\x00\x00\x00";; -0.5) printf "\x00\x00\x00\x00\x00\x00\xe0\xbf";; 0.5) printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";; -1) printf "\x00\x00\x00\x00\x00\x00\xf0\xbf";; 1) printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";; *) echo "bad arg to floatstring(): ${arg}" exit 1;; esac done } # FIXME: likewise. And endianness issues (which are a reflection of # the endianness of audioDB as of 2007-09-18, unfortunately). intstring() { # works up to 9 for now if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi printf "%b\x00\x00\x00" "\\x${1}" } # Web services utilities start_server() { $1 -s $2 & # HACK: deal with race on process creation sleep 1 trap 'kill $!; exit 1' ERR } stop_server() { grep "${AUDIODB}" /proc/$1/cmdline > /dev/null kill $1 # HACK: deal with race on process exit sleep 1 expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline } check_server() { grep "${AUDIODB}" /proc/$1/cmdline > /dev/null } expect_client_failure() { # FIXME: work out whether and how the client should report server # errors. At present, the client exits with a zero exit code. "$@" }