5da4fcae9d1a4302be00521ce479dcf678f6f08c
angie
  Fri Mar 11 15:34:09 2011 -0800
Feature #2820 (tabix), #2821 (VCF parser): added basic test cases for VCF andtabix -- thanks Mark for the prod.

diff --git src/lib/tests/tabixFetch.c src/lib/tests/tabixFetch.c
index 135f31e..50f3b05 100644
--- src/lib/tests/tabixFetch.c
+++ src/lib/tests/tabixFetch.c
@@ -1,114 +1,114 @@
 /* tabixFetch - Test lineFileOnTabix and lineFileSetTabixRegion (compare with cmd line tabix output). */
 #include "common.h"
 #include "linefile.h"
 #include "options.h"
 
 #ifdef USE_TABIX
 
 #include "sqlNum.h"
 #include "udc.h"
 #include "knetUdc.h"
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
 
   "tabixFetch - Test lineFileOnTabix and lineFileSetTabixRegion (compare\n"
   "             with command-line tabix output)\n"
 
   "usage:\n"
   "   tabixFetch fileOrUrl chrom:start-end\n"
   "Fetch lines from the specified position range from a line-based file\n"
   "with genomic positions that has been compressed and indexed by tabix.\n"
   "This duplicates the fetching functionality of the tabix program -- it\n"
   "was written solely to test lib/lineFile.c's tabix-wrapper mode.\n"
   );
 }
 
 static struct optionSpec options[] = {
    {NULL, 0},
 };
 
 #define BAD_POS_FORMAT "Expecting position format: chrom:N-M where N and M are integers.  " \
 		       "\"%s\" doesn't match."
 static void parsePosition(const char *position, char **retChrom, int *retStart, int *retEnd)
 /* Do we have a lib routine for this somewhere?  Too lazy to look. */
 {
 char *posDupe = cloneString(position);
 char *words[3];
 int wordCount = chopByChar(posDupe, ':', words, ArraySize(words));
 if (wordCount != 2)
     errAbort(BAD_POS_FORMAT, position);
 *retChrom = posDupe;
 
 stripChar(words[1], ',');
 char *range = cloneString(words[1]);
 wordCount = chopByChar(range, '-', words, ArraySize(words));
 if (wordCount != 2)
     errAbort(BAD_POS_FORMAT, position);
-*retStart = sqlUnsigned(words[0]);
+*retStart = sqlUnsigned(words[0]) - 1;
 *retEnd = sqlUnsigned(words[1]);
 }
 
 void tabixFetch(char *fileOrUrl, char *position)
 /* tabixFetch - Test lineFileOnTabix and lineFileSetTabixRegion
  * (compare with cmd line tabix output). */
 {
 udcSetDefaultDir("/data/tmp/angie/udcCache");
 knetUdcInstall();
 struct lineFile *lf = lineFileOnTabix(fileOrUrl, TRUE);
 if (lf == NULL)
     exit(1);
 int lineSize;
 char *line = NULL;
 boolean gotLine = FALSE;
 if (0)
 do
     {
     gotLine = lineFileNext(lf, &line, &lineSize);
     puts(line);
     }
 while (gotLine && (line[0] == '#' || isEmpty(line)));
 
 char *chrom = NULL;
 int start, end;
 parsePosition(position, &chrom, &start, &end);
 boolean success = lineFileSetTabixRegion(lf, chrom, start, end);
 if (!success)
     printf("*** Could not set position to %s\n", position);
 else
     {
     printf("*** First (up to) 10 lines from query on %s:\n", position);
     int i;
     for (i=0;  i < 10;  i++)
 	{
 	if (lineFileNext(lf, &line, &lineSize))
 	    puts(line);
 	else break;
 	}
     if (i == 0)
 	printf("*** No lines returned from query on %s\n", position);
     }
 lineFileClose(&lf);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 3)
     usage();
 tabixFetch(argv[1], argv[2]);
 return 0;
 }
 
 #else // no USE_TABIX
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 errAbort(COMPILE_WITH_TABIX, "tabixFetch");
 return 1;
 }
 
 #endif // no USE_TABIX