changeset 355:94c18f128ce8

First version of the API, committed to the main trunk. Thanks Christophe, for all the help!
author mas01ik
date Wed, 12 Nov 2008 10:21:06 +0000
parents 4871a3ed9e36
children 2d638305269b 2d5c3f8e8c22
files Makefile audioDB.cpp audioDB.h audioDB_API.h common.cpp libtests/0001/Makefile libtests/0001/prog1.c libtests/0001/run-test.sh libtests/0001/short-description libtests/0002/Makefile libtests/0002/prog1.c libtests/0002/run-test.sh libtests/0002/short-description libtests/0003/Makefile libtests/0003/prog1.c libtests/0003/run-test.sh libtests/0003/short-description libtests/0004/Makefile libtests/0004/prog1.c libtests/0004/run-test.sh libtests/0004/short-description libtests/0005/Makefile libtests/0005/prog1.c libtests/0005/run-test.sh libtests/0005/short-description libtests/0006/Makefile libtests/0006/prog1.c libtests/0006/run-test.sh libtests/0006/short-description libtests/0007/Makefile libtests/0007/prog1.c libtests/0007/run-test.sh libtests/0007/short-description libtests/0008/Makefile libtests/0008/prog1.c libtests/0008/run-test.sh libtests/0008/short-description libtests/0009/Makefile libtests/0009/prog1.c libtests/0009/run-test.sh libtests/0009/short-description libtests/0010/Makefile libtests/0010/prog1.c libtests/0010/run-test.sh libtests/0010/short-description libtests/0011/Makefile libtests/0011/prog1.c libtests/0011/run-test.sh libtests/0011/short-description libtests/0012/Makefile libtests/0012/prog1.c libtests/0012/run-test.sh libtests/0012/short-description libtests/0022/Makefile libtests/0022/prog1.c libtests/0022/run-test.sh libtests/0022/short-description libtests/0023/Makefile libtests/0023/prog1.c libtests/0023/run-test.sh libtests/0023/short-description libtests/0024/Makefile libtests/0024/prog1.c libtests/0024/run-test.sh libtests/0024/short-description libtests/0025/Makefile libtests/0025/prog1.c libtests/0025/run-test.sh libtests/0025/short-description libtests/0026/Makefile libtests/0026/prog1.c libtests/0026/run-test.sh libtests/0026/short-description libtests/0027/Makefile libtests/0027/prog1.c libtests/0027/run-test.sh libtests/0027/short-description libtests/0028/Makefile libtests/0028/prog1.c libtests/0028/run-test.sh libtests/0028/short-description libtests/0029/Makefile libtests/0029/prog1.c libtests/0029/run-test.sh libtests/0029/short-description libtests/0030/Makefile libtests/0030/prog1.c libtests/0030/run-test.sh libtests/0030/short-description libtests/0031/Makefile libtests/0031/prog1.c libtests/0031/run-test.sh libtests/0031/short-description libtests/0032/Makefile libtests/0032/prog1.c libtests/0032/run-test.sh libtests/0032/short-description libtests/0033/Makefile libtests/0033/prog1.c libtests/0033/run-test.sh libtests/0033/short-description libtests/0034/Makefile libtests/0034/prog1.c libtests/0034/run-test.sh libtests/0034/short-description libtests/0035/Makefile libtests/0035/prog1.c libtests/0035/run-test.sh libtests/0035/short-description libtests/0036/Makefile libtests/0036/prog1.c libtests/0036/run-test.sh libtests/0036/short-description libtests/9000/Makefile libtests/9000/prog1.c libtests/9000/run-test.sh libtests/9000/short-description libtests/clean.sh libtests/notes libtests/run-tests.sh libtests/test-utils.sh libtests/test_utils_lib.h
diffstat 122 files changed, 7244 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Fri Nov 07 12:48:26 2008 +0000
+++ b/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -6,7 +6,7 @@
 GSL_INCLUDE=
 GSOAP_INCLUDE=
 
-override CFLAGS+=-O3 -g
+override CFLAGS+=-O3 -g -fPIC
 #override CFLAGS+=-ggdb -gstabs+ -g3
 
 ifeq ($(shell uname),Linux)
@@ -19,46 +19,85 @@
 endif
 endif
 
+LIBOBJS=insert.o create.o common.o dump.o query.o sample.o index.o lshlib.o
+OBJS=$(LIBOBJS) soap.o
+
+
 EXECUTABLE=audioDB
+LIBRARY=libaudioDB_API.so
+
 
 .PHONY: all clean test
 
-all: ${EXECUTABLE}
+all: $(OBJS) $(LIBRARY) $(EXECUTABLE) tags 
 
-${EXECUTABLE}.1: ${EXECUTABLE}
-	${HELP2MAN} ./${EXECUTABLE} > ${EXECUTABLE}.1
+$(EXECUTABLE).1: $(EXECUTABLE)
+	$(HELP2MAN) ./$(EXECUTABLE) > $(EXECUTABLE).1
 
-HELP.txt: ${EXECUTABLE}
-	./${EXECUTABLE} --help > HELP.txt
+HELP.txt: $(EXECUTABLE)
+	./$(EXECUTABLE) --help > HELP.txt
 
 cmdline.c cmdline.h: gengetopt.in
-	${GENGETOPT} -e <gengetopt.in
+	$(GENGETOPT) -e <gengetopt.in
 
 soapServer.cpp soapClient.cpp soapC.cpp adb.nsmap: audioDBws.h
-	${SOAPCPP2} audioDBws.h
+	$(SOAPCPP2) audioDBws.h
 
 %.o: %.cpp audioDB.h adb.nsmap cmdline.h reporter.h ReporterBase.h lshlib.h
-	g++ -c ${CFLAGS} ${GSOAP_INCLUDE} ${GSL_INCLUDE} -Wall  $<
+	g++ -c $(CFLAGS) $(GSOAP_INCLUDE) $(GSL_INCLUDE) -Wall  $<
 
 cmdline.o: cmdline.c cmdline.h
-	gcc -c ${CFLAGS} $<
+	gcc -c $(CFLAGS) $<
 
-OBJS=insert.o create.o common.o dump.o query.o soap.o sample.o audioDB.o index.o lshlib.o
 
-${EXECUTABLE}: ${OBJS} soapServer.cpp soapClient.cpp soapC.cpp cmdline.o
-	g++ -o ${EXECUTABLE} ${CFLAGS} ${GSL_INCLUDE} ${LIBGSL} ${GSOAP_INCLUDE} $^ ${GSOAP_CPP}
+$(EXECUTABLE): cmdline.c $(OBJS) soapServer.cpp soapClient.cpp soapC.cpp
+	g++ -c $(CFLAGS) $(GSOAP_INCLUDE) -Wall audioDB.cpp -DBINARY
+	g++ -o $(EXECUTABLE) $(CFLAGS) audioDB.o $^ $(LIBGSL) $(GSOAP_INCLUDE) $(GSOAP_CPP)
+
+
+$(LIBRARY): cmdline.c $(LIBOBJS)
+	g++ -c $(CFLAGS) $(GSOAP_INCLUDE) -Wall audioDB.cpp
+	g++ -shared -o $(LIBRARY) $(CFLAGS) $(LIBGSL) audioDB.o $^ 
+
+tags:
+	ctags *.cpp *.h
+
 
 clean:
 	-rm cmdline.c cmdline.h
 	-rm soapServer.cpp soapClient.cpp soapC.cpp soapObject.h soapStub.h soapProxy.h soapH.h soapServerLib.cpp soapClientLib.cpp
-	-rm adb.nsmap adb.xsd adb.wsdl adb.*.req.xml adb.*.res.xml
+	-rm adb.*
 	-rm HELP.txt
-	-rm ${EXECUTABLE} ${EXECUTABLE}.1 ${OBJS}
+	-rm $(EXECUTABLE) $(EXECUTABLE).1 $(OBJS)
 	-rm xthresh
 	-sh -c "cd tests && sh ./clean.sh"
+	-sh -c "cd libtests && sh ./clean.sh"
+	-rm $(LIBRARY)
+	-rm tags
 
-test: ${EXECUTABLE}
+dist_clean:
+	-rm cmdline.c cmdline.h
+	-rm soapServer.cpp soapClient.cpp soapC.cpp soapObject.h soapStub.h soapProxy.h soapH.h soapServerLib.cpp soapClientLib.cpp
+	-rm adb.*
+	-rm HELP.txt
+	-rm $(EXECUTABLE) $(EXECUTABLE).1 $(OBJS)
+	-rm xthresh
+	-sh -c "cd tests && sh ./clean.sh"
+	-sh -c "cd libtests && sh ./clean.sh"
+	-rm $(LIBRARY)
+	-rm *.o
+	-rm tags
+	-rm -rf audioDB.dump
+
+
+test: $(EXECUTABLE)
 	-sh -c "cd tests && sh ./run-tests.sh"
 
 xthresh: xthresh.c
-	gcc -o $@ ${CFLAGS} ${GSL_INCLUDE} ${LIBGSL} $<
+	gcc -o $@ $(CFLAGS) $(GSL_INCLUDE) $(LIBGSL) $<
+
+install:
+	cp $(LIBRARY) /usr/local/lib/
+	ldconfig
+	cp audioDB_API.h /usr/local/include/
+
--- a/audioDB.cpp	Fri Nov 07 12:48:26 2008 +0000
+++ b/audioDB.cpp	Wed Nov 12 10:21:06 2008 +0000
@@ -41,7 +41,11 @@
     prefix_name((char** const)&dbName, adb_root);
 
   if(O2_ACTION(COM_SERVER))
+    #ifdef BINARY
     startServer();
+    #else
+    ;
+    #endif
 
   else  if(O2_ACTION(COM_CREATE))
     create(dbName);
@@ -54,6 +58,7 @@
 
   else if(O2_ACTION(COM_QUERY))
     if(isClient){
+    #ifdef BINARY
       if(query_from_key){
 	VERB_LOG(1, "Calling web services query %s on database %s, query=%s\n", radius>0?"(Radius)":"(NN)", dbName, (key&&strlen(key))?key:inFile);
 	ws_query_by_key(dbName, key, inFile, (char*)hostport);	
@@ -62,13 +67,20 @@
 	VERB_LOG(1, "Calling web services query on database %s, query=%s\n", dbName, (key&&strlen(key))?key:inFile);
 	ws_query(dbName, inFile, (char*)hostport);
       }
+    #else
+    ;
+    #endif
     }
     else
       query(dbName, inFile);
 
   else if(O2_ACTION(COM_STATUS))
     if(isClient)
+    #ifdef BINARY
       ws_status(dbName,(char*)hostport);
+    #else
+    ;
+    #endif
     else
       status(dbName);
 
@@ -86,7 +98,11 @@
 
   else if(O2_ACTION(COM_LISZT))
     if(isClient)
+    #ifdef BINARY
       ws_liszt(dbName, (char*) hostport);
+    #else
+    ;
+    #endif
     else
       liszt(dbName, lisztOffset, lisztLength);
 
@@ -145,6 +161,141 @@
   }
 }
 
