annotate libtests/0007/prog1.c @ 622:695651b8c1a3

added a query hook. Should compile a run, but I haven't exhaustively tested the various input parameters yet. As such, there may well be some ways to get to the api calls that bring the module down. Let me know if you find any. The actual query call is a bit of a mess, but will be more intuitive from the native python layer (to be written)... so the python bindings now have a complete path: >>import _pyadb >>aDB = _pyadb._pyadb_create("test.adb", 0,0,0) >>_pyadb._pyadb_status(aDB) >>_pyadb._pyadb_insertFromFile(aDB, "someFeats.mfcc12") ...(add some more data) >>result = _pyadb._pyadb_queryFromKey(aDB, "a Key in aDB", [options]) and then result has a nice dict of your results.
author map01bf
date Mon, 21 Sep 2009 17:42:52 +0000
parents 342822c2d49a
children bcc7a6ddb2c8
rev   line source
mas01cr@498 1 #include "audioDB_API.h"
mas01cr@498 2 #include "test_utils_lib.h"
mas01ik@355 3
mas01cr@498 4 int main(int argc, char **argv) {
mas01cr@498 5 adb_t *adb;
mas01ik@355 6
mas01cr@498 7 clean_remove_db(TESTDB);
mas01cr@498 8 if(!(adb = audiodb_create(TESTDB, 0, 0, 0)))
mas01cr@498 9 return 1;
mas01ik@355 10
mas01cr@498 11 adb_datum_t feature = {2, 2, "testfeature", (double[4]) {0, 1, 1, 0}};
mas01cr@498 12 if(audiodb_insert_datum(adb, &feature))
mas01cr@498 13 return 1;
mas01cr@498 14 audiodb_l2norm(adb);
mas01ik@355 15
mas01cr@498 16 adb_datum_t query = {1, 2, "testquery", (double[2]) {0, 0.5}};
mas01cr@498 17 adb_query_id_t qid = {0};
mas01cr@498 18 qid.datum = &query;
mas01cr@498 19 qid.sequence_length = 16;
mas01cr@498 20 qid.sequence_start = 0;
mas01cr@498 21 adb_query_parameters_t parms =
mas01cr@498 22 {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10};
mas01cr@498 23 adb_query_refine_t refine = {0};
mas01cr@498 24 refine.hopsize = 1;
mas01ik@355 25
mas01cr@498 26 adb_query_spec_t spec;
mas01cr@498 27 spec.qid = qid;
mas01cr@498 28 spec.params = parms;
mas01cr@498 29 spec.refine = refine;
mas01cr@498 30 adb_query_results_t *results = audiodb_query_spec(adb, &spec);
mas01cr@498 31 if(results) return 1;
mas01ik@355 32
mas01cr@498 33 spec.params.npoints = 1;
mas01cr@498 34 results = audiodb_query_spec(adb, &spec);
mas01cr@498 35 if(results) return 1;
mas01ik@355 36
mas01cr@498 37 spec.qid.datum->data = (double [2]) {0.5, 0};
mas01cr@498 38 spec.params.npoints = 10;
mas01cr@498 39 results = audiodb_query_spec(adb, &spec);
mas01cr@498 40 if(results) return 1;
mas01cr@498 41
mas01cr@498 42 spec.params.npoints = 1;
mas01cr@498 43 results = audiodb_query_spec(adb, &spec);
mas01cr@498 44 if(results) return 1;
mas01ik@355 45
mas01cr@498 46 /* the above tests mirror those in the audioDB command-line test
mas01cr@498 47 * suite. We can test for additional bad input cases too: */
mas01ik@355 48
mas01cr@498 49 spec.qid.sequence_start = 1;
mas01cr@498 50 spec.qid.sequence_length = 1;
mas01cr@498 51 results = audiodb_query_spec(adb, &spec);
mas01cr@498 52 if(results) return 1;
mas01ik@355 53
mas01cr@498 54 /* and just sanity check that we haven't broken everything */
mas01cr@498 55 spec.qid.sequence_start = 0;
mas01cr@498 56 spec.params.npoints = 2;
mas01cr@498 57 results = audiodb_query_spec(adb, &spec);
mas01cr@498 58 if(!results || results->nresults != 2) return 1;
mas01cr@498 59 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 60
mas01cr@498 61 audiodb_close(adb);
mas01ik@355 62
mas01cr@498 63 return 104;
mas01ik@355 64 }