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;
-  */
 }