annotate libtests/0027/prog1.c @ 496:8fb85fbcaba6 api-inversion

Mostly disentangle API from command-line binary. Now audioDB.cpp doesn't need to be included in the library, because nothing the library does creates an audioDB instance. Hooray. We can't disentangle the other way, because there's still plenty in the command-line binary that isn't implemented in terms of the API, so the audioDB binary code needs to know naughty stuff about the library's internals (e.g. what the file header looks like). Remove liszt.o and sample.o from the library, even though they'll probably make a reapparance soon (for scare-quoted values of "soon") Remove cmdline.o and common.o from the library, not scheduled to make a reapparence ever (hooray!). Separate out the bits that are used in the library -- locks and PointPairs -- into their own files.
author mas01cr
date Sat, 10 Jan 2009 15:33:25 +0000
parents f6b126b018d8
children
rev   line source
mas01cr@487 1 #include "audioDB_API.h"
mas01cr@487 2 #include "test_utils_lib.h"
mas01ik@355 3
mas01cr@492 4 int main(int argc, char **argv) {
mas01cr@492 5 adb_t *adb;
mas01ik@355 6
mas01cr@492 7 clean_remove_db(TESTDB);
mas01cr@492 8 if(!(adb = audiodb_create(TESTDB, 0, 0, 0)))
mas01cr@492 9 return 1;
mas01ik@355 10
mas01cr@492 11 adb_datum_t feature = {2, 2, "testfeature", (double[4]){0, 1, 1, 0},
mas01cr@492 12 (double[2]){-0.5, -1}};
mas01cr@492 13 if(!audiodb_insert_datum(adb, &feature))
mas01cr@492 14 return 1;
mas01cr@492 15 if(audiodb_power(adb))
mas01cr@492 16 return 1;
mas01cr@492 17 feature.power = NULL;
mas01cr@492 18 if(!audiodb_insert_datum(adb, &feature))
mas01cr@492 19 return 1;
mas01cr@492 20 feature.power = (double[2]){-0.5, -1};
mas01cr@492 21 if(audiodb_insert_datum(adb, &feature))
mas01cr@492 22 return 1;
mas01ik@355 23
mas01cr@492 24 if(audiodb_l2norm(adb))
mas01cr@492 25 return 1;
mas01ik@355 26
mas01cr@492 27 adb_datum_t query = {1, 2, "testquery", (double[2]) {0, 0.5}};
mas01cr@492 28 adb_query_id_t qid = {0};
mas01cr@492 29 qid.datum = &query;
mas01cr@492 30 qid.sequence_length = 1;
mas01cr@492 31 qid.sequence_start = 0;
mas01cr@492 32 adb_query_parameters_t parms =
mas01cr@492 33 {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10};
mas01cr@492 34 adb_query_refine_t refine = {0};
mas01cr@492 35 refine.hopsize = 1;
mas01ik@355 36
mas01cr@492 37 adb_query_spec_t spec;
mas01cr@492 38 spec.qid = qid;
mas01cr@492 39 spec.params = parms;
mas01cr@492 40 spec.refine = refine;
mas01ik@355 41
mas01cr@492 42 adb_query_results_t *results = audiodb_query_spec(adb, &spec);
mas01cr@492 43 if(!results || results->nresults != 2) return 1;
mas01cr@492 44 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 45 result_present_or_fail(results, "testfeature", 2, 0, 1);
mas01cr@492 46 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 47
mas01cr@492 48 spec.params.npoints = 1;
mas01cr@492 49 results = audiodb_query_spec(adb, &spec);
mas01cr@492 50 if(!results || results->nresults != 1) return 1;
mas01cr@492 51 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 52 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 53
mas01cr@492 54 spec.qid.datum->data = (double [2]) {0.5, 0};
mas01cr@492 55 spec.params.npoints = 10;
mas01cr@492 56 results = audiodb_query_spec(adb, &spec);
mas01cr@492 57 if(!results || results->nresults != 2) return 1;
mas01cr@492 58 result_present_or_fail(results, "testfeature", 0, 0, 1);
mas01cr@492 59 result_present_or_fail(results, "testfeature", 2, 0, 0);
mas01cr@492 60 audiodb_query_free_results(adb, &spec, results);
mas01cr@492 61
mas01cr@492 62 spec.params.npoints = 1;
mas01cr@492 63 results = audiodb_query_spec(adb, &spec);
mas01cr@492 64 if(!results || results->nresults != 1) return 1;
mas01cr@492 65 result_present_or_fail(results, "testfeature", 0, 0, 1);
mas01cr@492 66 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 67
mas01cr@492 68 /* queries with associated power data */
mas01cr@492 69 spec.qid.datum->data = (double [2]) {0, 0.5};
mas01cr@492 70 spec.qid.datum->power = (double [1]) {-0.5};
mas01cr@492 71 spec.params.npoints = 10;
mas01cr@492 72 spec.refine.flags = ADB_REFINE_ABSOLUTE_THRESHOLD;
mas01cr@492 73 spec.refine.absolute_threshold = -1.4;
mas01cr@492 74 results = audiodb_query_spec(adb, &spec);
mas01cr@492 75 if(!results || results->nresults != 2) return 1;
mas01cr@492 76 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 77 result_present_or_fail(results, "testfeature", 2, 0, 1);
mas01cr@492 78 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 79
mas01cr@492 80 spec.refine.absolute_threshold = -0.6;
mas01cr@492 81 results = audiodb_query_spec(adb, &spec);
mas01cr@492 82 if(!results || results->nresults != 1) return 1;
mas01cr@492 83 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 84 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 85
mas01cr@492 86 spec.refine.absolute_threshold = -0.2;
mas01cr@492 87 results = audiodb_query_spec(adb, &spec);
mas01cr@492 88 if(!results || results->nresults != 0) return 1;
mas01cr@492 89 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 90
mas01cr@492 91 spec.refine.absolute_threshold = 0;
mas01cr@492 92 spec.refine.flags = ADB_REFINE_RELATIVE_THRESHOLD;
mas01cr@492 93 spec.refine.relative_threshold = 1;
mas01cr@492 94 results = audiodb_query_spec(adb, &spec);
mas01cr@492 95 if(!results || results->nresults != 2) return 1;
mas01cr@492 96 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 97 result_present_or_fail(results, "testfeature", 2, 0, 1);
mas01cr@492 98 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 99
mas01cr@492 100 spec.refine.relative_threshold = 0.2;
mas01cr@492 101 results = audiodb_query_spec(adb, &spec);
mas01cr@492 102 if(!results || results->nresults != 1) return 1;
mas01cr@492 103 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@492 104 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 105
mas01cr@492 106 spec.qid.datum->data = (double [2]) {0.5, 0};
mas01cr@492 107 spec.refine.flags = ADB_REFINE_ABSOLUTE_THRESHOLD;
mas01cr@492 108 spec.refine.absolute_threshold = -1.4;
mas01cr@492 109 results = audiodb_query_spec(adb, &spec);
mas01cr@492 110 if(!results || results->nresults != 2) return 1;
mas01cr@492 111 result_present_or_fail(results, "testfeature", 0, 0, 1);
mas01cr@492 112 result_present_or_fail(results, "testfeature", 2, 0, 0);
mas01cr@492 113 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 114
mas01cr@492 115 spec.refine.absolute_threshold = -0.6;
mas01cr@492 116 results = audiodb_query_spec(adb, &spec);
mas01cr@492 117 if(!results || results->nresults != 1) return 1;
mas01cr@492 118 result_present_or_fail(results, "testfeature", 2, 0, 0);
mas01cr@492 119 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 120
mas01cr@492 121 spec.refine.absolute_threshold = -0.2;
mas01cr@492 122 results = audiodb_query_spec(adb, &spec);
mas01cr@492 123 if(!results || results->nresults != 0) return 1;
mas01cr@492 124 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 125
mas01cr@492 126 spec.refine.absolute_threshold = 0;
mas01cr@492 127 spec.refine.flags = ADB_REFINE_RELATIVE_THRESHOLD;
mas01cr@492 128 spec.refine.relative_threshold = 1;
mas01cr@492 129 results = audiodb_query_spec(adb, &spec);
mas01cr@492 130 if(!results || results->nresults != 2) return 1;
mas01cr@492 131 result_present_or_fail(results, "testfeature", 0, 0, 1);
mas01cr@492 132 result_present_or_fail(results, "testfeature", 2, 0, 0);
mas01cr@492 133 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 134
mas01cr@492 135 spec.refine.relative_threshold = 0.2;
mas01cr@492 136 results = audiodb_query_spec(adb, &spec);
mas01cr@492 137 if(!results || results->nresults != 1) return 1;
mas01cr@492 138 result_present_or_fail(results, "testfeature", 2, 0, 0);
mas01cr@492 139 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 140
mas01cr@492 141 audiodb_close(adb);
mas01ik@355 142
mas01cr@492 143 return 104;
mas01ik@355 144 }