Mercurial > hg > audiodb
view libtests/0037/prog1.c @ 473:b2fd8113d8bc api-inversion
const declarations for some API arguments.
This should make it slightly clearer whose responsibility (the user's)
it is to manage the memory pointed to by the corresponding arguments.
Suggested by Chris Cannam.
author | mas01cr |
---|---|
date | Tue, 06 Jan 2009 16:27:01 +0000 |
parents | c26c5b7ef0d2 |
children | e072aa1611f5 |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sysexits.h> #include <fcntl.h> #include <dirent.h> #include <unistd.h> #include <sys/stat.h> /* * * #define NDEBUG * * */ #include <assert.h> #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; adb_insert_t *batch = 0; adb_status_t status; adb_query_t query = {0}; adb_queryresult_t result; clean_remove_db(dbname); adb = audiodb_create("testdb", 0, 0, 0); if(!adb) { return 1; } maketestfile("testfeature01", (int[1]) {2}, (double[4]) {0,1,1,0}, 4); maketestfile("testfeature10", (int[1]) {2}, (double[4]) {1,0,0,1}, 4); batch = (adb_insert_t *) calloc(6, sizeof(adb_insert_t)); if(!batch) { return 1; } batch[0].features = "testfeature01"; batch[1].features = "testfeature01"; batch[2].features = "testfeature10"; batch[3].features = "testfeature10"; batch[4].features = "testfeature01"; batch[5].features = "testfeature10"; audiodb_batchinsert(adb, batch, 6); free(batch); if(audiodb_status(adb, &status)) { return 1; } if(status.numFiles != 2) { return 1; } if(audiodb_l2norm(adb)) { return 1; } 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; }