+
+//for the lib / API
+audioDB::audioDB(const unsigned argc, char* const argv[], int * apierror): O2_AUDIODB_INITIALIZERS
+{
+
+    try {
+        UseApiError=1;
+
+        if(processArgs(argc, argv)<0){
+            printf("No command found.\n");
+            cmdline_parser_print_version ();
+            if (strlen(gengetopt_args_info_purpose) > 0)
+                printf("%s\n", gengetopt_args_info_purpose);
+            printf("%s\n", gengetopt_args_info_usage);
+            printf("%s\n", gengetopt_args_info_help[1]);
+            printf("%s\n", gengetopt_args_info_help[2]);
+            printf("%s\n", gengetopt_args_info_help[0]);
+            error("No command found");
+        }
+
+        adb__queryResponse adbq;
+
+        if(O2_ACTION(COM_CREATE))
+            create(dbName);
+
+        else if(O2_ACTION(COM_INSERT))
+            insert(dbName, inFile);
+
+        else if(O2_ACTION(COM_BATCHINSERT))
+            batchinsert(dbName, inFile);
+
+        else if(O2_ACTION(COM_QUERY))
+            if(isClient)
+                ;//ws_query(dbName, inFile, (char*)hostport);
+            else
+                query(dbName, inFile, &adbq);
+        //query(dbName, inFile);
+
+        else if(O2_ACTION(COM_STATUS))
+            if(isClient)
+                ;//ws_status(dbName,(char*)hostport);
+            else
+                status(dbName);
+
+        else if(O2_ACTION(COM_L2NORM))
+            l2norm(dbName);
+
+        else if(O2_ACTION(COM_POWER))
+            power_flag(dbName);
+
+        else if(O2_ACTION(COM_DUMP))
+            dump(dbName);
+
+        else
+            error("Unrecognized command",command);
+
+    } catch(int a) {
+        *apierror=a;
+        return;
+
+    }
+    *apierror=apierrortemp;
+    return;
+
+}
+
+//for API status
+audioDB::audioDB(const unsigned argc, char* const argv[], cppstatusptr stat, int * apierror): O2_AUDIODB_INITIALIZERS
+{
+
+    try {
+        UseApiError=1;
+
+
+        if(processArgs(argc, argv)<0){
+            printf("No command found.\n");
+            cmdline_parser_print_version ();
+            if (strlen(gengetopt_args_info_purpose) > 0)
+                printf("%s\n", gengetopt_args_info_purpose);
+            printf("%s\n", gengetopt_args_info_usage);
+            printf("%s\n", gengetopt_args_info_help[1]);
+            printf("%s\n", gengetopt_args_info_help[2]);
+            printf("%s\n", gengetopt_args_info_help[0]);
+            error("No command found");
+        }
+
+        status(dbName, stat);
+
+
+    } catch(int a) {
+        *apierror=a;
+        return;
+
+    }
+    *apierror=apierrortemp;
+    return;
+
+}
+
+
+//for API query
+audioDB::audioDB(const unsigned argc, char* const argv[],adb__queryResponse *adbQueryResponse, int * apierror): O2_AUDIODB_INITIALIZERS
+{
+
+    try {
+        UseApiError=1;
+
+        if(processArgs(argc, argv)<0){
+            printf("No command found.\n");
+            cmdline_parser_print_version ();
+            if (strlen(gengetopt_args_info_purpose) > 0)
+                printf("%s\n", gengetopt_args_info_purpose);
+            printf("%s\n", gengetopt_args_info_usage);
+            printf("%s\n", gengetopt_args_info_help[1]);
+            printf("%s\n", gengetopt_args_info_help[2]);
+            printf("%s\n", gengetopt_args_info_help[0]);
+            error("No command found");
+        }
+
+        query(dbName, inFile, adbQueryResponse);
+
+    } catch(int a) {
+        *apierror=a;
+        return;
+
+    }
+    *apierror=apierrortemp;
+    return;
+
+}
+
+
+
+
+
 void audioDB::cleanup() {
   cmdline_parser_free(&args_info);
   if(indata)
@@ -170,7 +321,7 @@
   if(powerFileNameTable)
     munmap(powerFileNameTable, fileTableLength);
   if(trackOffsetTable)
-    delete trackOffsetTable;
+    delete [] trackOffsetTable;
   if(reporter)
     delete reporter;
   if(exact_evaluation_queue)
@@ -632,6 +783,35 @@
   }
 }
 
+///used by lib/API
+void audioDB::status(const char* dbName, cppstatusptr status){
+    if(!dbH) {
+        initTables(dbName, 0);
+    }
+
+  unsigned dudCount=0;
+  unsigned nullCount=0;
+  for(unsigned k=0; k<dbH->numFiles; k++){
+    if(trackTable[k]<sequenceLength){
+      dudCount++;
+      if(!trackTable[k])
+        nullCount++;
+    }
+  }
+  
+  status->numFiles = dbH->numFiles;
+  status->dim = dbH->dim;
+  status->length = dbH->length;
+  status->dudCount = dudCount;
+  status->nullCount = nullCount;
+  status->flags = dbH->flags;
+  
+  return;
+}
+
+
+
+
 void audioDB::l2norm(const char* dbName) {
   forWrite = true;
   initTables(dbName, 0);
@@ -713,3 +893,468 @@
   SERVER_ADB_FEATURE_ROOT = 0;    // Server-side features root prefix
   audioDB(argc, argv);
 }
+
+
+extern "C" {
+
+/* for API questions contact 
+ * Christophe Rhodes c.rhodes@gold.ac.uk
+ * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */
+
+#include "audioDB_API.h"
+
+
+    //adb_ptr audiodb_create(char * path,long ntracks, long datadim) {
+    adb_ptr audiodb_create(char * path,long datasize,long ntracks, long datadim) {
+        char *argv[12];
+        int argvctr=0;
+        char tempstr1[200];
+        char tempstr2[200];
+        char tempstr3[200];
+        int apierror=0;
+
+
+        argv[argvctr++] = "audioDB";
+        argv[argvctr++] = "--NEW";
+        argv[argvctr++] = "-d";
+        argv[argvctr++] = path;
+
+        if (datasize >0){
+            argv[argvctr++]="--datasize";
+            snprintf(tempstr1,sizeof(tempstr1),"%ld",datasize);
+            argv[argvctr++]=tempstr1;
+        }
+
+        if (ntracks >0){
+            argv[argvctr++]="--ntracks";
+            snprintf(tempstr2,sizeof(tempstr2),"%ld",ntracks);
+            argv[argvctr++]=tempstr2;
+        }
+
+        if (datadim > 0){
+            argv[argvctr++]="--datadim";
+            snprintf(tempstr3,sizeof(tempstr3),"%ld",datadim);
+            argv[argvctr++]=tempstr3;
+        }
+
+        argv[argvctr+1]='\0';
+
+        audioDB::audioDB(argvctr, argv, &apierror);
+
+        if (!apierror){ 
+            return audiodb_open(path);
+        }
+
+        /* database exists, so fail and pass NULL */
+        return NULL;
+    }
+
+
+
+  int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins) {
+    char *argv[15];
+    int argvctr=0;
+    int apierror=0;
+
+    argv[argvctr++]="audioDB";
+    argv[argvctr++]="-I";
+    argv[argvctr++]="-d";
+    argv[argvctr++]=mydb->dbname;
+    argv[argvctr++]="-f";
+    argv[argvctr++]=ins->features;
+
+    if (ins->times){
+        argv[argvctr++]="--times";
+        argv[argvctr++]=ins->times;
+    }
+
+    if (ins->power){
+        argv[argvctr++]="-w";
+        argv[argvctr++]=ins->power;
+    }
+
+    if (ins->key){
+        argv[argvctr++]="--key";
+        argv[argvctr++]=ins->key;
+    }
+    argv[argvctr+1]='\0';
+
+    audioDB::audioDB(argvctr,argv,&apierror);
+    return apierror;
+  }
+
+
+  int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size) {
+
+    char *argv[22];
+    int argvctr=0;
+    unsigned int i=0;
+    int retval=0;
+    char tempfeaturename[]="tempfeatureXXXXXX";
+    char temppowername[]="temppowerXXXXXX";
+    char tempkeyname[]="tempkeyXXXXXX";
+    char temptimesname[]="temptimesXXXXXX";
+    int tempfeaturefd=0;
+    int temppowerfd=0;
+    int tempkeyfd=0;
+    int temptimesfd=0;
+
+    int flags[4]={0};
+    int apierror=0;
+
+    /*  So the final API should take an array of structs. However, the current 
+    *   version requires four separate text files. So temporarily, we need to
+    *   unpack the struct array, make four separate text files, and then reinsert
+    *   them into the command-line call. This should change as soon as possible */
+
+
+    argv[argvctr++]="audioDB";
+    argv[argvctr++]="-B";
+    argv[argvctr++]="-d";
+    argv[argvctr++]=mydb->dbname;
+
+
+    /* assume struct is well formed for all entries */
+    if (ins[0].features){ flags[0]++;} else {
+        /* short circuit the case where there are no features in the structs */
+        return -1;
+    } ;
+    if (ins[0].power){ flags[1]++;};
+    if (ins[0].key){ flags[2]++;};
+    if (ins[0].times){ flags[3]++;};
+
+
+    /* make four temp files */
+    tempfeaturefd=mkstemp(tempfeaturename);
+    if (tempfeaturefd !=-1){ 
+
+        temppowerfd=mkstemp(temppowername);
+        if (temppowerfd !=-1){ 
+
+            tempkeyfd=mkstemp(tempkeyname);
+            if (tempkeyfd !=-1){ 
+
+                temptimesfd=mkstemp(temptimesname);
+                if (temptimesfd !=-1){ 
+
+                } else {
+                    retval=-1; 
+                    close(tempkeyfd);
+                    remove(tempkeyname);
+                    close(temppowerfd);
+                    remove(temppowername);
+                    close(tempfeaturefd);
+                    remove(tempfeaturename);
+                }
+
+            } else {
+                retval=-1; 
+                close(temppowerfd);
+                remove(temppowername);
+                close(tempfeaturefd);
+                remove(tempfeaturename);
+            }
+
+        } else {
+            retval=-1; 
+            close(tempfeaturefd);
+            remove(tempfeaturename);
+        } 
+
+    } else { 
+        retval=-1; 
+    }
+
+
+
+
+
+    if (retval == -1){
+        return -1;
+    }
+        
+    /* Ok, so we should have a working set of files to write to */ 
+    /* I'm going to assume that the same format is kept for all structs in the array */
+    /* That is, each struct should be correctly formed, and contain at least a features file, because I'm just going to pass the terms along to the text files */
+    for (i=0; i<size; i++){
+
+         write(tempfeaturefd,ins[i].features,strlen(ins[i].features)); 
+         write(tempfeaturefd,"\n",1); 
+
+         if (flags[1]){
+             write(temppowerfd,ins[i].power,strlen(ins[i].power)); 
+             write(temppowerfd,"\n",1); 
+         }
+
+         if (flags[2]){
+             write(tempkeyfd,ins[i].key,strlen(ins[i].key)); 
+             write(tempkeyfd,"\n",1); 
+         }
+
+         if (flags[3]){
+             write(temptimesfd,ins[i].times,strlen(ins[i].times)); 
+             write(temptimesfd,"\n",1); 
+         }
+    } 
+
+    argv[argvctr++]="-F";
+    argv[argvctr++]=tempfeaturename;
+    close(tempfeaturefd);
+    close(temppowerfd);
+    close(tempkeyfd);
+    close(temptimesfd);
+
+    if (flags[1]){
+        argv[argvctr++]="--powerList";
+        argv[argvctr++]=temppowername;
+    }
+
+    if (flags[2]){
+        argv[argvctr++]="--keyList";
+        argv[argvctr++]=tempkeyname;
+    }
+
+    if (flags[3]){
+        argv[argvctr++]="--timesList";
+        argv[argvctr++]=temptimesname;
+    }
+
+    argv[argvctr+1]='\0';
+
+    audioDB::audioDB(argvctr,argv,&apierror);
+
+    remove(tempfeaturename);
+    remove(temppowername);
+    remove(tempkeyname);
+    remove(temptimesname);
+
+
+    return apierror;
+  }
+
+
+  int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqr){
+
+    char *argv[32];
+    int argvctr=0;
+    char tempstr1[200];
+    char tempstr2[200];
+    char tempstr3[200];
+    int apierror=0;
+
+    adb__queryResponse adbQueryResponse; 
+
+    /* TODO: may need error checking here */
+    /* currently counting on audioDB binary to fail for me */
+    argv[argvctr++]="audioDB";
+    
+    if(adbq->querytype){
+        argv[argvctr++]="-Q";
+        argv[argvctr++]=adbq->querytype;
+    }
+
+    if(mydb->dbname){
+        argv[argvctr++]="-d";
+        argv[argvctr++]=mydb->dbname;
+    }
+
+    if (adbq->feature){
+        argv[argvctr++]="-f";
+        argv[argvctr++]=adbq->feature;
+    }
+
+    if (adbq->power){
+        argv[argvctr++]="-w";
+        argv[argvctr++]=adbq->power;
+    }
+
+    if (adbq->qpoint){
+        argv[argvctr++]="-p";
+        argv[argvctr++]=adbq->qpoint;
+    }
+    if (adbq->numpoints){
+        argv[argvctr++]="-n";
+        argv[argvctr++]=adbq->numpoints;
+    }
+    if (adbq->radius){
+        argv[argvctr++]="-R";
+        argv[argvctr++]=adbq->radius;
+    }
+    if(adbq->resultlength){
+        argv[argvctr++]="-r";
+        argv[argvctr++]=adbq->resultlength;
+    }
+    if(adbq->sequencelength){
+        argv[argvctr++]="-l";
+        argv[argvctr++]=adbq->sequencelength;
+    }
+    if(adbq->sequencehop){
+        argv[argvctr++]="-h";
+        argv[argvctr++]=adbq->sequencehop;
+    }
+
+    if (adbq->absolute_threshold){
+        argv[argvctr++]="--absolute-threshold";
+        snprintf(tempstr1,sizeof(tempstr1),"%f",adbq->absolute_threshold);
+        argv[argvctr++]=tempstr1;
+    }
+
+    if (adbq->relative_threshold){
+        argv[argvctr++]="--relative-threshold";
+        snprintf(tempstr2,sizeof(tempstr2),"%f",adbq->relative_threshold);
+        argv[argvctr++]=tempstr2;
+    }
+
+    if (adbq->exhaustive){
+        argv[argvctr++]="--exhaustive";
+    }
+
+    if (adbq->expandfactor){
+        argv[argvctr++]="--expandfactor";
+        snprintf(tempstr3,sizeof(tempstr3),"%f",adbq->expandfactor);
+        argv[argvctr++]=tempstr3;
+    }
+
+    if (adbq->rotate){
+        argv[argvctr++]="--rotate";
+    }
+
+    if (adbq->keylist){
+        argv[argvctr++]="-K";
+        argv[argvctr++]=adbq->keylist;
+    }
+    argv[argvctr+1]='\0';
+
+    /* debugging */
+
+    audioDB::audioDB(argvctr,argv, &adbQueryResponse, &apierror);
+
+    //copy data over here from adbQueryResponse to adbqr
+    adbqr->sizeRlist=adbQueryResponse.result.__sizeRlist;
+    adbqr->sizeDist=adbQueryResponse.result.__sizeDist;
+    adbqr->sizeQpos=adbQueryResponse.result.__sizeQpos;
+    adbqr->sizeSpos=adbQueryResponse.result.__sizeSpos;
+    adbqr->Rlist=adbQueryResponse.result.Rlist;
+    adbqr->Dist=adbQueryResponse.result.Dist;
+    adbqr->Qpos=adbQueryResponse.result.Qpos;
+    adbqr->Spos=adbQueryResponse.result.Spos;
+
+    return apierror;
+  }
+
+  ///* status command */
+  int audiodb_status(adb_ptr mydb, adb_status_ptr status){
+
+      cppstatus sss;
+      int apierror=0;
+
+      char * argv[5];
+
+      apierror=0;
+      argv[0]="audioDB";
+      argv[1]="--STATUS";
+      argv[2]="-d";
+      argv[3]=mydb->dbname;
+      argv[4]='\0';
+
+      audioDB::audioDB(4,argv,&sss ,&apierror);
+      
+      status->numFiles=sss.numFiles;
+      status->dim=sss.dim;
+      status->length=sss.length;
+      status->dudCount=sss.dudCount;
+      status->nullCount=sss.nullCount;
+      status->flags=sss.flags;
+
+      return apierror;
+  }
+
+  int audiodb_dump(adb_ptr mydb){
+      return audiodb_dump_withdir(mydb,"audioDB.dump");
+  }
+
+  int audiodb_dump_withdir(adb_ptr mydb, char * outputdir){
+
+      char * argv[7];
+      int argvctr=0;
+      int apierror=0;
+
+      argv[argvctr++]="audioDB";
+      argv[argvctr++]="--DUMP";
+      argv[argvctr++]="-d";
+      argv[argvctr++]=mydb->dbname;
+      argv[argvctr++]="--output";
+      argv[argvctr++]=(char *)outputdir;
+      argv[argvctr+1]='\0';
+
+      audioDB::audioDB(6,argv,&apierror);
+
+      return apierror;
+  }
+
+  int audiodb_l2norm(adb_ptr mydb){
+
+      char * argv[5];
+      int apierror=0;
+
+      argv[0]="audioDB";
+      argv[1]="--L2NORM";
+      argv[2]="-d";
+      argv[3]=mydb->dbname;
+      argv[4]='\0';
+
+      audioDB::audioDB(4,argv,&apierror);
+      return apierror;
+  }
+
+  int audiodb_power(adb_ptr mydb){
+
+      char * argv[5];
+      int apierror=0;
+
+      argv[0]="audioDB";
+      argv[1]="--POWER";
+      argv[2]="-d";
+      argv[3]=mydb->dbname;
+      argv[4]='\0';
+
+      audioDB::audioDB(4,argv,&apierror);
+      return apierror;
+  }
+
+  adb_ptr audiodb_open(char * path){
+
+        adb_ptr mydbp;
+        adbstatus mystatus;
+
+        /* if db exists */
+
+        if (open(path, O_EXCL) != -1){
+
+            mydbp=(adb_ptr)malloc(sizeof(adb));
+            mydbp->dbname=(char *)malloc(sizeof(path));
+
+            strcpy(mydbp->dbname,path); 
+
+            audiodb_status(mydbp, &mystatus);
+            mydbp->ntracks=mystatus.numFiles;
+            mydbp->datadim=mystatus.dim;
+
+            return mydbp;
+        }
+
+        return NULL;
+  };
+
+
+
+  void audiodb_close(adb_ptr db){
+
+      free(db->dbname);
+      free(db);
+
+  }
+
+
+}
+
--- a/audioDB.h	Fri Nov 07 12:48:26 2008 +0000
+++ b/audioDB.h	Wed Nov 12 10:21:06 2008 +0000
@@ -184,6 +184,17 @@
   off_t dbSize;
 } dbTableHeaderT, *dbTableHeaderPtr;
 
