]> git.donarmstrong.com Git - biopieces.git/blob - code_ruby/test/maasha/seq/test_backtrack.rb
6000dc025cdc5ab3af7309ed6b66a7be94d4c451
[biopieces.git] / code_ruby / test / maasha / seq / test_backtrack.rb
1 #!/usr/bin/env ruby
2 $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
3
4 # Copyright (C) 2007-2011 Martin A. Hansen.
5
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.
10
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.
15
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.
19
20 # http://www.gnu.org/copyleft/gpl.html
21
22 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
23
24 # This software is part of the Biopieces framework (www.biopieces.org).
25
26 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
27
28 require 'test/unit'
29 require 'test/helper'
30 require 'maasha/seq'
31
32 class BackTrackTest < Test::Unit::TestCase
33   def setup
34     #                    0         1
35     #                    01234567890123456789
36     @seq = Seq.new(seq: "tacgatgctagcatgcacgg")
37     @seq.extend(BackTrack)
38   end
39
40   test "#patscan with bad pattern raises" do
41     ["", "X", "1"].each { |pattern|
42       assert_raise(BackTrackError) { @seq.patscan(pattern) }
43     }
44   end
45
46   test "#patscan with OK pattern dont raise" do
47     ["N", "atcg"].each { |pattern|
48       assert_nothing_raised { @seq.patscan(pattern) }
49     }
50   end
51
52   test "#patscan with bad start raises" do
53     [-1, 20].each { |start| 
54       assert_raise(BackTrackError) { @seq.patscan("N", start) }
55     }
56   end
57
58   test "#patscan with OK start dont raise" do
59     [0, 19].each { |start| 
60       assert_nothing_raised { @seq.patscan("N", start) }
61     }
62   end
63
64   test "#patscan with bad stop raises" do
65     [-1, 20].each { |stop|
66       assert_raise(BackTrackError) { @seq.patscan("N", [0, stop]) }
67     }
68   end
69
70   test "#patscan with OK stop dont raise" do
71     [0, 19].each { |stop|
72       assert_nothing_raised { @seq.patscan("N", [0, stop]) }
73     }
74   end
75
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)
79   end
80
81   test "#patscan with bad mis raises" do
82     [-1, 6].each { |mis| 
83       assert_raise(BackTrackError) { @seq.patscan("N", 0, mis) }
84     }
85   end
86
87   test "#patscan with OK mis dont raise" do
88     [0, 5].each { |mis| 
89       assert_nothing_raised { @seq.patscan("N", 0, mis) }
90     }
91   end
92
93   test "#patscan with bad ins raises" do
94     [-1, 6].each { |ins| 
95       assert_raise(BackTrackError) { @seq.patscan("N", 0, 0, ins) }
96     }
97   end
98
99   test "#patscan with OK ins dont raise" do
100     [0, 5].each { |ins| 
101       assert_nothing_raised { @seq.patscan("N", 0, 0, ins) }
102     }
103   end
104
105   test "#patscan with bad del raises" do
106     [-1, 6].each { |del| 
107       assert_raise(BackTrackError) { @seq.patscan("N", 0, 0, 0, del) }
108     }
109   end
110
111   test "#patscan with OK del dont raise" do
112     [0, 5].each { |del| 
113       assert_nothing_raised { @seq.patscan("N", 0, 0, 0, del) }
114     }
115   end
116
117   test "#patscan perfect left is ok" do
118     assert_equal("0:7:tacgatg", @seq.patscan("TACGATG").first.to_s)
119   end
120
121   test "#patscan perfect right is ok" do
122     assert_equal("13:7:tgcacgg", @seq.patscan("TGCACGG").first.to_s)
123   end
124
125   test "#patscan ambiguity is ok" do
126     assert_equal("13:7:tgcacgg", @seq.patscan("TGCACNN").first.to_s)
127   end
128
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)
132   end
133
134   test "#patscan mis left is ok" do
135     assert_equal("0:7:tacgatg", @seq.patscan("Aacgatg", 0, 1).first.to_s)
136   end
137
138   test "#patscan mis right is ok" do
139     assert_equal("13:7:tgcacgg", @seq.patscan("tgcacgA", 0, 1).first.to_s)
140   end
141
142   test "#patscan ins left is ok" do
143     assert_equal("0:7:tacgatg", @seq.patscan("Atacgatg", 0, 0, 1).first.to_s)
144   end
145
146   test "#patscan ins right is ok" do
147     assert_equal("13:7:tgcacgg", @seq.patscan("tgcacggA", 0, 0, 1).first.to_s)
148   end
149
150   test "#patscan del left is ok" do
151     assert_equal("0:7:tacgatg", @seq.patscan("acgatg", 0, 0, 0, 1).first.to_s)
152   end
153
154   test "#patscan del right is ok" do
155     assert_equal("12:8:atgcacgg", @seq.patscan("tgcacgg", 0, 0, 0, 1).first.to_s)
156   end
157
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)
160   end
161 end
162