annotate tests/0041/run-test.sh @ 400:8c7453fb5bd9 api-inversion

Invert audioDB::power_flag / audiodb_power() Here the exciting discovery is that the mmap(), memcpy(), munmap() sequence is in fact not safe. In principle an msync() call should be inserted before unmapping for in-core changes to mmap()ed files to be flushed to disk. In this case we work around the problem entirely, by not mmap()ing anything and doing everything with file descriptors. Amusingly, that's probably not desperately safe either, this time because we have to move the file descriptor position (which is also a shared resource). dup() doesn't save us, as the duplicate file descriptor shares a file position. This applies also to the filling of data_buffer in the query loop, and in fact basically any call to lseek(), which is why I'm not fixing it now. Solution: if you have multiple threads all acting at once on a single database, do one audiodb_open() per thread, for now at least.
author mas01cr
date Thu, 27 Nov 2008 16:22:52 +0000
parents da901c62e569
children add65705e655
rev   line source
mas01mc@332 1 #! /bin/bash
mas01mc@332 2
mas01mc@332 3 . ../test-utils.sh
mas01mc@332 4
mas01mc@332 5 if [ -f testdb ]; then rm -f testdb; fi
mas01mc@332 6
mas01mc@332 7 ${AUDIODB} -d testdb -N
mas01mc@332 8
mas01mc@332 9 intstring 2 > testfeature
mas01mc@332 10 floatstring 0 1 >> testfeature
mas01mc@332 11 floatstring 1 0 >> testfeature
mas01mc@332 12 floatstring 1 0 >> testfeature
mas01mc@332 13 floatstring 0 1 >> testfeature
mas01mc@332 14
mas01mc@332 15 intstring 1 > testpower
mas01mc@332 16 floatstring -0.5 >> testpower
mas01mc@332 17 floatstring -1 >> testpower
mas01mc@332 18 floatstring -1 >> testpower
mas01mc@332 19 floatstring -0.5 >> testpower
mas01mc@332 20
mas01mc@332 21 expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature -w testpower
mas01mc@332 22 ${AUDIODB} -d testdb -P
mas01mc@332 23 expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature
mas01mc@332 24 ${AUDIODB} -d testdb -I -f testfeature -w testpower
mas01mc@332 25
mas01mc@332 26 # sequence queries require L2NORM
mas01mc@332 27 ${AUDIODB} -d testdb -L
mas01mc@332 28
mas01mc@332 29 echo "query points (0.0,0.5),(0.0,0.5),(0.5,0.0)"
mas01mc@332 30 intstring 2 > testquery
mas01mc@332 31 floatstring 0 0.5 >> testquery
mas01mc@332 32 floatstring 0 0.5 >> testquery
mas01mc@332 33 floatstring 0.5 0 >> testquery
mas01mc@332 34
mas01mc@332 35 # LSH Indexing tests
mas01mc@332 36
mas01mc@332 37 # Indexing requires a radius (-R)
mas01mc@332 38 expect_clean_error_exit ${AUDIODB} -d testdb -X -l 1
mas01mc@332 39
mas01mc@332 40 # Index with default LSH params
mas01mc@332 41 ${AUDIODB} -d testdb -X -l 1 -R 1
mas01mc@332 42
mas01mc@332 43 WSPORT=10020
mas01mc@332 44 start_server ${AUDIODB} ${WSPORT}
mas01mc@332 45
mas01mc@332 46 # WS Query using the index
mas01mc@332 47
mas01mc@332 48 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 1 -f testquery -w testpower -R 1 > testoutput
mas01cr@333 49 echo testfeature 1 > test-expected-output
mas01mc@332 50 cmp testoutput test-expected-output
mas01mc@332 51
mas01mc@332 52 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 1 -f testquery -w testpower -p 0 -R 1 > testoutput
mas01cr@333 53 echo testfeature 1 > test-expected-output
mas01mc@332 54 cmp testoutput test-expected-output
mas01mc@332 55
mas01mc@332 56 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 1 -f testquery -w testpower -p 1 -R 1 > testoutput
mas01cr@333 57 echo testfeature 1 > test-expected-output
mas01mc@332 58 cmp testoutput test-expected-output
mas01mc@332 59
mas01mc@332 60 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 1 -f testquery -w testpower -e -R 1 > testoutput
mas01cr@333 61 echo testfeature 3 > test-expected-output
mas01mc@332 62 cmp testoutput test-expected-output
mas01mc@332 63
mas01mc@332 64 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 1 -f testquery -w testpower -e -R 1 --lsh_exact > testoutput
mas01cr@333 65 echo testfeature 3 > test-expected-output
mas01mc@332 66 cmp testoutput test-expected-output
mas01mc@332 67
mas01mc@332 68 # make index, sequenceLength=2
mas01mc@332 69 ${AUDIODB} -d testdb -X -l 2 -R 1
mas01mc@332 70
mas01mc@332 71 # query, sequenceLength=2
mas01mc@332 72 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 2 -f testquery -w testpower -p 0 -R 1 > testoutput
mas01cr@333 73 echo testfeature 1 > test-expected-output
mas01mc@332 74 cmp testoutput test-expected-output
mas01mc@332 75
mas01mc@332 76 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 2 -f testquery -w testpower -p 1 -R 1 > testoutput
mas01cr@333 77 echo testfeature 1 > test-expected-output
mas01mc@332 78 cmp testoutput test-expected-output
mas01mc@332 79
mas01mc@332 80 ${AUDIODB} -c localhost:${WSPORT} -d testdb -Q sequence -l 2 -f testquery -w testpower -p 0 -R 1 --lsh_exact > testoutput
mas01cr@333 81 echo testfeature 1 > test-expected-output
mas01mc@332 82 cmp testoutput test-expected-output
mas01mc@332 83
mas01mc@332 84 stop_server $!
mas01mc@332 85
mas01mc@332 86 exit 104