+typedef struct {
+
+    unsigned numFiles;
+    unsigned dim;
+    unsigned length;
+    unsigned dudCount;
+    unsigned nullCount;
+    unsigned flags;
+
+
+} cppstatus, *cppstatusptr;
 
 class PointPair{
  public:
@@ -290,12 +301,16 @@
   unsigned lisztOffset;
   unsigned lisztLength;
 
+  //for lib / API
+  unsigned UseApiError;
+
   // private methods
   void error(const char* a, const char* b = "", const char *sysFunc = 0);
   void sequence_sum(double *buffer, int length, int seqlen);
   void sequence_sqrt(double *buffer, int length, int seqlen);
   void sequence_average(double *buffer, int length, int seqlen);
 
+
   void initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD);
   void delete_arrays(int track, unsigned int numVectors, double **D, double **DD);
   void read_data(int trkfid, int track, double **data_buffer_p, size_t *data_buffer_size_p);
@@ -322,6 +337,10 @@
   audioDB(const unsigned argc, const char *const argv[], adb__queryResponse *adbQueryResponse);
   audioDB(const unsigned argc, const char *const argv[], adb__statusResponse *adbStatusResponse);
   audioDB(const unsigned argc, const char *const argv[], adb__lisztResponse *adbLisztResponse);
+  audioDB(const unsigned argc, char* const argv[], int * apierror);
+  audioDB(const unsigned argc, char* const argv[], cppstatusptr stat, int * apierror);
+  audioDB(const unsigned argc, char* const argv[],adb__queryResponse *adbQueryResponse, int * apierror);
+
 
   void cleanup();
   ~audioDB();
