2 $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
4 # Copyright (C) 2007-2011 Martin A. Hansen.
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either version 2
9 # of the License, or (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 # http://www.gnu.org/copyleft/gpl.html
22 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
24 # This software is part of the Biopieces framework (www.biopieces.org).
26 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
32 class BackTrackTest < Test::Unit::TestCase
35 # 01234567890123456789
36 @seq = Seq.new("test", "tacgatgctagcatgcacgg")
37 @seq.extend(BackTrack)
40 test "#patscan with bad pattern raises" do
41 ["", "X", "1"].each { |pattern|
42 assert_raise(BackTrackError) { @seq.patscan(pattern) }
46 test "#patscan with OK pattern dont raise" do
47 ["N", "atcg"].each { |pattern|
48 assert_nothing_raised { @seq.patscan(pattern) }
52 test "#patscan with bad start raises" do
53 [-1, 20].each { |start|
54 assert_raise(BackTrackError) { @seq.patscan("N", start) }
58 test "#patscan with OK start dont raise" do
59 [0, 19].each { |start|
60 assert_nothing_raised { @seq.patscan("N", start) }
64 test "#patscan with bad stop raises" do
65 [-1, 20].each { |stop|
66 assert_raise(BackTrackError) { @seq.patscan("N", [0, stop]) }
70 test "#patscan with OK stop dont raise" do
72 assert_nothing_raised { @seq.patscan("N", [0, stop]) }
76 test "#patscan with stop returns correctly" do
77 assert_nil(@seq.patmatch("G", [0, 2]))
78 assert_equal("3:1:g", @seq.patmatch("G", [0, 3]).to_s)
81 test "#patscan with bad mis raises" do
83 assert_raise(BackTrackError) { @seq.patscan("N", 0, mis) }
87 test "#patscan with OK mis dont raise" do
89 assert_nothing_raised { @seq.patscan("N", 0, mis) }
93 test "#patscan with bad ins raises" do
95 assert_raise(BackTrackError) { @seq.patscan("N", 0, 0, ins) }
99 test "#patscan with OK ins dont raise" do
101 assert_nothing_raised { @seq.patscan("N", 0, 0, ins) }
105 test "#patscan with bad del raises" do
107 assert_raise(BackTrackError) { @seq.patscan("N", 0, 0, 0, del) }
111 test "#patscan with OK del dont raise" do
113 assert_nothing_raised { @seq.patscan("N", 0, 0, 0, del) }
117 test "#patscan perfect left is ok" do
118 assert_equal("0:7:tacgatg", @seq.patscan("TACGATG").first.to_s)
121 test "#patscan perfect right is ok" do
122 assert_equal("13:7:tgcacgg", @seq.patscan("TGCACGG").first.to_s)
125 test "#patscan ambiguity is ok" do
126 assert_equal("13:7:tgcacgg", @seq.patscan("TGCACNN").first.to_s)
129 test "#patscan start is ok" do
130 assert_equal("10:1:g", @seq.patscan("N", 10).first.to_s)
131 assert_equal("19:1:g", @seq.patscan("N", 10).last.to_s)
134 test "#patscan mis left is ok" do
135 assert_equal("0:7:tacgatg", @seq.patscan("Aacgatg", 0, 1).first.to_s)
138 test "#patscan mis right is ok" do
139 assert_equal("13:7:tgcacgg", @seq.patscan("tgcacgA", 0, 1).first.to_s)
142 test "#patscan ins left is ok" do
143 assert_equal("0:7:tacgatg", @seq.patscan("Atacgatg", 0, 0, 1).first.to_s)
146 test "#patscan ins right is ok" do
147 assert_equal("13:7:tgcacgg", @seq.patscan("tgcacggA", 0, 0, 1).first.to_s)
150 test "#patscan del left is ok" do
151 assert_equal("0:7:tacgatg", @seq.patscan("acgatg", 0, 0, 0, 1).first.to_s)
154 test "#patscan del right is ok" do
155 assert_equal("12:8:atgcacgg", @seq.patscan("tgcacgg", 0, 0, 0, 1).first.to_s)
158 test "#patscan ambiguity mis ins del all ok" do
159 assert_equal("0:20:tacgatgctagcatgcacgg", @seq.patscan("tacatgcNagGatgcCacgg", 0, 1, 1, 1).first.to_s)