annotate libtests/0010/prog1.c @ 620:70fc1a504138

Okay, I think my python bindings have reached the border of useful, so in the svn they go. The bindings currently allow for adb create and open, status and the setting of the l2norm and power flags. Note that these are the direct c bindings, when it's done there will be OO dressing on top for standard entry. Also, even though I don't use numpy yet, the include file is brought in, so the module won't build if you don't have numpy in an importable place.
author map01bf
date Tue, 15 Sep 2009 17:40:02 +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;
mas01cr@498 10 adb_datum_t datum1 = {1, 2, "testfeature01", (double[2]) {0, 1}};
mas01cr@498 11 adb_datum_t datum2 = {1, 2, "testfeature10", (double[2]) {1, 0}};
mas01cr@498 12 if(audiodb_insert_datum(adb, &datum1))
mas01cr@498 13 return 1;
mas01cr@498 14 if(audiodb_insert_datum(adb, &datum2))
mas01cr@498 15 return 1;
mas01cr@498 16 if(audiodb_l2norm(adb))
mas01cr@498 17 return 1;
mas01ik@355 18
mas01cr@498 19 adb_datum_t query = {1, 2, "testquery", (double[2]) {0, 0.5}};
mas01ik@355 20
mas01cr@498 21 adb_query_id_t qid = {0};
mas01cr@498 22 qid.datum = &query;
mas01cr@498 23 qid.sequence_length = 1;
mas01cr@498 24 qid.sequence_start = 0;
mas01cr@498 25 adb_query_parameters_t parms =
mas01cr@498 26 {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10};
mas01cr@498 27 adb_query_refine_t refine = {0};
mas01cr@498 28 refine.flags |= ADB_REFINE_RADIUS;
mas01cr@498 29 refine.radius = 5;
mas01cr@498 30 refine.hopsize = 1;
mas01ik@355 31
mas01cr@498 32 adb_query_spec_t spec;
mas01cr@498 33 spec.qid = qid;
mas01cr@498 34 spec.params = parms;
mas01cr@498 35 spec.refine = refine;
mas01ik@355 36
mas01cr@498 37 adb_query_results_t *results = audiodb_query_spec(adb, &spec);
mas01cr@498 38 if(!results || results->nresults != 2) return 1;
mas01cr@498 39 result_present_or_fail(results, "testfeature01", 0, 0, 0);
mas01cr@498 40 result_present_or_fail(results, "testfeature10", 2, 0, 0);
mas01cr@498 41 audiodb_query_free_results(adb, &spec, results);
mas01cr@498 42
mas01cr@498 43 /* the test in the original test suite for
mas01cr@498 44 * audioDB-the-command-line-program alters the parms.ntracks, which
mas01cr@498 45 * is not very meaningful in this context (given that we don't do
mas01cr@498 46 * aggregation, but simply return valid points); here instead we
mas01cr@498 47 * check that radius filtering works. */
mas01cr@498 48 spec.refine.radius = 1;
mas01cr@498 49 results = audiodb_query_spec(adb, &spec);
mas01cr@498 50 if(!results || results->nresults != 1) return 1;
mas01cr@498 51 result_present_or_fail(results, "testfeature01", 0, 0, 0);
mas01cr@498 52 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 53
mas01cr@498 54 spec.qid.datum->data = (double[2]) {0.5, 0};
mas01cr@498 55 spec.refine.radius = 5;
mas01cr@498 56 results = audiodb_query_spec(adb, &spec);
mas01cr@498 57 if(!results || results->nresults != 2) return 1;
mas01cr@498 58 result_present_or_fail(results, "testfeature10", 0, 0, 0);
mas01cr@498 59 result_present_or_fail(results, "testfeature01", 2, 0, 0);
mas01cr@498 60 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 61
mas01cr@498 62 spec.refine.radius = 1;
mas01cr@498 63 results = audiodb_query_spec(adb, &spec);
mas01cr@498 64 if(!results || results->nresults != 1) return 1;
mas01cr@498 65 result_present_or_fail(results, "testfeature10", 0, 0, 0);
mas01cr@498 66 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 67
mas01cr@498 68 audiodb_close(adb);
mas01ik@355 69
mas01cr@498 70 return 104;
mas01ik@355 71 }