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@487
|
8
|
mas01cr@489
|
9 #define TESTDB "testdb"
|
mas01cr@489
|
10
|
mas01cr@487
|
11 void clean_remove_db(char *dbname);
|
mas01ik@355
|
12 int testoneresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist,double Qpos,double Spos);
|
mas01ik@355
|
13 void maketestfile(char * filename, int * ivals, double * dvals, int dvalsize);
|
mas01cr@379
|
14 int testoneradiusresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, int count);
|
mas01ik@355
|
15 void makekeylistfile(char * filename, char * item);
|
mas01ik@355
|
16
|
mas01cr@487
|
17 void clean_remove_db(char * dbname) {
|
mas01cr@487
|
18 unlink(dbname);
|
mas01ik@355
|
19 }
|
mas01ik@355
|
20
|
mas01ik@355
|
21 int testoneresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist,double Qpos,double Spos){
|
mas01ik@355
|
22
|
mas01ik@355
|
23 int ret=0;
|
mas01ik@355
|
24 double tolerance=.0001;
|
mas01ik@355
|
25
|
mas01ik@355
|
26
|
mas01ik@355
|
27
|
mas01ik@355
|
28 if (strcmp(Rlist,myadbqueryresult->Rlist[i])){
|
mas01ik@355
|
29 ret=-1;
|
mas01ik@355
|
30 }
|
mas01ik@355
|
31
|
mas01ik@355
|
32
|
mas01cr@487
|
33 if (fabs((double)Dist - (double)myadbqueryresult->Dist[i]) > tolerance){
|
mas01ik@355
|
34 ret=-1;
|
mas01ik@355
|
35 }
|
mas01ik@355
|
36
|
mas01cr@487
|
37 if (fabs((double)Qpos - (double)myadbqueryresult->Qpos[i]) > tolerance){
|
mas01ik@355
|
38 ret=-1;
|
mas01ik@355
|
39 }
|
mas01ik@355
|
40
|
mas01cr@487
|
41 if (fabs((double)Spos - (double)myadbqueryresult->Spos[i]) > tolerance){
|
mas01ik@355
|
42 ret=-1;
|
mas01ik@355
|
43 }
|
mas01ik@355
|
44
|
mas01ik@355
|
45 return ret;
|
mas01ik@355
|
46 }
|
mas01ik@355
|
47
|
mas01ik@355
|
48
|
mas01cr@379
|
49 int testoneradiusresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, int count){
|
mas01ik@355
|
50
|
mas01ik@355
|
51 int ret=0;
|
mas01ik@355
|
52
|
mas01ik@355
|
53 if (strcmp(Rlist,myadbqueryresult->Rlist[i])){
|
mas01ik@355
|
54 ret=-1;
|
mas01ik@355
|
55 }
|
mas01ik@355
|
56
|
mas01cr@379
|
57 /* KLUDGE: at the moment, the structure returned from "sequence"
|
mas01cr@379
|
58 queries with a radius has two unused fields, Dist and Qpos, and
|
mas01cr@379
|
59 the Spos field is punned to indicate the count of hits from
|
mas01cr@379
|
60 that track. This is really ugly and needs to die. */
|
mas01cr@379
|
61 if (count != myadbqueryresult->Spos[i]) {
|
mas01ik@355
|
62 ret=-1;
|
mas01ik@355
|
63 }
|
mas01ik@355
|
64
|
mas01ik@355
|
65 return ret;
|
mas01ik@355
|
66 }
|
mas01ik@355
|
67
|
mas01ik@355
|
68 void maketestfile(char * filename, int * ivals, double * dvals, int dvalsize) {
|
mas01ik@355
|
69
|
mas01ik@355
|
70 FILE * myfile;
|
mas01ik@355
|
71
|
mas01ik@355
|
72 myfile=fopen(filename,"w");
|
mas01ik@355
|
73 fwrite(ivals,sizeof(int),1,myfile);
|
mas01ik@355
|
74 fwrite(dvals,sizeof(double),dvalsize,myfile);
|
mas01ik@355
|
75 fflush(myfile);
|
mas01ik@355
|
76 fclose(myfile);
|
mas01ik@355
|
77
|
mas01ik@355
|
78 /* should probably test for success, but then it is a test suite already... */
|
mas01ik@355
|
79 }
|
mas01ik@355
|
80
|
mas01ik@355
|
81 void makekeylistfile(char * filename, char * item){
|
mas01ik@355
|
82
|
mas01ik@355
|
83 FILE * myfile;
|
mas01ik@355
|
84
|
mas01ik@355
|
85 myfile=fopen(filename,"w");
|
mas01ik@355
|
86 fprintf(myfile,"%s\n",item);
|
mas01ik@355
|
87 fflush(myfile);
|
mas01ik@355
|
88 fclose(myfile);
|
mas01ik@355
|
89
|
mas01ik@355
|
90 }
|
mas01cr@489
|
91
|
mas01cr@489
|
92 int result_position(adb_query_results_t *r, const char *key, float dist, uint32_t qpos, uint32_t ipos) {
|
mas01cr@489
|
93 for(uint32_t k = 0; k < r->nresults; k++) {
|
mas01cr@489
|
94 adb_result_t result = r->results[k];
|
mas01cr@489
|
95 if((dist == result.dist) && (qpos == result.qpos) &&
|
mas01cr@489
|
96 (ipos == result.ipos) && !(strcmp(key, result.key))) {
|
mas01cr@489
|
97 return k;
|
mas01cr@489
|
98 }
|
mas01cr@489
|
99 }
|
mas01cr@489
|
100 return -1;
|
mas01cr@489
|
101 }
|
mas01cr@489
|
102
|
mas01cr@489
|
103 #define result_present_or_fail(r, k, d, q, i) \
|
mas01cr@489
|
104 if(result_position(r, k, d, q, i) < 0) return 1;
|
mas01cr@489
|
105
|