1set -e;
2BT=${BT-../../bin/bedtools}
3
4FAILURES=0;
5
6check()
7{
8	if diff $1 $2; then
9    	echo ok
10	else
11    	FAILURES=$(expr $FAILURES + 1);
12		echo fail
13	fi
14}
15
16# cat a.bed
17# chr1	20	21
18
19# cat b.bed
20# chr1	20	21
21
22# cat b-one-bp-closer.bed
23# chr1	19	21
24
25###########################################################
26# test 1bp apart; checking for off-by-one errors
27###########################################################
28echo -e "    closest.t1...\c"
29echo \
30"chr1	10	20	chr1	20	21	1" > exp
31$BT closest -a a.bed -b b.bed -d > obs
32check obs exp
33rm obs exp
34
35###########################################################
36# test reciprocal of t1
37###########################################################
38echo -e "    closest.t2...\c"
39echo \
40"chr1	20	21	chr1	10	20	1" > exp
41$BT closest -a b.bed -b a.bed -d > obs
42check obs exp
43rm obs exp
44
45###########################################################
46# test 0bp apart; checking for off-by-one errors
47###########################################################
48echo -e "    closest.t3...\c"
49echo \
50"chr1	10	20	chr1	19	21	0" > exp
51$BT closest -a a.bed -b b-one-bp-closer.bed -d > obs
52check obs exp
53rm obs exp
54
55###########################################################
56# test reciprocal of t3
57###########################################################
58echo -e "    closest.t4...\c"
59echo \
60"chr1	19	21	chr1	10	20	0" > exp
61$BT closest -a b-one-bp-closer.bed -b a.bed -d > obs
62check obs exp
63rm obs exp
64
65###########################################################
66# test closest without forcing different names ( -N )
67###########################################################
68echo -e "    closest.t5...\c"
69echo \
70"chr1	10	20	break1	chr1	40	50	break1	21
71chr1	55	58	break2	chr1	60	70	break2	3" > exp
72$BT closest -a a.names.bed -b b.names.bed -d > obs
73check obs exp
74rm obs exp
75
76###########################################################
77# test closest with forcing different names ( -N )
78###########################################################
79echo -e "    closest.t6...\c"
80echo \
81"chr1	10	20	break1	chr1	60	70	break2	41
82chr1	55	58	break2	chr1	40	50	break1	6" > exp
83$BT closest -a a.names.bed -b b.names.bed -d -N > obs
84check obs exp
85rm obs exp
86
87###########################################################
88# test closest forcing -s yet no matching strands on chrom
89###########################################################
90echo -e "    closest.t7...\c"
91echo \
92"chr1	100	200	a	10	+	.	-1	-1	.	-1	." > exp
93$BT closest -a strand-test-a.bed -b strand-test-b.bed -s > obs
94check obs exp
95rm obs exp
96
97###########################################################
98# test closest forcing -S with only an opp strands on chrom
99###########################################################
100echo -e "    closest.t8...\c"
101echo \
102"chr1	100	200	a	10	+	chr1	90	120	b	1	-" > exp
103$BT closest -a strand-test-a.bed -b strand-test-b.bed -S > obs
104check obs exp
105rm obs exp
106
107
108###########################################################
109# test reproting of all overlapping features
110###########################################################
111echo -e "    closest.t9...\c"
112echo \
113"chr1	100	101	chr1	100	101
114chr1	200	201	chr1	150	201
115chr1	200	201	chr1	175	375
116chr1	300	301	chr1	175	375
117chr1	100000	100010	chr1	175	375
118chr1	100020	100040	chr1	175	375
119chr2	1	10	.	-1	-1
120chr2	20	30	.	-1	-1" > exp
121$BT closest -a close-a.bed -b close-b.bed > obs
122check obs exp
123rm obs exp
124
125###########################################################
126# test reproting of first overlapping feature
127###########################################################
128echo -e "    closest.t10...\c"
129echo \
130"chr1	100	101	chr1	100	101
131chr1	200	201	chr1	150	201
132chr1	300	301	chr1	175	375
133chr1	100000	100010	chr1	175	375
134chr1	100020	100040	chr1	175	375
135chr2	1	10	.	-1	-1
136chr2	20	30	.	-1	-1" > exp
137$BT closest -a close-a.bed -b close-b.bed -t first > obs
138check obs exp
139rm obs exp
140
141###########################################################
142# test reproting of last overlapping feature
143###########################################################
144echo -e "    closest.t11...\c"
145echo \
146"chr1	100	101	chr1	100	101
147chr1	200	201	chr1	175	375
148chr1	300	301	chr1	175	375
149chr1	100000	100010	chr1	175	375
150chr1	100020	100040	chr1	175	375
151chr2	1	10	.	-1	-1
152chr2	20	30	.	-1	-1" > exp
153$BT closest -a close-a.bed -b close-b.bed -t last > obs
154check obs exp
155rm obs exp
156
157
158
159###########################################################
160#
161# TEST MULTIPLE DATABASES
162#
163###########################################################
164
165
166###########################################################
167# test 3 dbs, -each mode, which is the default
168###########################################################
169echo -e "    closest.t13...\c"
170echo \
171"chr1	80	100	q1	1	+	1	chr1	20	60	d1.2	2	-
172chr1	80	100	q1	1	+	2	chr1	120	170	db2.2	2	-
173chr1	80	100	q1	1	+	3	chr1	70	90	d3.1	3	-" > exp
174$BT closest -a mq1.bed -b mdb1.bed mdb2.bed mdb3.bed > obs
175check obs exp
176rm obs exp
177
178
179###########################################################
180# test 3 dbs with -names option
181###########################################################
182echo -e "    closest.t14...\c"
183echo \
184"chr1	80	100	q1	1	+	a	chr1	20	60	d1.2	2	-
185chr1	80	100	q1	1	+	b	chr1	120	170	db2.2	2	-
186chr1	80	100	q1	1	+	c	chr1	70	90	d3.1	3	-" > exp
187$BT closest -a mq1.bed -b mdb1.bed mdb2.bed mdb3.bed -names a b c > obs
188check obs exp
189rm obs exp
190
191
192###########################################################
193# test 3 dbs with -filenames option
194###########################################################
195echo -e "    closest.t15...\c"
196echo \
197"chr1	80	100	q1	1	+	mdb1.bed	chr1	20	60	d1.2	2	-
198chr1	80	100	q1	1	+	mdb2.bed	chr1	120	170	db2.2	2	-
199chr1	80	100	q1	1	+	mdb3.bed	chr1	70	90	d3.1	3	-" > exp
200$BT closest -a mq1.bed -b mdb1.bed mdb2.bed mdb3.bed -filenames > obs
201check obs exp
202rm obs exp
203
204###########################################################
205# test 3 dbs, -all mode
206###########################################################
207echo -e "    closest.t16...\c"
208echo \
209"chr1	80	100	q1	1	+	3	chr1	70	90	d3.1	3	-" > exp
210$BT closest -a mq1.bed -b mdb1.bed mdb2.bed mdb3.bed -mdb all > obs
211check obs exp
212rm obs exp
213
214
215###########################################################
216# test 2 dbs, tie mode = all
217###########################################################
218echo -e "    closest.t17...\c"
219echo \
220"chr1	80	100	q1	1	+	1	chr1	20	60	d1.2	2	-
221chr1	80	100	q1	1	+	2	chr1	120	170	db2.2	2	-" > exp
222$BT closest -a mq1.bed -b mdb1.bed mdb2.bed -t all > obs
223check obs exp
224rm obs exp
225
226###########################################################
227# test 2 dbs, tie mode = first
228###########################################################
229echo -e "    closest.t18...\c"
230echo \
231"chr1	80	100	q1	1	+	1	chr1	20	60	d1.2	2	-" > exp
232$BT closest -a mq1.bed -b mdb1.bed mdb2.bed -mdb all -t first > obs
233check obs exp
234rm obs exp
235
236###########################################################
237# test 2 dbs, tie mode = last
238###########################################################
239echo -e "    closest.t19...\c"
240echo \
241"chr1	80	100	q1	1	+	2	chr1	120	170	db2.2	2	-" > exp
242$BT closest -a mq1.bed -b mdb1.bed mdb2.bed -mdb all -t last > obs
243check obs exp
244rm obs exp
245
246###########################################################
247# test same strand
248###########################################################
249echo -e "    closest.t20...\c"
250echo \
251"chr1	80	100	q1	1	+	chr1	5	15	d1.1	1	+" > exp
252$BT closest -a mq1.bed -b mdb1.bed -s> obs
253check obs exp
254rm obs exp
255
256###########################################################
257# test diff strand
258###########################################################
259echo -e "    closest.t21...\c"
260echo \
261"chr1	80	100	q1	1	+	chr1	20	60	d1.2	2	-" > exp
262$BT closest -a mq1.bed -b mdb1.bed -S> obs
263check obs exp
264rm obs exp
265
266
267###########################################################
268# test 2 dbs, tie mode = all, same strand
269###########################################################
270echo -e "    closest.t22...\c"
271echo \
272"chr1	80	100	q1	1	+	1	chr1	5	15	d1.1	1	+" > exp
273$BT closest -a mq1.bed -b mdb1.bed mdb2.bed -t all -mdb all -s > obs
274check obs exp
275rm obs exp
276
277
278###########################################################
279# test 2 dbs, tie mode = all, diff strand
280###########################################################
281echo -e "    closest.t23...\c"
282echo \
283"chr1	80	100	q1	1	+	1	chr1	20	60	d1.2	2	-
284chr1	80	100	q1	1	+	2	chr1	120	170	db2.2	2	-" > exp
285$BT closest -a mq1.bed -b mdb1.bed mdb2.bed -t all -mdb all -S > obs
286check obs exp
287rm obs exp
288
289
290
291
292
293
294###########################################################
295#
296# TEST -D OPTION
297#
298###########################################################
299
300
301###########################################################
302# hit on left, forward query, forward hit, ref mode
303###########################################################
304echo -e "    closest.t24...\c"
305echo \
306"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1F.1	10	+	-21" > exp
307$BT closest -a d_q1.bed -b d_d1F.bed -D ref > obs
308check obs exp
309rm obs exp
310
311
312###########################################################
313# hit on left, forward query, forward hit, a mode
314###########################################################
315echo -e "    closest.t25...\c"
316echo \
317"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1F.1	10	+	-21" > exp
318$BT closest -a d_q1.bed -b d_d1F.bed -D a > obs
319check obs exp
320rm obs exp
321
322###########################################################
323# hit on left, forward query, forward hit, b mode
324###########################################################
325echo -e "    closest.t26...\c"
326echo \
327"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1F.1	10	+	21" > exp
328$BT closest -a d_q1.bed -b d_d1F.bed -D b > obs
329check obs exp
330rm obs exp
331
332###########################################################
333# hit on left, forward query, reverse hit, ref mode
334###########################################################
335echo -e "    closest.t27...\c"
336echo \
337"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1R.1	10	-	-21" > exp
338$BT closest -a d_q1.bed -b d_d1R.bed -D ref > obs
339check obs exp
340rm obs exp
341
342
343###########################################################
344# hit on left, forward query, reverse hit, a mode
345###########################################################
346echo -e "    closest.t28...\c"
347echo \
348"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1R.1	10	-	-21" > exp
349$BT closest -a d_q1.bed -b d_d1R.bed -D a > obs
350check obs exp
351rm obs exp
352
353###########################################################
354# hit on left, forward query, reverse hit, b mode
355###########################################################
356echo -e "    closest.t29...\c"
357echo \
358"chr1	80	100	d_q1.1	5	+	chr1	40	60	d1R.1	10	-	-21" > exp
359$BT closest -a d_q1.bed -b d_d1R.bed -D b > obs
360check obs exp
361rm obs exp
362
363###########################################################
364# hit on left, reverse query, forward hit, ref mode
365###########################################################
366echo -e "    closest.t30...\c"
367echo \
368"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1F.1	10	+	-21" > exp
369$BT closest -a d_q2.bed -b d_d1F.bed -D ref > obs
370check obs exp
371rm obs exp
372
373###########################################################
374# hit on left, reverse query, forward hit, a mode
375###########################################################
376echo -e "    closest.t31...\c"
377echo \
378"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1F.1	10	+	21" > exp
379$BT closest -a d_q2.bed -b d_d1F.bed -D a > obs
380check obs exp
381rm obs exp
382
383
384###########################################################
385# hit on left, reverse query, forward hit, b mode
386###########################################################
387echo -e "    closest.t32...\c"
388echo \
389"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1F.1	10	+	21" > exp
390$BT closest -a d_q2.bed -b d_d1F.bed -D b > obs
391check obs exp
392rm obs exp
393
394
395
396
397###########################################################
398# hit on left, reverse query, reverse hit, ref mode
399###########################################################
400echo -e "    closest.t33...\c"
401echo \
402"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1R.1	10	-	-21" > exp
403$BT closest -a d_q2.bed -b d_d1R.bed -D ref > obs
404check obs exp
405rm obs exp
406
407###########################################################
408# hit on left, reverse query, reverse hit, a mode
409###########################################################
410echo -e "    closest.t34...\c"
411echo \
412"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1R.1	10	-	21" > exp
413$BT closest -a d_q2.bed -b d_d1R.bed -D a > obs
414check obs exp
415rm obs exp
416
417
418###########################################################
419# hit on left, reverse query, reverse hit, b mode
420###########################################################
421echo -e "    closest.t35...\c"
422echo \
423"chr1	80	100	d_q2.1	5	-	chr1	40	60	d1R.1	10	-	-21" > exp
424$BT closest -a d_q2.bed -b d_d1R.bed -D b > obs
425check obs exp
426rm obs exp
427
428
429
430###########################################################
431# hit on right, forward query, forward hit, ref mode
432###########################################################
433echo -e "    closest.t36...\c"
434echo \
435"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2F.1	10	+	41" > exp
436$BT closest -a d_q1.bed -b d_d2F.bed -D ref > obs
437check obs exp
438rm obs exp
439
440###########################################################
441# hit on right, forward query, forward hit, a mode
442###########################################################
443echo -e "    closest.t37...\c"
444echo \
445"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2F.1	10	+	41" > exp
446$BT closest -a d_q1.bed -b d_d2F.bed -D a > obs
447check obs exp
448rm obs exp
449
450###########################################################
451# hit on right, forward query, forward hit, b mode
452###########################################################
453echo -e "    closest.t38...\c"
454echo \
455"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2F.1	10	+	-41" > exp
456$BT closest -a d_q1.bed -b d_d2F.bed -D b > obs
457check obs exp
458rm obs exp
459
460
461###########################################################
462# hit on right, forward query, reverse hit, ref mode
463###########################################################
464echo -e "    closest.t39...\c"
465echo \
466"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2R.1	10	-	41" > exp
467$BT closest -a d_q1.bed -b d_d2R.bed -D ref > obs
468check obs exp
469rm obs exp
470
471###########################################################
472# hit on right, forward query, reverse hit, a mode
473###########################################################
474echo -e "    closest.t40...\c"
475echo \
476"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2R.1	10	-	41" > exp
477$BT closest -a d_q1.bed -b d_d2R.bed -D a > obs
478check obs exp
479rm obs exp
480
481###########################################################
482# hit on right, forward query, reverse hit, b mode
483###########################################################
484echo -e "    closest.t41...\c"
485echo \
486"chr1	80	100	d_q1.1	5	+	chr1	140	160	d2R.1	10	-	41" > exp
487$BT closest -a d_q1.bed -b d_d2R.bed -D b > obs
488check obs exp
489rm obs exp
490
491###########################################################
492# hit on right, reverse query, forward hit, ref mode
493###########################################################
494echo -e "    closest.t42...\c"
495echo \
496"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2F.1	10	+	41" > exp
497$BT closest -a d_q2.bed -b d_d2F.bed -D ref > obs
498check obs exp
499rm obs exp
500
501###########################################################
502# hit on right, reverse query, forward hit, a mode
503###########################################################
504echo -e "    closest.t43...\c"
505echo \
506"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2F.1	10	+	-41" > exp
507$BT closest -a d_q2.bed -b d_d2F.bed -D a > obs
508check obs exp
509rm obs exp
510
511###########################################################
512# hit on right, reverse query, forward hit, b mode
513###########################################################
514echo -e "    closest.t44...\c"
515echo \
516"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2F.1	10	+	-41" > exp
517$BT closest -a d_q2.bed -b d_d2F.bed -D b > obs
518check obs exp
519rm obs exp
520
521###########################################################
522# hit on right, reverse query, reverse hit, ref mode
523###########################################################
524echo -e "    closest.t45...\c"
525echo \
526"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2R.1	10	-	41" > exp
527$BT closest -a d_q2.bed -b d_d2R.bed -D ref > obs
528check obs exp
529rm obs exp
530
531###########################################################
532# hit on right, reverse query, reverse hit, a mode
533###########################################################
534echo -e "    closest.t46...\c"
535echo \
536"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2R.1	10	-	-41" > exp
537$BT closest -a d_q2.bed -b d_d2R.bed -D a > obs
538check obs exp
539rm obs exp
540
541###########################################################
542# hit on right, reverse query, reverse hit, b mode
543###########################################################
544echo -e "    closest.t47...\c"
545echo \
546"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2R.1	10	-	41" > exp
547$BT closest -a d_q2.bed -b d_d2R.bed -D b > obs
548check obs exp
549rm obs exp
550
551############################################################
552# Make sure non-overlapping ties are reported
553############################################################
554echo -e "    closest.t48...\c"
555echo \
556"chr1	10	20	a1	1	-	chr1	8	9	b1	1	+
557chr1	10	20	a1	1	-	chr1	21	22	b2	1	-" > exp
558$BT closest -a a2.bed -b b2.bed > obs
559check obs exp
560rm obs exp
561
562############################################################
563# Make sure non-overlapping ties are reported, but with -s
564############################################################
565echo -e "    closest.t49...\c"
566echo \
567"chr1	10	20	a1	1	-	chr1	21	22	b2	1	-" > exp
568$BT closest -a a2.bed -b b2.bed -s > obs
569check obs exp
570rm obs exp
571
572############################################################
573# Make sure non-overlapping ties are reported, but with -S
574############################################################
575echo -e "    closest.t50...\c"
576echo \
577"chr1	10	20	a1	1	-	chr1	8	9	b1	1	+" > exp
578$BT closest -a a2.bed -b b2.bed -S > obs
579check obs exp
580rm obs exp
581
582
583echo -e "    closest.t51...\c"
584echo \
585"chr1	80	100	d_q2.1	5	-	chr1	140	160	d2R.1	10	-	41" > exp
586$BT closest -a d_q2.bed -b d_d2R.bed -D b > obs
587check obs exp
588rm obs exp
589
590
591###########################################################
592# see that stranded sweep doesn't prematurely purge
593# records from the cache
594###########################################################
595echo -e "    closest.t52...\c"
596echo \
597"chr1	80	100	c1	20	+	chr1	50	60	d2	20	+
598chr1	110	130	c2	20	-	chr1	20	40	d1	20	-" > exp
599$BT closest -a strand-test-c.bed -b strand-test-d.bed -s > obs
600check obs exp
601rm obs exp
602
603###########################################################
604# check oppostite stranded sweep
605###########################################################
606echo -e "    closest.t53...\c"
607echo \
608"chr1	80	100	c1	20	+	chr1	20	40	d1	20	-
609chr1	110	130	c2	20	-	chr1	50	60	d2	20	+" > exp
610$BT closest -a strand-test-c.bed -b strand-test-d.bed -S > obs
611check exp obs
612rm obs exp
613
614
615###########################################################
616# check -iu
617###########################################################
618echo -e "    closest.t54...\c"
619echo \
620"chr1	100	120	chr1	200	210	81" > exp
621$BT closest -a d.bed -b d_iu.bed -D ref -iu > obs
622check exp obs
623rm exp obs
624
625
626##########################################################
627# check -id
628###########################################################
629echo -e "    closest.t55...\c"
630echo \
631"chr1	100	120	chr1	10	20	-81" > exp
632$BT closest -a d.bed -b d_id.bed -D ref -id > obs
633check exp obs
634rm exp obs
635
636##########################################################
637# check ties, single db
638###########################################################
639echo -e "    closest.t56...\c"
640echo \
641"chr1	10	20	a1	1	-	chr1	8	9	b1	1	+
642chr1	10	20	a1	1	-	chr1	21	22	b2	1	-" > exp
643$BT closest -a bug157_a.bed -b bug157_b.bed > obs
644check exp obs
645rm exp obs
646
647
648##########################################################
649# check ties, single db, -iu
650###########################################################
651echo -e "    closest.t57...\c"
652echo \
653"chr1	10	20	a1	1	-	chr1	21	22	b2	1	-	2" > exp
654$BT closest -a bug157_a.bed -b bug157_b.bed -D ref -iu > obs
655check exp obs
656rm exp obs
657
658##########################################################
659# check ties, single db, -id
660###########################################################
661echo -e "    closest.t58...\c"
662echo \
663"chr1	10	20	a1	1	-	chr1	8	9	b1	1	+	-2" > exp
664$BT closest -a bug157_a.bed -b bug157_b.bed -D ref -id > obs
665check exp obs
666rm exp obs
667
668##########################################################
669# check -header
670###########################################################
671echo -e "    closest.t59...\c"
672echo \
673"#Header for file a.bed
674chr1	10	20	chr1	20	21" > exp
675$BT closest -a a.bed -b b.bed -header > obs
676check exp obs
677rm exp obs
678
679
680###########################################################
681#
682# BUG 281 TESTS: -s and -S (correct cache purging for
683#   opposite strand sweep).
684#
685###########################################################
686
687###########################################################
688# a_med vs b, -s
689###########################################################
690echo -e "    closest.t60...\c"
691echo \
692"chr1	249120154	249120155	21176	0	-	chr1	247242115	247242116	551	0	-
693chr1	249132529	249132530	6425	0	+	chr1	247495324	247495325	510	0	+" > exp
694$BT closest -a bug281_a.medium.bed -b bug281_b.bed -s > obs
695check exp obs
696rm exp obs
697
698
699###########################################################
700# a_med vs b, -S
701###########################################################
702echo -e "    closest.t61...\c"
703echo \
704"chr1	249120154	249120155	21176	0	-	chr1	247495324	247495325	510	0	+
705chr1	249132529	249132530	6425	0	+	chr1	247242115	247242116	551	0	-" > exp
706$BT closest -a bug281_a.medium.bed -b bug281_b.bed -S > obs
707check exp obs
708rm exp obs
709
710###########################################################
711# a_med.flip vs b, -s
712###########################################################
713echo -e "    closest.t62...\c"
714echo \
715"chr1	249120154	249120155	21176	0	+	chr1	247495324	247495325	510	0	+
716chr1	249132529	249132530	6425	0	-	chr1	247242115	247242116	551	0	-" > exp
717$BT closest -a bug281_a.flip.medium.bed -b bug281_b.bed -s > obs
718check exp obs
719rm exp obs
720
721###########################################################
722# a_med.flip vs b, -S
723###########################################################
724echo -e "    closest.t63...\c"
725echo \
726"chr1	249120154	249120155	21176	0	+	chr1	247242115	247242116	551	0	-
727chr1	249132529	249132530	6425	0	-	chr1	247495324	247495325	510	0	+" > exp
728$BT closest -a bug281_a.flip.medium.bed -b bug281_b.bed -S > obs
729check exp obs
730rm exp obs
731
732###########################################################
733# a_med vs b.flip, -s
734###########################################################
735echo -e "    closest.t64...\c"
736echo \
737"chr1	249120154	249120155	21176	0	-	chr1	247495324	247495325	510	0	-
738chr1	249132529	249132530	6425	0	+	chr1	247242115	247242116	551	0	+" > exp
739$BT closest -a bug281_a.medium.bed -b bug281_b.flip.bed -s > obs
740check exp obs
741rm exp obs
742
743###########################################################
744# a_med vs b.flip, -S
745###########################################################
746echo -e "    closest.t65...\c"
747echo \
748"chr1	249120154	249120155	21176	0	-	chr1	247242115	247242116	551	0	+
749chr1	249132529	249132530	6425	0	+	chr1	247495324	247495325	510	0	-" > exp
750$BT closest -a bug281_a.medium.bed -b bug281_b.flip.bed -S > obs
751check exp obs
752rm exp obs
753
754###########################################################
755# a_med.flip vs b.flip, -s
756###########################################################
757echo -e "    closest.t66...\c"
758echo \
759"chr1	249120154	249120155	21176	0	+	chr1	247242115	247242116	551	0	+
760chr1	249132529	249132530	6425	0	-	chr1	247495324	247495325	510	0	-" > exp
761$BT closest -a bug281_a.flip.medium.bed -b bug281_b.flip.bed -s > obs
762check exp obs
763rm exp obs
764
765###########################################################
766# a_med.flip vs b.flip, -S
767###########################################################
768echo -e "    closest.t67...\c"
769echo \
770"chr1	249120154	249120155	21176	0	+	chr1	247495324	247495325	510	0	-
771chr1	249132529	249132530	6425	0	-	chr1	247242115	247242116	551	0	+" > exp
772$BT closest -a bug281_a.flip.medium.bed -b bug281_b.flip.bed -S > obs
773check exp obs
774rm exp obs
775
776###########################################################
777#  Test intersect -wao with multiple databases and -names
778############################################################
779echo -e "    closest.t68...\c"
780echo \
781"1	100	200	a1	ax	b	1	100	200	b1	bx
7821	100	200	a1	ax	c	1	500	600	c4	cq
7831	300	400	a2	ay	b	1	100	200	b1	bx
7841	300	400	a2	ay	c	1	500	600	c4	cq
7851	400	500	a3	az	b	1	100	200	b1	bx
7861	400	500	a3	az	c	1	500	600	c4	cq
7872	500	600	a4	aq	.	.	-1	-1	.	." > exp
788$BT closest -a null_a.bed -b null_b.bed null_c.bed -names b c > obs
789check exp obs
790rm exp obs
791
792###########################################################
793#  Test -mdb all
794############################################################
795echo -e "    closest.t69...\c"
796echo \
797"chr10	21805001	21805500	shores.bed	chr10	21803197	21805197	0	0
798chr10	21805001	21805500	tfbs.bed	chr10	21805031	21805041	V	931	-	0	0
799chr10	21805001	21805500	islands.bed	chr10	21805197	21805759	CpG:_22	0	0" > exp
800$BT closest -a dmr.bed -b islands.bed tfbs.bed shores.bed -filenames -d -mdb all > obs
801check exp obs
802rm exp obs
803
804###########################################################
805#  Test -mdb all with the islands record having no overlap
806############################################################
807echo -e "    closest.t70...\c"
808echo \
809"chr10	21805001	21805500	shores.bed	chr10	21803197	21805197	0	0
810chr10	21805001	21805500	tfbs.bed	chr10	21805031	21805041	V	931	-	0	0" > exp
811$BT closest -a dmr.bed -b islands.2.bed tfbs.bed shores.bed -filenames -d -mdb all > obs
812check exp obs
813rm exp obs
814
815###########################################################
816#  Test -mdb each with the islands record having no overlap
817############################################################
818echo -e "    closest.t71...\c"
819echo \
820"chr10	21805001	21805500	islands.2.bed	chr10	21805597	21805759	CpG:_22	0	98
821chr10	21805001	21805500	tfbs.bed	chr10	21805031	21805041	V	931	-	0	0
822chr10	21805001	21805500	shores.bed	chr10	21803197	21805197	0	0" > exp
823$BT closest -a dmr.bed -b islands.2.bed tfbs.bed shores.bed -filenames -d -mdb each > obs
824check exp obs
825rm exp obs
826
827STARTWD=$(pwd);
828for ADDITIONAL_TEST in \
829    sortAndNaming/test-sort-and-naming.sh \
830    kclosest/test-kclosest.sh \
831; do
832    # In case the cd operation fails, combine it with the script execution
833    cd $(dirname "${STARTWD}/${ADDITIONAL_TEST}") \
834        && bash $(basename "${STARTWD}/${ADDITIONAL_TEST}") \
835        || FAILURES=$(expr $FAILURES + 1);
836done
837
838[[ $FAILURES -eq 0 ]] || exit 1;
839