annotate libtests/0030/prog1.c @ 539:06ed85832c3b multiprobeLSH

Optimized the query_loop_points inner loop for memcpy and I/O efficiency. Uses sparse seeks and reads to perform scattered reads across data set. Current version does not cache fid between open calls to the same trackID.
author mas01mc
date Sat, 07 Feb 2009 01:20:05 +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 = {4, 2, "testfeature",
mas01cr@498 12 (double [8]) {0, 1, 1, 0, 1, 0, 0, 1},
mas01cr@498 13 (double [4]) {-0.5, -1, -1, -0.5}};
mas01cr@498 14 audiodb_power(adb);
mas01cr@498 15 if(audiodb_insert_datum(adb, &feature))
mas01cr@498 16 return 1;
mas01cr@498 17 if(audiodb_l2norm(adb))
mas01cr@498 18 return 1;
mas01ik@355 19
mas01cr@498 20 adb_datum_t query = {3, 2, "testquery",
mas01cr@498 21 (double [6]) {0, 0.5, 0, 0.5, 0.5, 0},
mas01cr@498 22 (double [3]) {-0.5, -1, -1}};
mas01cr@498 23 adb_query_id_t qid = {0};
mas01cr@498 24 qid.datum = &query;
mas01cr@498 25 qid.sequence_length = 1;
mas01cr@498 26 qid.sequence_start = 0;
mas01cr@498 27 adb_query_parameters_t parms =
mas01cr@498 28 {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10};
mas01cr@498 29 adb_query_refine_t refine = {0};
mas01cr@498 30 refine.flags = ADB_REFINE_RADIUS;
mas01cr@498 31 refine.radius = 0.1;
mas01cr@498 32 refine.hopsize = 1;
mas01ik@355 33
mas01cr@498 34 adb_query_spec_t spec;
mas01cr@498 35 spec.qid = qid;
mas01cr@498 36 spec.params = parms;
mas01cr@498 37 spec.refine = refine;
mas01ik@355 38
mas01cr@498 39 adb_query_results_t *results = audiodb_query_spec(adb, &spec);
mas01cr@498 40 if(!results || results->nresults != 2) return 1;
mas01cr@498 41 result_present_or_fail(results, "testfeature", 0, 0, 0);
mas01cr@498 42 result_present_or_fail(results, "testfeature", 0, 0, 3);
mas01cr@498 43 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 44
mas01cr@498 45 spec.qid.sequence_start = 1;
mas01cr@498 46 results = audiodb_query_spec(adb, &spec);
mas01cr@498 47 if(!results || results->nresults != 2) return 1;
mas01cr@498 48 result_present_or_fail(results, "testfeature", 0, 1, 0);
mas01cr@498 49 result_present_or_fail(results, "testfeature", 0, 1, 3);
mas01cr@498 50 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 51
mas01cr@498 52 spec.qid.sequence_start = 2;
mas01cr@498 53 results = audiodb_query_spec(adb, &spec);
mas01cr@498 54 if(!results || results->nresults != 2) return 1;
mas01cr@498 55 result_present_or_fail(results, "testfeature", 0, 2, 1);
mas01cr@498 56 result_present_or_fail(results, "testfeature", 0, 2, 2);
mas01cr@498 57 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 58
mas01cr@498 59 spec.qid.sequence_start = 0;
mas01cr@498 60 spec.qid.sequence_length = 2;
mas01cr@498 61 spec.refine.radius = 1.1;
mas01cr@498 62 results = audiodb_query_spec(adb, &spec);
mas01cr@498 63 if(!results || results->nresults != 2) return 1;
mas01cr@498 64 result_present_or_fail(results, "testfeature", 1, 0, 0);
mas01cr@498 65 result_present_or_fail(results, "testfeature", 1, 0, 2);
mas01cr@498 66 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 67
mas01cr@498 68 spec.refine.radius = 0.9;
mas01cr@498 69 results = audiodb_query_spec(adb, &spec);
mas01cr@498 70 if(!results || results->nresults != 0) return 1;
mas01cr@498 71 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 72
mas01cr@498 73 spec.qid.sequence_start = 1;
mas01cr@498 74 results = audiodb_query_spec(adb, &spec);
mas01cr@498 75 if(!results || results->nresults != 1) return 1;
mas01cr@498 76 result_present_or_fail(results, "testfeature", 0, 1, 0);
mas01cr@498 77 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 78
mas01cr@498 79 /* tests with power from here on down */
mas01ik@355 80
mas01cr@498 81 spec.qid.sequence_length = 2;
mas01cr@498 82 spec.qid.sequence_start = 0;
mas01cr@498 83 spec.refine.flags = ADB_REFINE_RADIUS|ADB_REFINE_ABSOLUTE_THRESHOLD;
mas01cr@498 84 spec.refine.radius = 1.1;
mas01cr@498 85 spec.refine.absolute_threshold = -1.4;
mas01cr@498 86 results = audiodb_query_spec(adb, &spec);
mas01cr@498 87 if(!results || results->nresults != 2) return 1;
mas01cr@498 88 result_present_or_fail(results, "testfeature", 1, 0, 0);
mas01cr@498 89 result_present_or_fail(results, "testfeature", 1, 0, 2);
mas01cr@498 90 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 91
mas01cr@498 92 spec.refine.absolute_threshold = -0.8;
mas01cr@498 93 results = audiodb_query_spec(adb, &spec);
mas01cr@498 94 if(!results || results->nresults != 2) return 1;
mas01cr@498 95 result_present_or_fail(results, "testfeature", 1, 0, 0);
mas01cr@498 96 result_present_or_fail(results, "testfeature", 1, 0, 2);
mas01cr@498 97 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 98
mas01cr@498 99 spec.refine.absolute_threshold = -0.7;
mas01cr@498 100 results = audiodb_query_spec(adb, &spec);
mas01cr@498 101 if(!results || results->nresults != 0) return 1;
mas01cr@498 102 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 103
mas01cr@498 104 spec.qid.sequence_start = 1;
mas01cr@498 105 spec.refine.absolute_threshold = -1.4;
mas01cr@498 106 spec.refine.radius = 0.9;
mas01cr@498 107 results = audiodb_query_spec(adb, &spec);
mas01cr@498 108 if(!results || results->nresults != 1) return 1;
mas01cr@498 109 result_present_or_fail(results, "testfeature", 0, 1, 0);
mas01cr@498 110 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 111
mas01cr@498 112 spec.refine.absolute_threshold = -0.9;
mas01cr@498 113 results = audiodb_query_spec(adb, &spec);
mas01cr@498 114 if(!results || results->nresults != 0) return 1;
mas01cr@498 115 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 116
mas01cr@498 117 spec.qid.sequence_length = 2;
mas01cr@498 118 spec.qid.sequence_start = 0;
mas01cr@498 119 spec.refine.absolute_threshold = 0;
mas01cr@498 120 spec.refine.flags = ADB_REFINE_RADIUS|ADB_REFINE_RELATIVE_THRESHOLD;
mas01cr@498 121 spec.refine.radius = 1.1;
mas01cr@498 122 spec.refine.relative_threshold = 0.1;
mas01cr@498 123 results = audiodb_query_spec(adb, &spec);
mas01cr@498 124 if(!results || results->nresults != 2) return 1;
mas01cr@498 125 result_present_or_fail(results, "testfeature", 1, 0, 0);
mas01cr@498 126 result_present_or_fail(results, "testfeature", 1, 0, 2);
mas01cr@498 127 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 128
mas01cr@498 129 spec.refine.radius = 0.9;
mas01cr@498 130 results = audiodb_query_spec(adb, &spec);
mas01cr@498 131 if(!results || results->nresults != 0) return 1;
mas01cr@498 132 audiodb_query_free_results(adb, &spec, results);
mas01ik@355 133
mas01cr@498 134 audiodb_close(adb);
mas01ik@355 135
mas01cr@498 136 return 104;
mas01ik@355 137 }