annotate libtests/test_utils_lib.h @ 507:e7fd50483311

Free bits of the datum constructed in audioDB::query. We're not quite safe: error calls between allocation of some of these bits and pieces and their use will cause failure... but not freeing things here is definitely wrong.
author mas01cr
date Tue, 13 Jan 2009 21:37:10 +0000
parents 342822c2d49a
children e18843dc0aea
rev   line source
mas01cr@498 1 #include <sys/types.h>
mas01cr@498 2 #include <sys/stat.h>
mas01cr@498 3 #include <math.h>
mas01cr@498 4 #include <unistd.h>
mas01cr@498 5 #include <fcntl.h>
mas01cr@498 6 #include <string.h>
mas01cr@498 7 #include <stdio.h>
mas01cr@498 8 #include <stdlib.h>
mas01ik@355 9
mas01cr@498 10 #define TESTDB "testdb"
mas01ik@355 11
mas01cr@498 12 void clean_remove_db(char * dbname) {
mas01cr@498 13 unlink(dbname);
mas01ik@355 14 }
mas01ik@355 15
mas01cr@498 16 void maketestfile(const char *path, int dim, double *doubles, int ndoubles) {
mas01cr@498 17 FILE *file;
mas01ik@355 18
mas01cr@498 19 file = fopen(path, "w");
mas01cr@498 20 fwrite(&dim, sizeof(int), 1, file);
mas01cr@498 21 fwrite(doubles, sizeof(double), ndoubles, file);
mas01cr@498 22 fflush(file);
mas01cr@498 23 fclose(file);
mas01ik@355 24 }
mas01ik@355 25
mas01cr@498 26 int close_enough(double a, double b, double epsilon) {
mas01cr@498 27 return (fabs(a-b) < epsilon);
mas01ik@355 28 }
mas01ik@355 29
mas01cr@498 30 int result_position(adb_query_results_t *r, const char *key, float dist, uint32_t qpos, uint32_t ipos) {
mas01cr@498 31 for(uint32_t k = 0; k < r->nresults; k++) {
mas01cr@498 32 adb_result_t result = r->results[k];
mas01cr@498 33 if(close_enough(dist, result.dist, 1e-4) && (qpos == result.qpos) &&
mas01cr@498 34 (ipos == result.ipos) && !(strcmp(key, result.key))) {
mas01cr@498 35 return k;
mas01cr@498 36 }
mas01cr@498 37 }
mas01cr@498 38 return -1;
mas01ik@355 39 }
mas01ik@355 40
mas01cr@498 41 #define result_present_or_fail(r, k, d, q, i) \
mas01cr@498 42 if(result_position(r, k, d, q, i) < 0) return 1;