Mercurial > repos > youngkim > ezbamqc
diff ezBAMQC/src/htslib/test/fieldarith.c @ 0:dfa3745e5fd8
Uploaded
author | youngkim |
---|---|
date | Thu, 24 Mar 2016 17:12:52 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ezBAMQC/src/htslib/test/fieldarith.c Thu Mar 24 17:12:52 2016 -0400 @@ -0,0 +1,72 @@ +/* test/fieldarith.c -- CIGAR field arithmetic test suite. + + Copyright (C) 2013 Genome Research Ltd. + + Author: John Marshall <jm18@sanger.ac.uk> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include <stdio.h> + +#include "htslib/sam.h" + +int ntests = 0; +int nfailures = 0; + +void check(const bam1_t *aln, const char *testname, const char *tag, int value) +{ + int32_t refvalue; + uint8_t *aux = bam_aux_get(aln, tag); + if (!aux) return; + ntests++; + refvalue = bam_aux2i(aux); + if (value != refvalue) { + fprintf(stderr, "%s FAIL for %s: computed %d != %d expected\n", + testname, bam_get_qname(aln), value, refvalue); + nfailures++; + } +} + +int main(int argc, char **argv) +{ + bam_hdr_t *header; + bam1_t *aln = bam_init1(); + int i; + + for (i = 1; i < argc; i++) { + samFile *in = sam_open(argv[i], "r"); + if (in == NULL) { perror(argv[1]); return 1; } + + header = sam_hdr_read(in); + while (sam_read1(in, header, aln) >= 0) { + check(aln, "cigar2qlen", "XQ", + bam_cigar2qlen(aln->core.n_cigar, bam_get_cigar(aln))); + check(aln, "cigar2rlen", "XR", + bam_cigar2rlen(aln->core.n_cigar, bam_get_cigar(aln))); + check(aln, "endpos", "XE", bam_endpos(aln)); + } + + bam_hdr_destroy(header); + sam_close(in); + } + + bam_destroy1(aln); + + return (nfailures > 0); +}