annotate libtests/test_utils_lib.h @ 497:9d8aee621afb api-inversion

More libtests fixups. Include audiodb_close() calls everywhere (whoops). Add the facility to run tests under valgrind. Unfortunately the error-exitcode flag doesn't actually cause an error exit if the only thing wrong is memory leaks, but it will if there are actual memory errors, which is a start.
author mas01cr
date Sat, 10 Jan 2009 16:07:43 +0000
parents c291e9201a3c
children
rev   line source
mas01cr@487 1 #include <sys/types.h>
mas01cr@487 2 #include <sys/stat.h>
mas01cr@487 3 #include <math.h>
mas01cr@487 4 #include <unistd.h>
mas01cr@487 5 #include <fcntl.h>
mas01cr@487 6 #include <string.h>
mas01cr@487 7 #include <stdio.h>
mas01cr@495 8 #include <stdlib.h>
mas01cr@487 9
mas01cr@489 10 #define TESTDB "testdb"
mas01cr@489 11
mas01cr@487 12 void clean_remove_db(char * dbname) {
mas01cr@487 13 unlink(dbname);
mas01ik@355 14 }
mas01ik@355 15
mas01cr@495 16 void maketestfile(const char *path, int dim, double *doubles, int ndoubles) {
mas01cr@495 17 FILE *file;
mas01ik@355 18
mas01cr@495 19 file = fopen(path, "w");
mas01cr@495 20 fwrite(&dim, sizeof(int), 1, file);
mas01cr@495 21 fwrite(doubles, sizeof(double), ndoubles, file);
mas01cr@495 22 fflush(file);
mas01cr@495 23 fclose(file);
mas01ik@355 24 }
mas01cr@489 25
mas01cr@493 26 int close_enough(double a, double b, double epsilon) {
mas01cr@493 27 return (fabs(a-b) < epsilon);
mas01cr@493 28 }
mas01cr@493 29
mas01cr@489 30 int result_position(adb_query_results_t *r, const char *key, float dist, uint32_t qpos, uint32_t ipos) {
mas01cr@489 31 for(uint32_t k = 0; k < r->nresults; k++) {
mas01cr@489 32 adb_result_t result = r->results[k];
mas01cr@493 33 if(close_enough(dist, result.dist, 1e-4) && (qpos == result.qpos) &&
mas01cr@489 34 (ipos == result.ipos) && !(strcmp(key, result.key))) {
mas01cr@489 35 return k;
mas01cr@489 36 }
mas01cr@489 37 }
mas01cr@489 38 return -1;
mas01cr@489 39 }
mas01cr@489 40
mas01cr@489 41 #define result_present_or_fail(r, k, d, q, i) \
mas01cr@489 42 if(result_position(r, k, d, q, i) < 0) return 1;