Mercurial > hg > audiodb
changeset 470:c26c5b7ef0d2 api-inversion
Implement libtests/0037 using audiodb_query_spec()
It's a bit wordy; there's also the struct / pointer issue in
audiodb_query_spec_t to think through. But it does work.
author | mas01cr |
---|---|
date | Wed, 31 Dec 2008 16:52:34 +0000 |
parents | d3afc91d205d |
children | 0f96ad351990 |
files | libtests/0037/prog1.c |
diffstat | 1 files changed, 106 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/libtests/0037/prog1.c Wed Dec 31 15:44:16 2008 +0000 +++ b/libtests/0037/prog1.c Wed Dec 31 16:52:34 2008 +0000 @@ -14,6 +14,17 @@ #include "../../audioDB_API.h" #include "../test_utils_lib.h" +int result_position(adb_query_results_t *r, const char *key, float dist, uint32_t qpos, uint32_t ipos) { + for(uint32_t k = 0; k < r->nresults; k++) { + adb_result_t result = r->results[k]; + if((dist == result.dist) && (qpos == result.qpos) && + (ipos == result.ipos) && !(strcmp(key, result.key))) { + return k; + } + } + return -1; +} + int main(int argc, char *argv[]) { char *dbname = "testdb"; adb_t *adb; @@ -43,6 +54,7 @@ batch[5].features = "testfeature10"; audiodb_batchinsert(adb, batch, 6); + free(batch); if(audiodb_status(adb, &status)) { return 1; @@ -55,21 +67,100 @@ return 1; } - maketestfile("testquery", (int [1]) {2}, (double[2]) {0, 0.5}, 2); - return 14; - /* can't do nsequence yet */ - /* - query.querytype = "nsequence"; - query.sequencelength = "1"; - query.feature = "testquery"; - if(audiodb_query(adb, &query, &result)) { - return 1; - } - if(result.sizeRlist != 2) { - return 1; - } - if(testoneresult(&result, 0, "testfeature01" ...)); + adb_datum_t datum = {1, 2, NULL, (double [2]){0, 0.5}, NULL, NULL}; + adb_query_id_t qid = {0}; + qid.datum = &datum; + qid.sequence_length = 1; + adb_query_parameters_t parms = + {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; + adb_query_refine_t refine = {0}; + refine.hopsize = 1; + + /* FIXME: structs / pointers */ + adb_query_spec_t spec; + spec.qid = qid; + spec.params = parms; + spec.refine = refine; + + adb_query_results_t *results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 0) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 2; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 0) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 5; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 0) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 1; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 2) return 1; + if(result_position(results, "testfeature01", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 1) < 0) return 1; + + audiodb_query_free_results(adb, &spec, results); + + spec.qid.datum->data = (double [2]) {0.5, 0}; + spec.params.npoints = 10; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 1) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 2; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 1) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 5; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 4) return 1; + if(result_position(results, "testfeature01", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature01", 2, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 0) < 0) return 1; + if(result_position(results, "testfeature10", 2, 0, 1) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + spec.params.npoints = 1; + results = audiodb_query_spec(adb, &spec); + + if(results->nresults != 2) return 1; + if(result_position(results, "testfeature01", 0, 0, 1) < 0) return 1; + if(result_position(results, "testfeature10", 0, 0, 0) < 0) return 1; + audiodb_query_free_results(adb, &spec, results); + + audiodb_close(adb); + return 104; - */ }