--- /dev/null
+SEQ_NAME: test1
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+---
+SEQ_NAME: test1_100
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+---
+SEQ_NAME: test1_2
+SEQ: tgtacgtagctagctagctagctagcGagctagctagcAagctgactatcgtgatcgtg
+SEQ_LEN: 59
+---
+SEQ_NAME: test2
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+---
+SEQ_NAME: test2_100
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+---
+SEQ_NAME: test2_1
+SEQ: ggtAgtgtgtgAgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+---
+SEQ_NAME: test1_rc
+SEQ: cacgatcacgatagtcagctagctagctagctagctagctagctagctagctacgtaca
+SEQ_LEN: 59
+---
--- /dev/null
+SEQ_NAME: test1
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: *
+---
+SEQ_NAME: test1_100
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: 100
+---
+SEQ_NAME: test1_2
+SEQ: tgtacgtagctagctagctagctagcGagctagctagcAagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: 96
+---
+SEQ_NAME: test2
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 1
+IDENT: *
+---
+SEQ_NAME: test2_100
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 1
+IDENT: 100
+---
+SEQ_NAME: test2_1
+SEQ: ggtAgtgtgtgAgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 1
+IDENT: 96
+---
+SEQ_NAME: test1_rc
+SEQ: cacgatcacgatagtcagctagctagctagctagctagctagctagctagctacgtaca
+SEQ_LEN: 59
+CLUSTER: 2
+IDENT: *
+---
--- /dev/null
+SEQ_NAME: test1
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: *
+---
+SEQ_NAME: test1_100
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: 100
+---
+SEQ_NAME: test1_2
+SEQ: tgtacgtagctagctagctagctagcGagctagctagcAagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 1
+IDENT: *
+---
+SEQ_NAME: test2
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 2
+IDENT: *
+---
+SEQ_NAME: test2_100
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 2
+IDENT: 100
+---
+SEQ_NAME: test2_1
+SEQ: ggtAgtgtgtgAgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 3
+IDENT: *
+---
+SEQ_NAME: test1_rc
+SEQ: cacgatcacgatagtcagctagctagctagctagctagctagctagctagctacgtaca
+SEQ_LEN: 59
+CLUSTER: 4
+IDENT: *
+---
--- /dev/null
+SEQ_NAME: test1
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: *
+---
+SEQ_NAME: test1_100
+SEQ: tgtacgtagctagctagctagctagctagctagctagctagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: 100
+---
+SEQ_NAME: test1_2
+SEQ: tgtacgtagctagctagctagctagcGagctagctagcAagctgactatcgtgatcgtg
+SEQ_LEN: 59
+CLUSTER: 1
+IDENT: *
+---
+SEQ_NAME: test2
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 2
+IDENT: *
+---
+SEQ_NAME: test2_100
+SEQ: ggttgtgtgtgtgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 2
+IDENT: 100
+---
+SEQ_NAME: test2_1
+SEQ: ggtAgtgtgtgAgtatcgatgtagtctacatcgtctatctgtactgacttactgactac
+SEQ_LEN: 59
+CLUSTER: 3
+IDENT: *
+---
+SEQ_NAME: test1_rc
+SEQ: cacgatcacgatagtcagctagctagctagctagctagctagctagctagctacgtaca
+SEQ_LEN: 59
+CLUSTER: 0
+IDENT: 100
+---
--- /dev/null
+#!/bin/bash
+
+source "$BP_DIR/bp_test/lib/test.sh"
+
+run "$bp -I $in -O $tmp"
+assert_no_diff $tmp $out.1
+clean
+
+run "$bp -I $in -i 1 -O $tmp"
+assert_no_diff $tmp $out.2
+clean
+
+run "$bp -I $in -i 1 -c -O $tmp"
+assert_no_diff $tmp $out.3
+clean
# pattern match engine is based on a backtrack algorithm.
# Insertions are nucleotides found in the pattern but not in the sequence.
# Deletions are nucleotides found in the sequence but not in the pattern.
-# Algorithm based on code kindly provided by j_random_hacker @ Stackoverflow.
+# Algorithm based on code kindly provided by j_random_hacker @ Stackoverflow:
+# http://stackoverflow.com/questions/7557017/approximate-string-matching-using-backtracking/
module BackTrack
OK_PATTERN = Regexp.new('^[flsycwphqrimtnkvadegu]+$')
MAX_MIS = 5 # Maximum number of mismatches allowed