diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp index c2316b236a8841b98efe9b6db49e368ec454d371..386cb339448abc253910410d3d16a8e4d92d4bc2 100644 --- a/src/closestBed/closestBed.cpp +++ b/src/closestBed/closestBed.cpp @@ -110,7 +110,7 @@ void BedClosest::FindWindowOverlaps(BED &a, vector<BED> &hits) { } // the hit is to the "left" of A else if (h->end <= a.start) { - curDistance = a.start - h->end; + curDistance = (a.start - h->end) + 1; if (_signDistance) { if ((_strandedDistMode == "ref") || (_strandedDistMode == "a" && a.strand != "-") @@ -146,7 +146,7 @@ void BedClosest::FindWindowOverlaps(BED &a, vector<BED> &hits) { } // the hit is to the "right" of A else if (h->start >= a.end) { - curDistance = h->start - a.end; + curDistance = (h->start - a.end) + 1; if (_signDistance) { if ((_strandedDistMode == "a" && a.strand == "-") || (_strandedDistMode == "b" && h->strand != "-")) { diff --git a/test/closest/a.bed b/test/closest/a.bed new file mode 100644 index 0000000000000000000000000000000000000000..d6c80bc6d33f8a72df31745e36b65f8364603dbb --- /dev/null +++ b/test/closest/a.bed @@ -0,0 +1 @@ +chr1 10 20 diff --git a/test/closest/b-one-bp-closer.bed b/test/closest/b-one-bp-closer.bed new file mode 100644 index 0000000000000000000000000000000000000000..e14af6d68084cc6afe09ee8131dca1506a96faee --- /dev/null +++ b/test/closest/b-one-bp-closer.bed @@ -0,0 +1 @@ +chr1 19 21 diff --git a/test/closest/b.bed b/test/closest/b.bed new file mode 100644 index 0000000000000000000000000000000000000000..9853a2644630b3126929a240574919b20b26a95f --- /dev/null +++ b/test/closest/b.bed @@ -0,0 +1 @@ +chr1 20 21 diff --git a/test/closest/test-closest.sh b/test/closest/test-closest.sh new file mode 100644 index 0000000000000000000000000000000000000000..a621e097bff0ded92dade6c794d28e71a8a4f0cb --- /dev/null +++ b/test/closest/test-closest.sh @@ -0,0 +1,61 @@ +BT=../../bin/bedtools + +check() +{ + if diff $1 $2; then + echo ok + return 1 + else + echo fail + return 0 + fi +} + +# cat a.bed +# chr1 20 21 + +# cat b.bed +# chr1 20 21 + +# cat b-one-bp-closer.bed +# chr1 19 21 + +########################################################### +# test 1bp apart; checking for off-by-one errors +########################################################### +echo " closest.t1...\c" +echo \ +"chr1 10 20 chr1 20 21 1" > exp +$BT closest -a a.bed -b b.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test reciprocal of t1 +########################################################### +echo " closest.t2...\c" +echo \ +"chr1 20 21 chr1 10 20 1" > exp +$BT closest -a b.bed -b a.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test 0bp apart; checking for off-by-one errors +########################################################### +echo " closest.t3...\c" +echo \ +"chr1 10 20 chr1 19 21 0" > exp +$BT closest -a a.bed -b b-one-bp-closer.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test reciprocal of t3 +########################################################### +echo " closest.t4...\c" +echo \ +"chr1 19 21 chr1 10 20 0" > exp +$BT closest -a b-one-bp-closer.bed -b a.bed -d > obs +check obs exp +rm obs exp diff --git a/test/test.sh b/test/test.sh index 042896f5f70cb48945f7dc27e3f5dbb9f0af33e1..5c8df4547b84631f47ec6aa2684922e39d0c6276 100644 --- a/test/test.sh +++ b/test/test.sh @@ -7,6 +7,9 @@ cd bed12tobed6; sh test-bed12tobed6.sh; cd .. echo " Testing bedtools bamtobed:" cd bamtobed; sh test-bamtobed.sh; cd .. +echo " Testing bedtools closest:" +cd closest; sh test-closest.sh; cd .. + echo " Testing bedtools cluster:" cd cluster; sh test-cluster.sh; cd ..