view libtests/test_utils_lib.h @ 537:5da228727a2d

Removed obsolete dbH header pointer dereferences in audioDB.cpp. Replaced with the API adb->header type calls. The dbH calls were causing segfaults when attempting to index an empty database or during batch inserts in some rare cases.
author mas01mc
date Fri, 06 Feb 2009 17:08:21 +0000
parents 342822c2d49a
children e18843dc0aea
line wrap: on
line source
#include <sys/types.h>
#include <sys/stat.h>
#include <math.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define TESTDB "testdb"

void clean_remove_db(char * dbname) {
  unlink(dbname);
}

void maketestfile(const char *path, int dim, double *doubles, int ndoubles) {
  FILE *file;

  file = fopen(path, "w");
  fwrite(&dim, sizeof(int), 1, file);
  fwrite(doubles, sizeof(double), ndoubles, file);
  fflush(file);
  fclose(file);
}

int close_enough(double a, double b, double epsilon) {
  return (fabs(a-b) < epsilon);
}

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(close_enough(dist, result.dist, 1e-4) && (qpos == result.qpos) &&
       (ipos == result.ipos) && !(strcmp(key, result.key))) {
      return k;
    }
  }
  return -1;
}

#define result_present_or_fail(r, k, d, q, i) \
  if(result_position(r, k, d, q, i) < 0) return 1;