@@ -337,6 +356,8 @@
   void batchinsert_large_adb(const char* dbName, const char* inFile);
   void query(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void status(const char* dbName, adb__statusResponse *adbStatusResponse=0);
+  void status(const char* dbName, cppstatusptr status);
+
   unsigned random_track(unsigned *propTable, unsigned total);
   void sample(const char *dbName);
   void l2norm(const char* dbName);
@@ -389,6 +410,9 @@
   
   // Web Services
   void startServer();
+
+  int apierrortemp;
+
   void ws_status(const char*dbName, char* hostport);
   void ws_query(const char*dbName, const char *featureFileName, const char* hostport);
   void ws_query_by_key(const char*dbName, const char *trackKey, const char* featureFileName, const char* hostport);
@@ -478,5 +502,6 @@
     lsh_param_b(0),				\
     lsh_param_ncols(0),                         \
     lsh_n_point_bits(0),                        \
-    vv(0)
+    vv(0),          \
+    apierrortemp(0)
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/audioDB_API.h	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,117 @@
+/* for API questions contact 
+ * Christophe Rhodes c.rhodes@gold.ac.uk
+ * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */
+
+
+/*******************************************************************/
+/* Data types for API */
+
+/* The main struct that stores the name of the database, and in future will hold all
+ * kinds of other interesting information */
+/* This basically gets passed around to all of the other functions */
+struct adb {
+
+    char * dbname;
+    unsigned int ntracks;       /* number of tracks */
+    unsigned int datadim;       /* dimensionality of stored data */
+
+};
+typedef struct adb adb_t, *adb_ptr;
+
+//used for both insert and batchinsert
+struct adbinsert {
+
+    char * features;
+    char * power;
+    char * key;
+    char * times;
+
+};
+typedef struct adbinsert adb_insert_t, *adb_insert_ptr;
+
+/* struct for returning status results */
+struct adbstatus {
+
+    unsigned int numFiles;  
+    unsigned int dim;
+    unsigned int length;
+    unsigned int dudCount;
+    unsigned int nullCount;
+    unsigned int flags;
+
+};
+typedef struct adbstatus adb_status_t, *adb_status_ptr;
+
+/* needed for constructing a query */
+struct adbquery {
+
+    char * querytype;
+    char * feature; //usually a file of some kind
+    char * power; //also a file
+    char * keylist; //also a file
+    char * qpoint;  //position 
+    char * numpoints;
+    char * radius; 
+    char * resultlength; //how many results to make
+    char * sequencelength; 
+    char * sequencehop; 
+    double absolute_threshold; 
+    double relative_threshold;
+    int exhaustive; //hidden option in gengetopt
+    double expandfactor; //hidden
+    int rotate; //hidden
+
+};
+typedef struct adbquery adb_query_t,*adb_query_ptr;
+
+/* ... and for getting query results back */
+struct adbqueryresult {
+
+    int sizeRlist; /* do I really need to return all 4 sizes here */
+    int sizeDist;
+    int sizeQpos;
+    int sizeSpos;
+    char **Rlist;
+    double *Dist;
+    unsigned int *Qpos;
+    unsigned int *Spos;
+
+};
+typedef struct adbqueryresult adb_queryresult_t, *adb_queryresult_ptr;
+
+
+/*******************************************************************/
+/* Function prototypes for API */
+
+
+/* open an existing database */
+/* returns a struct or NULL on failure */
+adb_ptr audiodb_open(char * path);
+
+/* create a new database */
+/* returns a struct or NULL on failure */
+//adb_ptr audiodb_create(char * path,long ntracks, long datadim);
+adb_ptr audiodb_create(char * path,long datasize, long ntracks, long datadim);
+
+/* close a database */
+void audiodb_close(adb_ptr db);
+
+/* You'll need to turn both of these on to do anything useful */
+int audiodb_l2norm(adb_ptr mydb);
+int audiodb_power(adb_ptr mydb);
+
+/* insert functions */
+int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins);
+int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size);
+
+/* query function */
+int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqres);
+  
+/* database status */  
+int audiodb_status(adb_ptr mydb, adb_status_ptr status);
+
+/* varoius dump formats */
+int audiodb_dump(adb_ptr mydb);
+int audiodb_dump_withdir(adb_ptr mydb, char * outputdir);
+
+
--- a/common.cpp	Fri Nov 07 12:48:26 2008 +0000
+++ b/common.cpp	Wed Nov 12 10:21:06 2008 +0000
@@ -50,7 +50,9 @@
 }
 
 void audioDB::error(const char* a, const char* b, const char *sysFunc) {
-  if(isServer) {
+ 
+
+    if(isServer) {
     /* FIXME: I think this is leaky -- we never delete err.  actually
        deleting it is tricky, though; it gets placed into some
        soap-internal struct with uncertain extent... -- CSR,
@@ -60,14 +62,18 @@
     /* FIXME: actually we could usefully do with a properly structured
        type, so that we can throw separate faultstring and details.
        -- CSR, 2007-10-01 */
-    throw(err);
-  } else {
-    std::cerr << a << ": " << b << std::endl;
-    if (sysFunc) {
-      perror(sysFunc);
+        throw(err);
+    } else if (UseApiError){
+        apierrortemp=-1;
+        throw(apierrortemp);
+    } else {
+        std::cerr << a << ": " << b << std::endl;
+        if (sysFunc) {
+            perror(sysFunc);
+        }
+        exit(1);
     }
-    exit(1);
-  }
+
 }
 
 void audioDB::initRNG() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0001/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+all:	test1
+
+
+test1:	prog1.c 
+	#gcc -Wall -o test1 prog1.c -laudioDB_API -L..
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0001/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,88 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    adb_ptr mydbp2={0};
+    struct stat statbuf;
+    int statval=0;
+
+    char * databasename="testdb";
+
+    //if [ -f testdb ]; then rm -f testdb; fi
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //# creation
+    //${AUDIODB} -N -d testdb
+    mydbp=audiodb_open(databasename);
+
+
+    /* open should fail (return NULL), so create a new db */
+    if (!mydbp){
+        mydbp=audiodb_create(databasename,0,0,0);
+    }
+
+
+
+    if (!mydbp){
+        printf("fail\n");
+        returnval=-1;
+    }
+    
+
+    /* stat testdb - let's make sure that it is there */
+    //stat testdb
+    statval=stat(databasename, &statbuf);
+
+    if (statval){
+       returnval=-1;
+    }
+    
+    audiodb_close(mydbp);
+
+    /* try to create should fail, because db exists now */
+    mydbp2=audiodb_create(databasename,0,0,0);
+
+    if (mydbp2){
+        returnval=-1;
+    }
+
+
+/* should pass now - db exists */ 
+//expect_clean_error_exit ${AUDIODB} -N -d testdb
+    mydbp2=audiodb_open(databasename);
+    if (!mydbp2){
+       returnval=-1;
+    }
+
+//this test would fail at compile time because of the API interface
+//# should fail (no db given)
+//expect_clean_error_exit ${AUDIODB} -N
+
+
+    audiodb_close(mydbp2);
+
+//    printf("returnval:%d\n",returnval);
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0001/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0001/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+DB creation using lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0002/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0002/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    adb_status_t mystatus={0};
+
+    char * databasename="testdb";
+
+//. ../test-utils.sh
+//
+//if [ -f testdb ]; then rm -f testdb; fi
+//
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -N -d testdb
+//
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+//# FIXME: at some point we will want to test that some relevant
+//# information is being printed
+//${AUDIODB} -S -d testdb
+//${AUDIODB} -d testdb -S
+
+    if(audiodb_status(mydbp,&mystatus)){
+        returnval=-1;
+    }
+
+/* not relevent, caught by API */
+//# should fail (no db given)
+//expect_clean_error_exit ${AUDIODB} -S
+
+
+
+    audiodb_close(mydbp);
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0002/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,37 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0002/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+DB status using lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0003/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0003/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,91 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10]={0};
+    double dvals[10]={0.0};
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    char * databasename="testdb";
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    //
+    clean_remove_db(databasename);
+
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    /* turn on l2norm */
+    //# point query now implemented as sequence search
+    //${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+    /* make a test file */
+    //# FIXME: endianness!
+    //intstring 1 > testfeature
+    //floatstring 1 >> testfeature
+    ivals[0]=1;
+    dvals[0]=1;
+    maketestfile("testfeature",ivals,dvals,1);
+    
+    /* insert */ 
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+    
+    /* query */ 
+    //${AUDIODB} -d testdb -Q point -f testfeature > test-query-output
+    myadbquery.querytype="point"; 
+    myadbquery.feature="testfeature"; 
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    
+    /* check the test values */
+    //echo testfeature 1 0 0 > test-expected-query-output
+    //cmp test-query-output test-expected-query-output
+    size=myadbqueryresult.sizeRlist;
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};   
+    
+
+//#
+//## failure cases
+//expect_clean_error_exit ${AUDIODB} -d testdb -I
+//expect_clean_error_exit ${AUDIODB} -d testdb -f testfeature
+//expect_clean_error_exit ${AUDIODB} -I -f testfeature
+//expect_clean_error_exit ${AUDIODB} -d testdb -Q notpoint -f testfeature
+//expect_clean_error_exit ${AUDIODB} -Q point -f testfeature
+/* all of these will fail at compile time because of API */
+
+    audiodb_close(mydbp);
+      
+    return(returnval);
+}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0003/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,37 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0003/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+1D insertion / point query using lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0004/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0004/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,140 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    adb_status_t mystatus={0};
+    int ivals[10];
+    double dvals[10];
+    FILE * myfile;
+    int ret=0;
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    char * databasename="testdb";
+    int i=0;
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    /* turn on l2norm */
+    //${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+    /* make a test file */
+    //intstring 2 > testfeature
+    //floatstring 0 1 >> testfeature
+    //floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature", ivals,dvals,4);
+
+
+    /* insert */ 
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    /* testquery */ 
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery", ivals,dvals,4);
+
+    /* query 1 */
+    //${AUDIODB} -d testdb -Q point -f testquery > testoutput
+    //echo testfeature 0.5 0 0 > test-expected-output
+    //echo testfeature 0 0 1 >> test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="point"; 
+    myadbquery.feature="testquery"; 
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+    
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",.5,0,0)) {returnval = -1;};   
+    if (testoneresult(&myadbqueryresult,1,"testfeature",0,0,1)) {returnval = -1;};   
+    
+    /* query 2 - same but only first result */
+//${AUDIODB} -d testdb -Q point -f testquery -n 1 > testoutput
+//echo testfeature 0.5 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.numpoints="1"; 
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",.5,0,0)) {returnval = -1;};   
+
+
+    /* testquery2 */ 
+    //echo "query point (0.5,0.0)"
+    //intstring 2 > testquery
+    //floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery", ivals,dvals,4);
+
+    /* query 3 */ 
+    //${AUDIODB} -d testdb -Q point -f testquery > testoutput
+    //echo testfeature 0.5 0 1 > test-expected-output
+    //echo testfeature 0 0 0 >> test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery2.querytype="point"; 
+    myadbquery2.feature="testquery"; 
+    myadbquery2.numpoints=NULL; 
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",.5,0,1)) {returnval = -1;};   
+    if (testoneresult(&myadbqueryresult2,1,"testfeature",0,0,0)) {returnval = -1;};   
+     
+    /* query 4 - same as 3 but only first result */
+    //${AUDIODB} -d testdb -Q point -f testquery -n 1 > testoutput
+    //echo testfeature 0.5 0 1 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery2.numpoints="1"; 
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",.5,0,1)) {returnval = -1;};   
+
+    audiodb_close(mydbp);
+
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0004/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0004/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+point query using lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0005/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0005/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,69 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    int myerror=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+    /* make a test file */
+    //intstring 2 > testfeature
+    //floatstring 0 1 >> testfeature
+    //floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+    
+    /* insert */ 
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    /* turn on l2norm */
+    //echo running L2Norm
+    //${AUDIODB} -d testdb -L
+    myerror=audiodb_l2norm(mydbp);
+    if (myerror){
+        returnval=-1;
+    }
+
+
+    /* close */
+    audiodb_close(mydbp);
+
+
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0005/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0005/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+L2 Norm with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0006/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0006/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,147 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    /* create testfeature file */
+    //intstring 2 > testfeature
+    //floatstring 0 1 >> testfeature
+    //floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+
+    /* insert */
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    if(audiodb_insert(mydbp,&myinsert)){
+        returnval=-1;
+    };   
+
+
+    /* turn on L2NORM */
+    //# sequence queries require L2NORM
+    //${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+    /* make a test query */
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    /* test a sequence query */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+    //echo testfeature 1 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+    /* same but with limites */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+    //echo testfeature 0 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.numpoints="1"; 
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+    /* make another query */
+    //echo "query point (0.5,0.0)"
+    //intstring 2 > testquery
+    //floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+
+    /* test new query */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+    //echo testfeature 1 0 1 > test-expected-output
+    //cmp testoutput test-expected-output
+
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",1,0,1)) {returnval = -1;};
+
+
+    /* test new query with limits */    
+    myadbquery2.numpoints="1"; 
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+    //echo testfeature 0 0 1 > test-expected-output
+    //cmp testoutput test-expected-output
+
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",0,0,1)) {returnval = -1;};
+
+
+
+    /* close */
+    audiodb_close(mydbp);
+
+    printf("returnval:%d\n",returnval);
+    return(returnval);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0006/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,37 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0006/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+sequence search / 1 track with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0007/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0007/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,124 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    // adbquery myadbquery2={0};
+    // adbqueryresult myadbqueryresult2={0};
+    int size=0;
+
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+    /* create new db */
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//# tests that the lack of -l when the query sequence is shorter doesn't
+//# segfault.
+
+    /* make test file */
+    //intstring 2 > testfeature
+    //floatstring 0 1 >> testfeature
+    //floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+    /* insert */
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+    if(myerr){ returnval=-1; };
+
+
+    /* turn on l2norm */
+    //# sequence queries require L2NORM
+    //${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+
+    /* make query */
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+
+/* should fail */
+
+//audioDB -Q sequence -d testdb -f testquery
+//expect_clean_error_exit ${AUDIODB} -d testdb -Q sequence -f testquery
+    
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.sequencelength="1";
+    myerr=audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+    if (!myerr){ returnval = -1;};
+
+
+///* should fail */
+//expect_clean_error_exit ${AUDIODB} -d testdb -Q sequence -f testquery -n 1
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.numpoints="1";
+    myerr=audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    if(!myerr){ returnval=-1; };
+
+/* query 2 */
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+/* should fail */
+//expect_clean_error_exit ${AUDIODB} -d testdb -Q sequence -f testquery
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.numpoints=NULL;
+    myerr=audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    if(!myerr){ returnval=-1; };
+
+/* should fail */
+//expect_clean_error_exit ${AUDIODB} -d testdb -Q sequence -f testquery -n 1
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.numpoints="1";
+    myerr=audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    if(!myerr){ returnval=-1; };
+
+
+
+
+    //printf("returnval:%d\n", returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0007/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0007/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+short query [no -l] error with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0008/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0008/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,165 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+
+
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+
+
+//${AUDIODB} -d testdb -N
+    /* create new db */
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+
+    /* create testfeature01 file */
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=0; dvals[3]=0;
+    maketestfile("testfeature01",ivals,dvals,2);
+
+    /* create testfeature10 file */
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -I -f testfeature01
+//${AUDIODB} -d testdb -I -f testfeature10
+
+    /* insert */
+    myinsert.features="testfeature01";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    myinsert.features="testfeature10";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+
+    /* create testquery file */
+    ivals[0]=2;
+    dvals[0]=0.0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//echo testfeature10 2 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+
+    /* query */
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",2,0,0)) {returnval = -1;};
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 > testoutput
+////echo testfeature01 0 0 0 > test-expected-output
+////cmp testoutput test-expected-output
+
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+
+    /* create testquery file */
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature10 0 0 0 > test-expected-output
+//echo testfeature01 2 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,1,"testfeature01",2,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 > testoutput
+//echo testfeature10 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+
+
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.resultlength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0,0,0)) {returnval = -1;};
+
+
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0008/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0008/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+sequence search / 2 tracks with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0009/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0009/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,166 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+
+    //if [ -f testdb ]; then rm -f testdb; fi
+
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+
+    //${AUDIODB} -d testdb -N
+
+    /* create new db */
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    //${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+    //intstring 2 > testfeature01
+    //floatstring 0 1 >> testfeature01
+    //intstring 2 > testfeature10
+    //floatstring 1 0 >> testfeature10
+
+    /* create testfeature01 file */
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=0; dvals[3]=0;
+    maketestfile("testfeature01",ivals,dvals,2);
+
+    /* create testfeature10 file */
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+    //${AUDIODB} -d testdb -I -f testfeature01
+    //${AUDIODB} -d testdb -I -f testfeature10
+
+    /* insert */
+    myinsert.features="testfeature01";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+    myinsert.features="testfeature10";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+
+
+    /* create testquery file */
+    ivals[0]=2;
+    dvals[0]=0.0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    //${AUDIODB} -d testdb -Q track -l 1 -f testquery > testoutput
+    //echo testfeature01 0.5 0 0 > test-expected-output
+    //echo testfeature10 0 0 0 >> test-expected-output
+    //cmp testoutput test-expected-output
+
+    /* query */
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0.5,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",0,0,0)) {returnval = -1;};
+
+    //${AUDIODB} -d testdb -Q track -l 1 -f testquery -r 1 > testoutput
+    //echo testfeature01 0.5 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+
+    /* query */
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0.5,0,0)) {returnval = -1;};
+
+    //echo "query point (0.5,0.0)"
+    //intstring 2 > testquery
+    //floatstring 0.5 0 >> testquery
+
+    /* create testquery file */
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    //${AUDIODB} -d testdb -Q track -l 1 -f testquery > testoutput
+    //echo testfeature10 0.5 0 0 > test-expected-output
+    //echo testfeature01 0 0 0 >> test-expected-output
+    //cmp testoutput test-expected-output
+
+    /* query */
+    myadbquery2.querytype="track";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0.5,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,1,"testfeature01",0,0,0)) {returnval = -1;};
+
+
+    //${AUDIODB} -d testdb -Q track -l 1 -f testquery -r 1 > testoutput
+    //echo testfeature10 0.5 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+
+    /* query */
+    myadbquery2.querytype="track";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.resultlength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0.5,0,0)) {returnval = -1;};
+
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0009/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0009/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+track search with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0010/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0010/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,125 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+/* clean */
+//if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+/* new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+/* test feature files */
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+/* inserts */
+//${AUDIODB} -d testdb -I -f testfeature01
+//${AUDIODB} -d testdb -I -f testfeature10
+    myinsert.features="testfeature01";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+    myinsert.features="testfeature10";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+/* l2norm */
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+/* query 1 */
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//cmp testoutput test-expected-output
+  
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    dump_query(&myadbquery,&myadbqueryresult);
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    //if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+    //if (testoneresult(&myadbqueryresult,1,"testfeature",1,0,0)) {returnval = -1;};
+  
+  
+/* query 2 */
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//cmp testoutput test-expected-output
+//
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+
+
+/* query 3 */
+//# FIXME: because there's only one point in each track (and the query),
+//# the ordering is essentially database order.  We need these test
+//# cases anyway because we need to test non-segfaulting, non-empty
+//# results...
+//
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//cmp testoutput test-expected-output
+
+
+
+/* query 4 */
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//cmp testoutput test-expected-output
+
+
+    printf("returnval:%d\n",returnval);
+    //returnval=-1;
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0010/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0010/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+sequence radius search / 1 point with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0011/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0011/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,141 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+    //if [ -f testdb ]; then rm -f testdb; fi
+    /* remove old directory */
+    clean_remove_db(databasename);
+
+
+    //${AUDIODB} -d testdb -N
+    /* create new db */
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+    /* create testfeature01 file */
+    //intstring 2 > testfeature
+    //floatstring 0 0.5 >> testfeature
+    //floatstring 0.5 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0.5; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+    /* insert */
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    /* create testquery file */
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    /* l2norm */
+    //# sequence queries require L2NORM
+    //${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+    /* query */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+    //echo testfeature 1 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+    /* query2 */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+    //echo testfeature 0 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+    /* query3 */
+    //echo "query point (0.5,0.0)"
+    //intstring 2 > testquery
+    //floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+    //echo testfeature 1 0 1 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",1,0,1)) {returnval = -1;};
+
+
+    /* query4 */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+    //echo testfeature 0 0 1 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.numpoints="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",0,0,1)) {returnval = -1;};
+
+
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0011/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0011/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+sequence search / 1 track / non-normed features using lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0012/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0012/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,138 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    //intstring 2 > testfeature
+    //floatstring 0 0.5 >> testfeature
+    //floatstring 0.5 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0.5; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+    //# sequence queries require L2NORM; check that we can still insert
+    //# after turning flag on
+    //${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+    //${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+    /* query 1 */
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+    /* query 2 */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+    //echo testfeature 0 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+    /* testquery */
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    /* create testquery file */
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0; dvals[2]=0; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+    /* query 3 file */
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",1,0,1)) {returnval = -1;};
+
+    /* query 4 */
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature 0 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.numpoints="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",0,0,1)) {returnval = -1;};
+
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0012/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0012/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+insert after L2Norm with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0022/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0022/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,152 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    adb_insert_t ins1[2]={{0},{0}};
+    int size=0;
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    if (!mydbp){ returnval=-1;};
+
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+
+//cat > testfeaturefiles <<EOF
+//testfeature01
+//testfeature10
+//EOF
+
+    ins1[0].features="testfeature01";
+    ins1[1].features="testfeature10";
+
+//audioDB --BATCHINSERT -d testdb --featureList tempfeatures 
+//${AUDIODB} -d testdb -B -F testfeaturefiles
+
+    if(audiodb_batchinsert(mydbp,ins1,2)){
+        returnval=-1;
+    };
+
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//echo testfeature10 2 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",2,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0;
+    maketestfile("testquery",ivals,dvals,2);
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+////echo testfeature10 0 0 0 > test-expected-output
+////echo testfeature01 2 0 0 >> test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,1,"testfeature01",2,0,0)) {returnval = -1;};
+
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 > testoutput
+////echo testfeature10 0 0 0 > test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.resultlength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0,0,0)) {returnval = -1;};
+
+    audiodb_close(mydbp);
+//    fprintf(stderr,"returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0022/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0022/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+Batchinsert / sequence search with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0023/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	clean test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0023/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,160 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    adb_query_t myadbquery3={0};
+    adb_queryresult_t myadbqueryresult3={0};
+    int size=0;
+    adb_insert_t ins1[2]={{0},{0}};
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+//cat > testfeaturefiles <<EOF
+//testfeature01
+//testfeature10
+//EOF
+    ins1[0].features="testfeature01";
+    ins1[1].features="testfeature10";
+
+//audioDB -B -d testdb -F tempfeatures
+//${AUDIODB} -d testdb -B -F testfeaturefiles
+    if(audiodb_batchinsert(mydbp,ins1,2)){
+        returnval=-1;
+    };
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+////echo "query point (0.0,0.5)"
+////intstring 2 > testquery
+////floatstring 0 0.5 >> testquery
+////floatstring 0.5 0 >> testquery
+
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    dvals[2]=0.5; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,4);
+  
+  
+  
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 0 > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//echo testfeature10 2 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.qpoint="0";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //printf("size:%d\n",size);
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",2,0,0)) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -p 0 > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.resultlength="1";
+    myadbquery2.qpoint="0";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature01",0,0,0)) {returnval = -1;};
+
+
+//echo "query point (0.5,0.0)"
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 1 > testoutput
+//echo testfeature10 0 1 0 > test-expected-output
+//echo testfeature01 2 1 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery3.querytype="sequence";
+    myadbquery3.feature="testquery";
+    myadbquery3.sequencelength="1";
+    myadbquery3.qpoint="1";
+    audiodb_query(mydbp,&myadbquery3,&myadbqueryresult3);
+    size=myadbqueryresult3.sizeRlist;
+
+//    dump_query(&myadbquery3,&myadbqueryresult3);
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult3,0,"testfeature10",0,1,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult3,1,"testfeature01",2,1,0)) {returnval = -1;};
+
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -p 1 > testoutput
+////echo testfeature10 0 1 0 > test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.qpoint="1";
+    myadbquery2.resultlength="1";
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature10",0,1,0)) {returnval = -1;};
+
+
+//    printf("returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0023/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0023/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+as 0022 but with -p with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0024/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0024/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,118 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+    adb_insert_t ins1[2]={0};
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+//cat > testfeaturefiles <<EOF
+//testfeature01
+//testfeature10
+//EOF
+    ins1[0].features="testfeature01";
+    ins1[1].features="testfeature10";
+
+
+//${AUDIODB} -d testdb -B -F testfeaturefiles
+    returnval=audiodb_batchinsert(mydbp,ins1,2);
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    audiodb_l2norm(mydbp);
+
+//echo "exhaustive search"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    dvals[2]=0.5; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,4);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -e > testoutput
+//echo testfeature01 1 0 0 > test-expected-output
+//echo testfeature10 1 1 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.exhaustive=1;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //printf("size:%d\n",size);
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",1,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",1,1,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 -e > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//echo testfeature10 0 1 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.exhaustive=1;
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //printf("size:%d\n",size);
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",0,1,0)) {returnval = -1;};
+
+      
+    printf("returnval:%d\n",returnval);
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0024/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0024/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+-l 1 exhaustive search like 0022 with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0025/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0025/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,158 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+void maketimesfile(char * filename);
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature
+//floatstring 0 0.5 >> testfeature
+//floatstring 0.5 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0.5; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+
+//cat > testtimes <<EOF
+//0
+//1
+//2
+//EOF
+    maketimesfile("testtimes");
+
+//${AUDIODB} -d testdb -I -f testfeature -t testtimes
+    myinsert.features="testfeature";
+    if(audiodb_insert(mydbp,&myinsert)){
+        returnval=-1;
+    };   
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+////echo testfeature 0 0 0 > test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+////echo "query point (0.5,0.0)"
+////intstring 2 > testquery
+////floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+////echo testfeature 1 0 1 > test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,1)) {returnval = -1;};
+
+
+////${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+////echo testfeature 0 0 1 > test-expected-output
+////cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,1)) {returnval = -1;};
+
+
+
+    //printf("returnval:%d\n",returnval);
+    return(returnval);
+}
+
+void maketimesfile(char * filename){
+
+    FILE * myfile;
+
+    myfile=fopen(filename,"w");
+    fprintf(myfile,"0\n");
+    fprintf(myfile,"1\n");
+    fprintf(myfile,"2\n");
+    fflush(myfile);
+    fclose(myfile);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0025/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0025/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+insertion with times with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0026/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0026/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    // int ivals[10];
+    // double dvals[10];
+    // adbinsert myinsert={0};
+    // unsigned int myerr=0;
+    char * databasename="testdb";
+    // adbquery myadbquery={0};
+    // adbqueryresult myadbqueryresult={0};
+    // adbquery myadbquery2={0};
+    // adbqueryresult myadbqueryresult2={0};
+    int myerror=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -N -d testdb
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    /* power flag on */
+    //${AUDIODB} -P -d testdb
+    //${AUDIODB} -d testdb -P
+    myerror=audiodb_power(mydbp); 
+    if (myerror){
+        returnval=-1;
+    }
+
+    //# should fail (no db given)
+    //expect_clean_error_exit ${AUDIODB} -P
+    /* not relevent, API wouldn't compile */
+
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0026/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0026/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+command-line -P handling with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0027/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0027/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,362 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    //intstring 2 > testfeature
+    //floatstring 0 1 >> testfeature
+    //floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+    //intstring 1 > testpower
+    //floatstring -0.5 >> testpower
+    //floatstring -1 >> testpower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1;
+    maketestfile("testpower",ivals,dvals,2);
+
+    /* insert breaks because power flag off and power insert */
+    //expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+  
+  
+    /* make sure power can be turned on */
+//${AUDIODB} -d testdb -P
+    if(audiodb_power(mydbp)){ returnval=-1; };
+
+
+    /* inserts now require power also */
+////expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myinsert.power=NULL;
+    //myerr=audiodb_insert(mydbp,&myinsert);   
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+    /* now make a real insert */
+//${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    myerr=audiodb_insert(mydbp,&myinsert);   
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+
+    //# sequence queries require L2NORM
+    //${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+
+    //# queries without power files should run as before
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=-0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+
+    /* query 1 */
+    //${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+    //echo testfeature 1 0 0 > test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature 0 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,1)) {returnval = -1;};
+
+
+
+//# queries with power files might do something different
+//echo "query point (0.0,0.5), p=-0.5"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+//intstring 1 > testquerypower
+//floatstring -0.5 >> testquerypower
+    ivals[0]=2;
+    dvals[0]=-0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+    ivals[0]=1;
+    dvals[0]=-0.5;
+    maketestfile("testquerypower",ivals,dvals,1);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-1.4 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.power="testquerypower";
+    myadbquery.numpoints=NULL;
+    myadbquery.absolute_threshold=-1.4;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.6 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.power="testquerypower";
+    myadbquery.numpoints=NULL;
+    myadbquery.absolute_threshold=-0.6;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.2 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.power="testquerypower";
+    myadbquery.numpoints=NULL;
+    myadbquery.absolute_threshold=-0.2;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=1 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.power="testquerypower";
+    myadbquery.numpoints=NULL;
+    myadbquery.absolute_threshold=0;
+    myadbquery.relative_threshold=1;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=0.2 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.power="testquerypower";
+    myadbquery.numpoints=NULL;
+    myadbquery.absolute_threshold=0;
+    myadbquery.relative_threshold=0.2;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+
+//echo "query point (0.5,0.0), p=-0.5"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+
+//audioDB -Q sequence -d testdb -f testquery -w testquerypower -l 1 --absolute-threshold -1.400000 
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-1.4 > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.power="testquerypower";
+    myadbquery2.numpoints=NULL;
+    myadbquery2.absolute_threshold=-1.4;
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",1,0,1)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.6 > testoutput
+//echo testfeature 2 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.power="testquerypower";
+    myadbquery2.numpoints=NULL;
+    myadbquery2.absolute_threshold=-0.6;
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",2,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.2 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.power="testquerypower";
+    myadbquery2.numpoints=NULL;
+    myadbquery2.absolute_threshold=-0.2;
+    myadbquery2.relative_threshold=0.0;
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=1 > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.power="testquerypower";
+    myadbquery2.numpoints=NULL;
+    myadbquery2.absolute_threshold=0.0;
+    myadbquery2.relative_threshold=1;
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",1,0,1)) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=0.2 > testoutput
+//echo testfeature 2 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery2.querytype="sequence";
+    myadbquery2.feature="testquery";
+    myadbquery2.sequencelength="1";
+    myadbquery2.power="testquerypower";
+    myadbquery2.numpoints=NULL;
+    myadbquery2.absolute_threshold=-0.0;
+    myadbquery2.relative_threshold=0.1;
+    audiodb_query(mydbp,&myadbquery2,&myadbqueryresult2);
+    size=myadbqueryresult2.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult2,0,"testfeature",2,0,0)) {returnval = -1;};
+
+//    printf("returnval:%d\n",returnval);
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0027/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0027/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+0006 with power with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0028/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0028/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,364 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+    adb_insert_t ins1[2]={{0},{0}};
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature
+//floatstring 0 1 >> testfeature
+//floatstring 1 0 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    maketestfile("testfeature",ivals,dvals,4);
+
+//intstring 1 > testpower
+//floatstring -0.5 >> testpower
+//floatstring -1 >> testpower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1;
+    maketestfile("testpower",ivals,dvals,2);
+
+//echo testfeature > testFeatureList.txt
+//echo testpower > testPowerList.txt
+    ins1[0].features="testfeature";
+    ins1[0].power="testpower";
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -B -F testFeatureList.txt -W testPowerList.txt
+    if(!audiodb_batchinsert(mydbp,ins1,1)){
+        returnval=-1;
+    };
+
+//${AUDIODB} -d testdb -P
+    if(audiodb_power(mydbp)){
+        returnval=-1;
+    };
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -B -F testFeatureList.txt
+    ins1[0].features="testfeature";
+    ins1[0].power=NULL;
+    if(!audiodb_batchinsert(mydbp,ins1,1)){
+        returnval=-1;
+    };
+
+//${AUDIODB} -d testdb -B -F testFeatureList.txt -W testPowerList.txt
+    ins1[0].features="testfeature";
+    ins1[0].power="testpower";
+    if(audiodb_batchinsert(mydbp,ins1,1)){
+        returnval=-1;
+    };
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){
+        returnval=-1;
+    };
+
+//# queries without power files should run as before
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=-0.0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature 0 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,1)) {returnval = -1;};
+
+//# queries with power files might do something different
+//echo "query point (0.0,0.5), p=-0.5"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+//intstring 1 > testquerypower
+//floatstring -0.5 >> testquerypower
+    ivals[0]=1;
+    dvals[0]=-0.5;
+    maketestfile("testquerypower",ivals,dvals,1);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-1.4 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-1.4;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.6 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-0.6;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.2 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-0.2;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=1 > testoutput
+//audioDB -Q sequence -d testdb -f testquery -w testquerypower -l 1 --relative-threshold 1.000000
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.relative_threshold=1.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=0.2 > testoutput
+//echo testfeature 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.relative_threshold=0.2;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",0,0,0)) {returnval = -1;};
+
+////echo "query point (0.5,0.0), p=-0.5"
+////intstring 2 > testquery
+////floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-1.4 > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-1.4;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+//    dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.6 > testoutput
+//echo testfeature 2 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-0.6;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",2,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --absolute-threshold=-0.2 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.absolute_threshold=-0.2;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=1 > testoutput
+//echo testfeature 1 0 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.relative_threshold=1.0;
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -w testquerypower --relative-threshold=0.2 > testoutput
+//echo testfeature 2 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.relative_threshold=0.2;
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.numpoints=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    ///* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",2,0,0)) {returnval = -1;};
+
+
+    audiodb_close(mydbp);
+    //fprintf(stderr,"returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0028/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0028/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+batchinsert version of 0027 with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0029/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0029/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,270 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature
+//floatstring 0 1 >> testfeature
+//floatstring 1 0 >> testfeature
+//floatstring 1 0 >> testfeature
+//floatstring 0 1 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    dvals[4]=1; dvals[5]=0; dvals[6]=0; dvals[7]=1;
+    maketestfile("testfeature",ivals,dvals,8);
+
+//intstring 1 > testpower
+//floatstring -0.5 >> testpower
+//floatstring -1 >> testpower
+//floatstring -1 >> testpower
+//floatstring -0.5 >> testpower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1; dvals[2]=-1; dvals[3]=-0.5;
+    maketestfile("testpower",ivals,dvals,4);
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+//${AUDIODB} -d testdb -P
+    if(audiodb_power(mydbp)){ returnval=-1; };
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myinsert.power=NULL;
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+
+//${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+//echo "query points (0.0,0.5),(0.0,0.5),(0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+//floatstring 0 0.5 >> testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0.5; dvals[4]=0.5; dvals[5]=0;
+    maketestfile("testquery",ivals,dvals,6);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+//audioDB -Q sequence -d testdb -f testquery -l 1
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 0 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.qpoint="0";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+    printf("returnval:%d\n",returnval);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 1 > testoutput
+//echo testfeature 1 1 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.qpoint="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,1,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -p 0 > testoutput
+//echo testfeature 1.33333 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1.33333,0,0)) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -p 1 > testoutput
+//echo testfeature 1 1 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,1,0)) {returnval = -1;};
+
+
+//echo "query points (0.0,0.5)p=-0.5,(0.0,0.5)p=-1,(0.5,0.0)p=-1"
+//intstring 1 > testquerypower
+//floatstring -0.5 -1 -1 >> testquerypower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1; dvals[2]=-1; 
+    maketestfile("testquerypower",ivals,dvals,3);
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-1.4 -p 0 > testoutput
+//echo testfeature 1.33333 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint=NULL;
+    myadbquery.absolute_threshold=-1.4;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1.33333,0,0)) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-1.4 -p 1 > testoutput
+//echo testfeature 1 1 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    myadbquery.absolute_threshold=-1.4;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,1,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-0.8 -p 0 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=-0.8;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-0.8 -p 1 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    myadbquery.absolute_threshold=-0.8;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --relative-threshold=0.1 -p 0 > testoutput
+//echo testfeature 1 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.relative_threshold=0.1;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature",1,0,0)) {returnval = -1;};
+
+
+
+////    returnval=-1;
+    printf("returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0029/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0029/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+-l 2 searches with power with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0030/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0030/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,334 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature
+//floatstring 0 1 >> testfeature
+//floatstring 1 0 >> testfeature
+//floatstring 1 0 >> testfeature
+//floatstring 0 1 >> testfeature
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1; dvals[2]=1; dvals[3]=0;
+    dvals[4]=1; dvals[5]=0; dvals[6]=0; dvals[7]=1;
+    maketestfile("testfeature",ivals,dvals,8);
+
+//intstring 1 > testpower
+//floatstring -0.5 >> testpower
+//floatstring -1 >> testpower
+//floatstring -1 >> testpower
+//floatstring -0.5 >> testpower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1; dvals[2]=-1; dvals[3]=-0.5;
+    maketestfile("testpower",ivals,dvals,4);
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+//${AUDIODB} -d testdb -P
+    if(audiodb_power(mydbp)){ returnval=-1; };
+
+//expect_clean_error_exit ${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    myinsert.power=NULL;
+    if (!audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+//${AUDIODB} -d testdb -I -f testfeature -w testpower
+    myinsert.features="testfeature";
+    myinsert.power="testpower";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+    printf("returnval:%d\n",returnval);
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+//echo "query points (0.0,0.5),(0.0,0.5),(0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+//floatstring 0 0.5 >> testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5; dvals[2]=0; dvals[3]=0.5; dvals[4]=0.5; dvals[5]=0;
+    maketestfile("testquery",ivals,dvals,6);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 0.1 > testoutput
+//audioDB -Q sequence -d testdb -f testquery -R 0.1 -l 1
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    //myadbquery.qpoint="0";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="0.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 0 -R 0.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.qpoint="0";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="0.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -p 1 -R 0.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.power="testquerypower";
+    myadbquery.sequencelength="1";
+    myadbquery.qpoint="1";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="0.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -p 0 -R 1.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="1.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -p 0 -R 0.9 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="0.9";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -p 1 -R 0.9 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    //myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    myadbquery.radius="0.9";
+    //myadbquery.absolute_threshold=0.0;
+    //myadbquery.relative_threshold=0.1;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//echo "query points (0.0,0.5)p=-0.5,(0.0,0.5)p=-1,(0.5,0.0)p=-1"
+//intstring 1 > testquerypower
+//floatstring -0.5 -1 -1 >> testquerypower
+    ivals[0]=1;
+    dvals[0]=-0.5; dvals[1]=-1; dvals[2]=-1;
+    maketestfile("testquerypower",ivals,dvals,3);
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-1.4 -p 0 -R 1.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=-1.4;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.radius="1.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-0.8 -p 0 -R 1.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=-0.8;
+    //myadbquery.relative_threshold=0.1;
+    myadbquery.radius="1.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-0.7 -p 0 -R 1.1 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=-0.7;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.radius="1.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-1.4 -p 1 -R 0.9 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    myadbquery.absolute_threshold=-1.4;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.radius="0.9";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --absolute-threshold=-0.9 -p 1 -R 0.9 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="1";
+    myadbquery.absolute_threshold=-0.9;
+    myadbquery.relative_threshold=0.0;
+    myadbquery.radius="0.9";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --relative-threshold=0.1 -p 0 -R 1.1 > testoutput
+//echo testfeature 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.relative_threshold=0.1;
+    myadbquery.radius="1.1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -w testquerypower --relative-threshold=0.1 -p 0 -R 0.9 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.power="testquerypower";
+    myadbquery.sequencelength="2";
+    myadbquery.qpoint="0";
+    myadbquery.absolute_threshold=0.0;
+    myadbquery.relative_threshold=0.1;
+    myadbquery.radius="0.9";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+    //returnval=-1;
+    printf("returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0030/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0030/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+single-track sequence radius search with power with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0031/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0031/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,266 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+///intstring 2 > testfeature01
+///floatstring 0 1 >> testfeature01
+///intstring 2 > testfeature10
+///floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+///${AUDIODB} -d testdb -I -f testfeature01
+///${AUDIODB} -d testdb -I -f testfeature10
+
+    myinsert.features="testfeature01";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+    myinsert.features="testfeature10";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+///# sequence queries require L2NORM
+///${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+///echo "query point (0.0,0.5)"
+///intstring 2 > testquery
+///floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+///echo testfeature01 0 0 0 > test-expected-output
+///echo testfeature10 2 0 0 >> test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",2,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K /dev/null > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="/dev/null";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+///echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt > testoutput
+///echo testfeature01 0 0 0 > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+
+///echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt > testoutput
+///echo testfeature10 2 0 0 > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",2,0,0)) {returnval = -1;};
+
+///echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -r 1 > testoutput
+///echo testfeature10 2 0 0 > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",2,0,0)) {returnval = -1;};
+
+///echo "query point (0.5,0.0)"
+///intstring 2 > testquery
+///floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery > testoutput
+///echo testfeature10 0 0 0 > test-expected-output
+///echo testfeature01 2 0 0 >> test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist=NULL;
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature01",2,0,0)) {returnval = -1;};
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K /dev/null > testoutput
+///cat /dev/null > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="/dev/null";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+///echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt > testoutput
+///echo testfeature10 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0,0,0)) {returnval = -1;};
+
+
+///echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt > testoutput
+///echo testfeature01 2 0 0 > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",2,0,0)) {returnval = -1;};
+
+///echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+
+///${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -r 1 > testoutput
+///echo testfeature01 2 0 0 > test-expected-output
+///cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",2,0,0)) {returnval = -1;};
+
+
+
+    //printf("returnval:%d\n",returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0031/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0031/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+0008 with -K restriction with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0032/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0032/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,269 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+
+    /* remove old directory */
+//if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+    /* turn on l2 power */
+//${AUDIODB} -d testdb -L
+    if (audiodb_l2norm(mydbp)) {returnval=-1;};
+
+    /* make feature files */
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+
+    /* insertions */
+    //${AUDIODB} -d testdb -I -f testfeature01
+    //${AUDIODB} -d testdb -I -f testfeature10
+    myinsert.features="testfeature01";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+    myinsert.features="testfeature10";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+    
+
+    /* query */
+    //echo "query point (0.0,0.5)"
+    //intstring 2 > testquery
+    //floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+    /* test a sequence query */
+    //${AUDIODB} -d testdb -Q track -l 1 -f testquery > testoutput
+    //echo testfeature01 0.5 0 0 > test-expected-output
+    //echo testfeature10 0 0 0 >> test-expected-output
+    //cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0.5,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature10",0,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K /dev/null > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="/dev/null";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+
+
+//echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt > testoutput
+//echo testfeature01 0.5 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0.5,0,0)) {returnval = -1;};
+
+
+
+
+//echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt > testoutput
+//echo testfeature10 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0,0,0)) {returnval = -1;};
+
+
+
+//echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt -r 1 > testoutput
+//echo testfeature10 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0,0,0)) {returnval = -1;};
+
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery > testoutput
+//echo testfeature10 0.5 0 0 > test-expected-output
+//echo testfeature01 0 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist=NULL;
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0.5,0,0)) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,1,"testfeature01",0,0,0)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K /dev/null > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="/dev/null";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+//echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt > testoutput
+//echo testfeature10 0.5 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature10",0.5,0,0)) {returnval = -1;};
+
+//echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+
+//echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+//${AUDIODB} -d testdb -Q track -l 1 -f testquery -K testkl.txt -r 1 > testoutput
+//echo testfeature01 0 0 0 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="track";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+
+    size=myadbqueryresult.sizeRlist;
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneresult(&myadbqueryresult,0,"testfeature01",0,0,0)) {returnval = -1;};
+
+
+
+
+//    printf("returnval:%d\n", returnval);
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0032/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0032/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+0009 with -K restriction with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0033/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0033/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,206 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+    /* remove old directory */
+//if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -I -f testfeature01
+//${AUDIODB} -d testdb -I -f testfeature10
+    myinsert.features="testfeature01";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+    myinsert.features="testfeature10";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if (audiodb_l2norm(mydbp)) {returnval=-1;};
+
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=0.5;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
+//audioDB -Q sequence -d testdb -f testquery -R 5 -l 1
+//echo testfeature01 1 > test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature01",1)) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,1,"testfeature10",1)) {returnval = -1;};
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K /dev/null -R 5 > testoutput
+//cat /dev/null > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="/dev/null";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 0) {returnval = -1;};
+
+
+
+//echo testfeature01 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature01");
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature01",1)) {returnval = -1;};
+
+//echo testfeature10 > testkl.txt
+    makekeylistfile("testkl.txt","testfeature10");
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -R 5 > testoutput
+//echo testfeature10 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature10",1)) {returnval = -1;};
+
+//echo testfeature10 > testkl.txt
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -r 1 -R 5 > testoutput
+//echo testfeature10 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature10",1)) {returnval = -1;};
+
+
+//# NB: one might be tempted to insert a test here for having both keys
+//# in the keylist, but in non-database order, and then checking that
+//# the result list is also in that non-database order.  I think that
+//# would be misguided, as the efficient way of dealing with such a
+//# keylist is to advance as-sequentially-as-possible through the
+//# database; it just so happens that our current implementation is not
+//# so smart.
+
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0.5; dvals[1]=0.0;
+    maketestfile("testquery",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
+//echo testfeature01 1 > test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist=NULL;
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    myadbquery.resultlength=NULL;
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 2) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature01",1)) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,1,"testfeature10",1)) {returnval = -1;};
+
+//echo testfeature10 > testkl.txt
+//${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -K testkl.txt -r 1 -R 5 > testoutput
+//echo testfeature10 1 > test-expected-output
+//cmp testoutput test-expected-output
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.keylist="testkl.txt";
+    myadbquery.sequencelength="1";
+    myadbquery.radius="5";
+    myadbquery.resultlength="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    /* check the test values */
+    if (size != 1) {returnval = -1;};
+    if (testoneradiusresult(&myadbqueryresult,0,"testfeature10",1)) {returnval = -1;};
+
+
+    //fprintf(stderr,"returnval:%d\n",returnval); 
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0033/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0033/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+0010 with -K restriction with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0034/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0034/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,183 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_status_t mystatus={0};
+    adb_insert_t ins1[3]={{0},{0},{0}};
+
+
+
+    /* remove old directory */
+//if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+//intstring 2 > testfeature
+//floatstring 1 1 >> testfeature
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=1;
+    maketestfile("testfeature",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature01",ivals,dvals,2);
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    maketestfile("testfeature10",ivals,dvals,2);
+
+//${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:1"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 1) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:1"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 1) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature01
+    myinsert.features="testfeature01";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:2"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 2) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature10
+    myinsert.features="testfeature10";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:3"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 3) { returnval = -1; }
+
+//rm -f testdb
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+//${AUDIODB} -d testdb -I -f testfeature01
+    myinsert.features="testfeature01";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:1"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 1) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature01
+    myinsert.features="testfeature01";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:1"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 1) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature10
+    myinsert.features="testfeature10";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:2"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 2) { returnval = -1; }
+
+//${AUDIODB} -d testdb -I -f testfeature
+    myinsert.features="testfeature";
+    if(audiodb_insert(mydbp,&myinsert)) {returnval = -1; };   
+
+//${AUDIODB} -d testdb -S | grep "num files:3"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 3) { returnval = -1; }
+
+
+
+
+//rm -f testdb
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//echo testfeature > testfeaturelist.txt
+//echo testfeature01 >> testfeaturelist.txt
+//echo testfeature10 >> testfeaturelist.txt
+//${AUDIODB} -B -F testfeaturelist.txt -d testdb
+    ins1[0].features="testfeature";
+    ins1[1].features="testfeature01";
+    ins1[2].features="testfeature10";
+    if(audiodb_batchinsert(mydbp,ins1,3)){
+        returnval=-1;
+    };
+
+//${AUDIODB} -d testdb -S | grep "num files:3"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 3) { returnval = -1; }
+
+
+
+
+//rm -f testdb
+    clean_remove_db(databasename);
+
+    /* create new db */
+//${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+
+//echo testfeature01 > testfeaturelist.txt
+//echo testfeature10 >> testfeaturelist.txt
+//echo testfeature >> testfeaturelist.txt
+//${AUDIODB} -B -F testfeaturelist.txt -d testdb
+    ins1[0].features="testfeature";
+    ins1[1].features="testfeature01";
+    ins1[2].features="testfeature10";
+    if(audiodb_batchinsert(mydbp,ins1,3)){
+        returnval=-1;
+    };
+
+//${AUDIODB} -d testdb -S | grep "num files:3"
+    if(audiodb_status(mydbp,&mystatus)) {returnval = -1; };
+    if(mystatus.numFiles != 3) { returnval = -1; }
+
+
+
+    fprintf(stderr,"returnval:%d\n",returnval); 
+    return(returnval);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0034/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0034/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+key duplicate test with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0035/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0035/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,95 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    int size=0;
+
+
+    /* remove old directory */
+    //if [ -f testdb ]; then rm -f testdb; fi
+    clean_remove_db(databasename);
+
+    /* create new db */
+    //${AUDIODB} -d testdb -N
+    mydbp=audiodb_create(databasename,0,0,0);
+
+//intstring 2 > testfeature1
+//floatstring 0 1 >> testfeature1
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    maketestfile("testfeature1",ivals,dvals,2);
+
+//intstring 2 > testfeature3
+//floatstring 1 0 >> testfeature3
+//floatstring 0 1 >> testfeature3
+//floatstring 1 0 >> testfeature3
+    ivals[0]=2;
+    dvals[0]=1; dvals[1]=0;
+    dvals[2]=0; dvals[3]=1;
+    dvals[4]=1; dvals[5]=0;
+    maketestfile("testfeature3",ivals,dvals,6);
+
+//${AUDIODB} -d testdb -I -f testfeature1
+    myinsert.features="testfeature1";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+//${AUDIODB} -d testdb -I -f testfeature3
+    myinsert.features="testfeature3";
+    if (audiodb_insert(mydbp,&myinsert)){ returnval=-1; } 
+
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+    if(audiodb_l2norm(mydbp)){ returnval=-1; };
+
+//echo "query point (0 1, 1 0)"
+//intstring 2 > testquery
+//floatstring 0 1 >> testquery
+//floatstring 1 0 >> testquery
+    ivals[0]=2;
+    dvals[0]=0; dvals[1]=1;
+    dvals[2]=1; dvals[3]=0;
+    maketestfile("testquery",ivals,dvals,4);
+
+//audioDB -Q sequence -d testdb -f testquery -n 1 -l 2
+//${AUDIODB} -d testdb -Q sequence -l 2 -f testquery -n 1 > testoutput
+    myadbquery.querytype="sequence";
+    myadbquery.feature="testquery";
+    myadbquery.sequencelength="2";
+    myadbquery.numpoints="1";
+    audiodb_query(mydbp,&myadbquery,&myadbqueryresult);
+    size=myadbqueryresult.sizeRlist;
+
+    //dump_query(&myadbquery,&myadbqueryresult);
+
+    /* check the test values */
+////wc -l testoutput | grep "1 testoutput"
+////grep "^testfeature3 .* 0 1$" testoutput
+    if (size != 1) {returnval = -1;};
+    if (strcmp(myadbqueryresult.Rlist[0],"testfeature3")){ returnval = -1; };
+
+    //printf("returnval:%d\n",returnval);  
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0035/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0035/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+-l 2 search with short tracks with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0036/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0036/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+//#! /bin/bash
+//
+//. ../test-utils.sh
+//
+//if [ -f testdb ]; then rm -f testdb; fi
+//
+//${AUDIODB} -d testdb -N
+//
+//intstring 2 > testfeature01
+//floatstring 0 1 >> testfeature01
+//floatstring 1 0 >> testfeature01
+//intstring 2 > testfeature10
+//floatstring 1 0 >> testfeature10
+//floatstring 0 1 >> testfeature10
+//
+//cat > testfeaturefiles <<EOF
+//testfeature01
+//testfeature10
+//EOF
+//
+//${AUDIODB} -d testdb -B -F testfeaturefiles
+//
+//# sequence queries require L2NORM
+//${AUDIODB} -d testdb -L
+//
+//echo "query point (0.0,0.5)"
+//intstring 2 > testquery
+//floatstring 0 0.5 >> testquery
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery > testoutput
+//echo testfeature01 1 > test-expected-output
+//echo 0 0 0 >> test-expected-output
+//echo 2 0 1 >> test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//echo 0 0 1 >> test-expected-output
+//echo 2 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 2 > testoutput
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 5 > testoutput
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature01 0 > test-expected-output
+//echo 0 0 0 >> test-expected-output
+//echo testfeature10 0 >> test-expected-output
+//echo 0 0 1 >> test-expected-output
+//cmp testoutput test-expected-output
+//
+//echo "query point (0.5,0.0)"
+//intstring 2 > testquery
+//floatstring 0.5 0 >> testquery
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery > testoutput
+//echo testfeature01 1 > test-expected-output
+//echo 0 0 1 >> test-expected-output
+//echo 2 0 0 >> test-expected-output
+//echo testfeature10 1 >> test-expected-output
+//echo 0 0 0 >> test-expected-output
+//echo 2 0 1 >> test-expected-output
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 2 > testoutput
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 5 > testoutput
+//cmp testoutput test-expected-output
+//
+//${AUDIODB} -d testdb -Q nsequence -l 1 -f testquery -n 1 > testoutput
+//echo testfeature01 0 > test-expected-output
+//echo 0 0 1 >> test-expected-output
+//echo testfeature10 0 >> test-expected-output
+//echo 0 0 0 >> test-expected-output
+//cmp testoutput test-expected-output
+//
+//exit 104
+
+    returnval=-1;
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0036/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/0036/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+nsequence search with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/9000/Makefile	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS+=-O3 -g
+RM=rm -rf
+
+
+all:	test1
+
+
+test1:	prog1.c 
+	gcc -Wall -o test1 prog1.c -laudioDB_API -L../..
+
+clean:
+	$(RM) test1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/9000/prog1.c	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <sys/stat.h>
+/*
+ *  * #define NDEBUG
+ *   * */
+#include <assert.h>
+
+#include "../../audioDB_API.h"
+#include "../test_utils_lib.h"
+
+
+int main(int argc, char **argv){
+
+    int returnval=0;
+    adb_ptr mydbp={0};
+    int ivals[10];
+    double dvals[10];
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+    char * databasename="testdb";
+    adb_query_t myadbquery={0};
+    adb_queryresult_t myadbqueryresult={0};
+    adb_query_t myadbquery2={0};
+    adb_queryresult_t myadbqueryresult2={0};
+    int size=0;
+
+
+
+
+
+
+
+
+    returnval=-1;
+      
+    return(returnval);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/9000/run-test.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#. ../test-utils.sh
+#
+#if [ -f testdb ]; then rm -f testdb; fi
+#
+## creation
+#${AUDIODB} -N -d testdb
+#
+#stat testdb
+#
+## should fail (testdb exists)
+#expect_clean_error_exit ${AUDIODB} -N -d testdb
+#
+## should fail (no db given)
+#expect_clean_error_exit ${AUDIODB} -N
+#
+#exit 104
+
+LD_LIBRARY_PATH=../..
+export LD_LIBRARY_PATH
+
+. ../test-utils.sh
+
+make clean
+make all
+
+./test1 
+
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+    exit 104
+else
+    exit -1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/9000/short-description	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,1 @@
+dump/restore of testdbs with lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/clean.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+for file in [0-9][0-9][0-9][0-9]*; do
+  if [ -d ${file} ]; then
+    echo Cleaning ${file}
+    rm -f ${file}/test*
+    if [ -f ${file}/clean.sh ]; then
+      (cd ${file} && sh ./clean.sh)
+    fi
+  fi
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/notes	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,3 @@
+test 23 in original: is there a testquery point missing?
+
+ask Christophe about 24: testtimes file has 1 entry too many
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/run-tests.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,50 @@
+#! /bin/bash
+
+AUDIODB=../../${EXECUTABLE:-audioDB}
+export AUDIODB
+
+LD_LIBRARY_PATH=../
+export LD_LIBRARY_PATH
+
+if [ -x ${AUDIODB#../} ]; then 
+  :
+else 
+  echo Cannot execute audioDB: ${AUDIODB#../}
+  exit 1
+fi
+
+if [ "$1" = "--full" ]; then
+  pattern="[0-9][0-9][0-9][0-9]*"
+else
+  pattern="[0-8][0-9][0-9][0-9]*"
+fi
+
+for file in ${pattern}; do
+  if [ -d ${file} ]; then
+    if [ -f ${file}/run-test.sh ]; then
+      echo -n Running test ${file}
+      if [ -f ${file}/short-description ]; then
+        awk '{ printf(" (%s)",$0) }' < ${file}/short-description
+      fi
+      echo -n :
+      (cd ${file} && /bin/bash ./run-test.sh > test.out 2> test.err)
+      EXIT_STATUS=$?
+      if [ ${EXIT_STATUS} -eq 14 ]; then
+        echo " n/a."
+      elif [ ${EXIT_STATUS} -ne 104 ]; then
+        echo " failed (exit status ${EXIT_STATUS})."
+        FAILED=true
+      else
+        echo " success."
+      fi
+    else
+      echo Skipping test ${file}
+    fi
+  fi
+done
+
+if [ -z "${FAILED}" ]; then
+  exit 0
+else
+  exit 1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/test-utils.sh	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,90 @@
+# no shebang line: this file should be sourced by run-test.sh files
+
+set -E
+
+trap "exit 1" ERR
+
+if [ -z "${AUDIODB}" ]; then
+  AUDIODB=../../audioDB
+  #AUDIODB=/Datastore/group/omras2/releases/bin_x86-64_linux/audioDB
+fi
+
+echo "AUDIODB:"
+
+echo ${AUDIODB}
+
+
+
+
+# FIXME: maybe generalize to multiple arguments?  Also, implement it
+# properly, rather than just for a few floats that we know how to
+# encode.  This might involve writing some C code, as Bash doesn't do
+# Floating Point.  (scanf() is probably enough).
+
+expect_clean_error_exit() {
+  trap - ERR
+  "$@"
+  exit_code=$?
+
+  trap "exit 1" ERR
+  if [ $exit_code -eq 0 ]; then
+    exit 1
+  elif [ $exit_code -ge 126 ]; then
+    exit 1
+  fi
+}
+
+floatstring() {
+  for arg in "$@"; do
+    case ${arg} in
+      0)
+        printf "\x00\x00\x00\x00\x00\x00\x00\x00";;
+      -0.5)
+        printf "\x00\x00\x00\x00\x00\x00\xe0\xbf";;
+      0.5)
+        printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";;
+      -1)
+        printf "\x00\x00\x00\x00\x00\x00\xf0\xbf";;
+      1)
+        printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";;
+      *)
+        echo "bad arg to floatstring(): ${arg}"
+        exit 1;;
+    esac
+  done
+}
+
+# FIXME: likewise.  And endianness issues (which are a reflection of
+# the endianness of audioDB as of 2007-09-18, unfortunately).
+
+intstring() {
+  # works up to 9 for now
+  if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi
+  printf "%b\x00\x00\x00" "\\x${1}"
+}
+
+# Web services utilities
+start_server() {
+  $1 -s $2 &
+  # HACK: deal with race on process creation
+  sleep 1
+  trap 'kill $!; exit 1' ERR
+}
+
+stop_server() {
+  grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
+  kill $1
+  # HACK: deal with race on process exit
+  sleep 1
+  expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline
+}
+
+check_server() {
+  grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
+}
+
+expect_client_failure() {
+  # FIXME: work out whether and how the client should report server
+  # errors.  At present, the client exits with a zero exit code.
+  "$@"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtests/test_utils_lib.h	Wed Nov 12 10:21:06 2008 +0000
@@ -0,0 +1,222 @@
+void delete_dir(char * dirname);
+void clean_remove_db(char * dirname);
+void test_status(adb_ptr d, adb_status_ptr b);
+unsigned int test_insert( adb_ptr d, char * features, char * power, char * key);
+void dump_query(adb_query_ptr adbq, adb_queryresult_ptr myadbqueryresult);
+int testoneresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist,double Qpos,double Spos);
+double doubleabs(double foo);
+void maketestfile(char * filename, int * ivals, double * dvals, int dvalsize);
+int testoneradiusresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist);
+void makekeylistfile(char * filename, char * item);
+
+
+
+
+/* clean remove */
+void clean_remove_db(char * dbname){
+
+    FILE* db=0;
+
+    db=fopen(dbname,"r");
+
+    if (!db){
+        return;
+    }
+
+
+    fclose(db);
+    remove(dbname);
+
+    return;
+
+}
+
+
+/* delete directory */
+void delete_dir(char * dirname){
+
+    struct dirent *d;
+    DIR *dir;
+    char buf[256];
+
+    printf("Deleting directory '%s' and all files\n", dirname);
+    dir = opendir(dirname);
+
+    if (dir){
+        while((d = readdir(dir))) {
+            //printf("Deleting %s in %s\n",d->d_name, dirname);
+            sprintf(buf, "%s/%s", dirname, d->d_name);
+            remove(buf);
+        }
+    }
+    closedir(dir);
+
+    rmdir(dirname);
+
+
+    return;
+
+}
+
+
+unsigned int test_insert(
+    adb_ptr d,
+    char * features,
+    char * power,
+    char * key
+){
+
+    adb_insert_t myinsert={0};
+    unsigned int myerr=0;
+
+    printf("Insert:\n");
+    myinsert.features=features;
+    myinsert.power=power; 
+    myinsert.key=key; 
+    myerr=audiodb_insert(d,&myinsert); 
+    printf("\n");
+
+    return myerr;
+
+}
+
+void test_status(adb_ptr d, adb_status_ptr b){
+
+    /* get the status of the database */
+    audiodb_status(d,b);
+
+    /* could probably make this look a bit more clever, but it works for now */
+    printf("numFiles:\t%d\n",b->numFiles);
+    printf("dim:\t%d\n",b->dim);
+    printf("length:\t%d\n",b->length);
+    printf("dudCount:\t%d\n",b->dudCount);
+    printf("nullCount:\t%d\n",b->nullCount);
+    printf("flags:\t%d\n",b->flags);
+
+    return;
+}
+
+
+void dump_query(adb_query_ptr adbq, adb_queryresult_ptr myadbqueryresult){
+
+    int size=0;
+    int i=0;
+
+    size=myadbqueryresult->sizeRlist;
+
+    printf("Dumping query:\n");
+    for(i=0; i<size; i++){
+        printf("\t'%s' query: Result %02d:%s is dist:%f qpos:%d spos:%d\n",
+                adbq->querytype,
+                i,
+                myadbqueryresult->Rlist[i],
+                myadbqueryresult->Dist[i],
+                myadbqueryresult->Qpos[i],
+                myadbqueryresult->Spos[i]
+              );
+    }
+    printf("\n");
+
+}
+
+
+
+int testoneresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist,double Qpos,double Spos){
+
+    int ret=0;
+    double tolerance=.0001;
+
+
+    
+    if (strcmp(Rlist,myadbqueryresult->Rlist[i])){
+        ret=-1;
+    } 
+
+
+    if (doubleabs((double)Dist - (double)myadbqueryresult->Dist[i]) > tolerance){
+        ret=-1;
+    } 
+    
+    if (doubleabs((double)Qpos - (double)myadbqueryresult->Qpos[i]) > tolerance){
+        ret=-1;
+    } 
+
+    if (doubleabs((double)Spos - (double)myadbqueryresult->Spos[i]) > tolerance){
+        ret=-1;
+    } 
+
+    return ret;
+}
+
+
+int testoneradiusresult(adb_queryresult_ptr myadbqueryresult, int i, char * Rlist, double Dist){
+
+    int ret=0;
+    double tolerance=.0001;
+
+
+    
+    if (strcmp(Rlist,myadbqueryresult->Rlist[i])){
+        ret=-1;
+    } 
+
+
+    if (doubleabs((double)Dist - (double)myadbqueryresult->Dist[i]) > tolerance){
+        ret=-1;
+    } 
+    
+    //if (doubleabs((double)Qpos - (double)myadbqueryresult->Qpos[i]) > tolerance){
+    //    ret=-1;
+    //} 
+
+    //if (doubleabs((double)Spos - (double)myadbqueryresult->Spos[i]) > tolerance){
+    //    ret=-1;
+    //} 
+
+    return ret;
+}
+
+
+double doubleabs(double foo){
+
+    double retval=foo;
+
+    if (foo < 0.0) {
+        retval=foo * -1.0;
+    }
+
+    return retval;
+}
+
+
+
+void maketestfile(char * filename, int * ivals, double * dvals, int dvalsize) {
+
+    FILE * myfile;
+
+    myfile=fopen(filename,"w");
+    fwrite(ivals,sizeof(int),1,myfile);
+    fwrite(dvals,sizeof(double),dvalsize,myfile);
+    fflush(myfile);
+    fclose(myfile);
+
+    /* should probably test for success, but then it is a test suite already... */
+}
+
+
+
+void makekeylistfile(char * filename, char * item){
+
+    FILE * myfile;
+
+    myfile=fopen(filename,"w");
+    fprintf(myfile,"%s\n",item);
+   fflush(myfile);
+    fclose(myfile);
+
+}
+
+
+
+
+