BioDSL 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/BioDSL.gemspec +64 -0
- data/LICENSE +339 -0
- data/README.md +205 -0
- data/Rakefile +94 -0
- data/examples/fastq_to_fasta.rb +8 -0
- data/lib/BioDSL/cary.rb +242 -0
- data/lib/BioDSL/command.rb +133 -0
- data/lib/BioDSL/commands/add_key.rb +110 -0
- data/lib/BioDSL/commands/align_seq_mothur.rb +194 -0
- data/lib/BioDSL/commands/analyze_residue_distribution.rb +222 -0
- data/lib/BioDSL/commands/assemble_pairs.rb +336 -0
- data/lib/BioDSL/commands/assemble_seq_idba.rb +230 -0
- data/lib/BioDSL/commands/assemble_seq_ray.rb +345 -0
- data/lib/BioDSL/commands/assemble_seq_spades.rb +252 -0
- data/lib/BioDSL/commands/classify_seq.rb +217 -0
- data/lib/BioDSL/commands/classify_seq_mothur.rb +226 -0
- data/lib/BioDSL/commands/clip_primer.rb +318 -0
- data/lib/BioDSL/commands/cluster_otus.rb +181 -0
- data/lib/BioDSL/commands/collapse_otus.rb +170 -0
- data/lib/BioDSL/commands/collect_otus.rb +150 -0
- data/lib/BioDSL/commands/complement_seq.rb +117 -0
- data/lib/BioDSL/commands/count.rb +135 -0
- data/lib/BioDSL/commands/count_values.rb +149 -0
- data/lib/BioDSL/commands/degap_seq.rb +253 -0
- data/lib/BioDSL/commands/dereplicate_seq.rb +168 -0
- data/lib/BioDSL/commands/dump.rb +157 -0
- data/lib/BioDSL/commands/filter_rrna.rb +239 -0
- data/lib/BioDSL/commands/genecall.rb +237 -0
- data/lib/BioDSL/commands/grab.rb +535 -0
- data/lib/BioDSL/commands/index_taxonomy.rb +226 -0
- data/lib/BioDSL/commands/mask_seq.rb +175 -0
- data/lib/BioDSL/commands/mean_scores.rb +168 -0
- data/lib/BioDSL/commands/merge_pair_seq.rb +175 -0
- data/lib/BioDSL/commands/merge_table.rb +225 -0
- data/lib/BioDSL/commands/merge_values.rb +113 -0
- data/lib/BioDSL/commands/plot_heatmap.rb +233 -0
- data/lib/BioDSL/commands/plot_histogram.rb +306 -0
- data/lib/BioDSL/commands/plot_matches.rb +282 -0
- data/lib/BioDSL/commands/plot_residue_distribution.rb +278 -0
- data/lib/BioDSL/commands/plot_scores.rb +285 -0
- data/lib/BioDSL/commands/random.rb +153 -0
- data/lib/BioDSL/commands/read_fasta.rb +222 -0
- data/lib/BioDSL/commands/read_fastq.rb +414 -0
- data/lib/BioDSL/commands/read_table.rb +329 -0
- data/lib/BioDSL/commands/reverse_seq.rb +113 -0
- data/lib/BioDSL/commands/slice_align.rb +400 -0
- data/lib/BioDSL/commands/slice_seq.rb +151 -0
- data/lib/BioDSL/commands/sort.rb +223 -0
- data/lib/BioDSL/commands/split_pair_seq.rb +220 -0
- data/lib/BioDSL/commands/split_values.rb +165 -0
- data/lib/BioDSL/commands/trim_primer.rb +314 -0
- data/lib/BioDSL/commands/trim_seq.rb +192 -0
- data/lib/BioDSL/commands/uchime_ref.rb +170 -0
- data/lib/BioDSL/commands/uclust.rb +286 -0
- data/lib/BioDSL/commands/unique_values.rb +145 -0
- data/lib/BioDSL/commands/usearch_global.rb +171 -0
- data/lib/BioDSL/commands/usearch_local.rb +171 -0
- data/lib/BioDSL/commands/write_fasta.rb +207 -0
- data/lib/BioDSL/commands/write_fastq.rb +191 -0
- data/lib/BioDSL/commands/write_table.rb +419 -0
- data/lib/BioDSL/commands/write_tree.rb +167 -0
- data/lib/BioDSL/commands.rb +31 -0
- data/lib/BioDSL/config.rb +55 -0
- data/lib/BioDSL/csv.rb +307 -0
- data/lib/BioDSL/debug.rb +42 -0
- data/lib/BioDSL/fasta.rb +133 -0
- data/lib/BioDSL/fastq.rb +77 -0
- data/lib/BioDSL/filesys.rb +137 -0
- data/lib/BioDSL/fork.rb +145 -0
- data/lib/BioDSL/hamming.rb +128 -0
- data/lib/BioDSL/helpers/aux_helper.rb +44 -0
- data/lib/BioDSL/helpers/email_helper.rb +66 -0
- data/lib/BioDSL/helpers/history_helper.rb +40 -0
- data/lib/BioDSL/helpers/log_helper.rb +55 -0
- data/lib/BioDSL/helpers/options_helper.rb +405 -0
- data/lib/BioDSL/helpers/status_helper.rb +132 -0
- data/lib/BioDSL/helpers.rb +35 -0
- data/lib/BioDSL/html_report.rb +200 -0
- data/lib/BioDSL/math.rb +55 -0
- data/lib/BioDSL/mummer.rb +216 -0
- data/lib/BioDSL/pipeline.rb +354 -0
- data/lib/BioDSL/seq/ambiguity.rb +66 -0
- data/lib/BioDSL/seq/assemble.rb +240 -0
- data/lib/BioDSL/seq/backtrack.rb +252 -0
- data/lib/BioDSL/seq/digest.rb +99 -0
- data/lib/BioDSL/seq/dynamic.rb +263 -0
- data/lib/BioDSL/seq/homopolymer.rb +59 -0
- data/lib/BioDSL/seq/kmer.rb +293 -0
- data/lib/BioDSL/seq/levenshtein.rb +113 -0
- data/lib/BioDSL/seq/translate.rb +109 -0
- data/lib/BioDSL/seq/trim.rb +188 -0
- data/lib/BioDSL/seq.rb +742 -0
- data/lib/BioDSL/serializer.rb +98 -0
- data/lib/BioDSL/stream.rb +113 -0
- data/lib/BioDSL/taxonomy.rb +691 -0
- data/lib/BioDSL/test.rb +42 -0
- data/lib/BioDSL/tmp_dir.rb +68 -0
- data/lib/BioDSL/usearch.rb +301 -0
- data/lib/BioDSL/verbose.rb +42 -0
- data/lib/BioDSL/version.rb +31 -0
- data/lib/BioDSL.rb +81 -0
- data/test/BioDSL/commands/test_add_key.rb +105 -0
- data/test/BioDSL/commands/test_align_seq_mothur.rb +99 -0
- data/test/BioDSL/commands/test_analyze_residue_distribution.rb +134 -0
- data/test/BioDSL/commands/test_assemble_pairs.rb +459 -0
- data/test/BioDSL/commands/test_assemble_seq_idba.rb +50 -0
- data/test/BioDSL/commands/test_assemble_seq_ray.rb +51 -0
- data/test/BioDSL/commands/test_assemble_seq_spades.rb +50 -0
- data/test/BioDSL/commands/test_classify_seq.rb +50 -0
- data/test/BioDSL/commands/test_classify_seq_mothur.rb +59 -0
- data/test/BioDSL/commands/test_clip_primer.rb +377 -0
- data/test/BioDSL/commands/test_cluster_otus.rb +128 -0
- data/test/BioDSL/commands/test_collapse_otus.rb +81 -0
- data/test/BioDSL/commands/test_collect_otus.rb +82 -0
- data/test/BioDSL/commands/test_complement_seq.rb +78 -0
- data/test/BioDSL/commands/test_count.rb +103 -0
- data/test/BioDSL/commands/test_count_values.rb +85 -0
- data/test/BioDSL/commands/test_degap_seq.rb +96 -0
- data/test/BioDSL/commands/test_dereplicate_seq.rb +92 -0
- data/test/BioDSL/commands/test_dump.rb +109 -0
- data/test/BioDSL/commands/test_filter_rrna.rb +128 -0
- data/test/BioDSL/commands/test_genecall.rb +50 -0
- data/test/BioDSL/commands/test_grab.rb +398 -0
- data/test/BioDSL/commands/test_index_taxonomy.rb +62 -0
- data/test/BioDSL/commands/test_mask_seq.rb +98 -0
- data/test/BioDSL/commands/test_mean_scores.rb +111 -0
- data/test/BioDSL/commands/test_merge_pair_seq.rb +115 -0
- data/test/BioDSL/commands/test_merge_table.rb +131 -0
- data/test/BioDSL/commands/test_merge_values.rb +83 -0
- data/test/BioDSL/commands/test_plot_heatmap.rb +185 -0
- data/test/BioDSL/commands/test_plot_histogram.rb +194 -0
- data/test/BioDSL/commands/test_plot_matches.rb +157 -0
- data/test/BioDSL/commands/test_plot_residue_distribution.rb +309 -0
- data/test/BioDSL/commands/test_plot_scores.rb +308 -0
- data/test/BioDSL/commands/test_random.rb +88 -0
- data/test/BioDSL/commands/test_read_fasta.rb +229 -0
- data/test/BioDSL/commands/test_read_fastq.rb +552 -0
- data/test/BioDSL/commands/test_read_table.rb +327 -0
- data/test/BioDSL/commands/test_reverse_seq.rb +79 -0
- data/test/BioDSL/commands/test_slice_align.rb +218 -0
- data/test/BioDSL/commands/test_slice_seq.rb +131 -0
- data/test/BioDSL/commands/test_sort.rb +128 -0
- data/test/BioDSL/commands/test_split_pair_seq.rb +164 -0
- data/test/BioDSL/commands/test_split_values.rb +95 -0
- data/test/BioDSL/commands/test_trim_primer.rb +329 -0
- data/test/BioDSL/commands/test_trim_seq.rb +150 -0
- data/test/BioDSL/commands/test_uchime_ref.rb +113 -0
- data/test/BioDSL/commands/test_uclust.rb +139 -0
- data/test/BioDSL/commands/test_unique_values.rb +98 -0
- data/test/BioDSL/commands/test_usearch_global.rb +123 -0
- data/test/BioDSL/commands/test_usearch_local.rb +125 -0
- data/test/BioDSL/commands/test_write_fasta.rb +159 -0
- data/test/BioDSL/commands/test_write_fastq.rb +166 -0
- data/test/BioDSL/commands/test_write_table.rb +411 -0
- data/test/BioDSL/commands/test_write_tree.rb +122 -0
- data/test/BioDSL/helpers/test_options_helper.rb +272 -0
- data/test/BioDSL/seq/test_assemble.rb +98 -0
- data/test/BioDSL/seq/test_backtrack.rb +176 -0
- data/test/BioDSL/seq/test_digest.rb +71 -0
- data/test/BioDSL/seq/test_dynamic.rb +133 -0
- data/test/BioDSL/seq/test_homopolymer.rb +58 -0
- data/test/BioDSL/seq/test_kmer.rb +134 -0
- data/test/BioDSL/seq/test_translate.rb +75 -0
- data/test/BioDSL/seq/test_trim.rb +101 -0
- data/test/BioDSL/test_cary.rb +176 -0
- data/test/BioDSL/test_command.rb +45 -0
- data/test/BioDSL/test_csv.rb +514 -0
- data/test/BioDSL/test_debug.rb +42 -0
- data/test/BioDSL/test_fasta.rb +154 -0
- data/test/BioDSL/test_fastq.rb +46 -0
- data/test/BioDSL/test_filesys.rb +145 -0
- data/test/BioDSL/test_fork.rb +85 -0
- data/test/BioDSL/test_math.rb +41 -0
- data/test/BioDSL/test_mummer.rb +79 -0
- data/test/BioDSL/test_pipeline.rb +187 -0
- data/test/BioDSL/test_seq.rb +790 -0
- data/test/BioDSL/test_serializer.rb +72 -0
- data/test/BioDSL/test_stream.rb +55 -0
- data/test/BioDSL/test_taxonomy.rb +336 -0
- data/test/BioDSL/test_test.rb +42 -0
- data/test/BioDSL/test_tmp_dir.rb +58 -0
- data/test/BioDSL/test_usearch.rb +33 -0
- data/test/BioDSL/test_verbose.rb +42 -0
- data/test/helper.rb +82 -0
- data/www/command.html.haml +14 -0
- data/www/css.html.haml +55 -0
- data/www/input_files.html.haml +3 -0
- data/www/layout.html.haml +12 -0
- data/www/output_files.html.haml +3 -0
- data/www/overview.html.haml +15 -0
- data/www/pipeline.html.haml +4 -0
- data/www/png.html.haml +2 -0
- data/www/status.html.haml +9 -0
- data/www/time.html.haml +11 -0
- metadata +503 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
3
|
+
|
|
4
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
5
|
+
# #
|
|
6
|
+
# Copyright (C) 2007-2015 Martin Asser Hansen (mail@maasha.dk). #
|
|
7
|
+
# #
|
|
8
|
+
# This program is free software; you can redistribute it and/or #
|
|
9
|
+
# modify it under the terms of the GNU General Public License #
|
|
10
|
+
# as published by the Free Software Foundation; either version 2 #
|
|
11
|
+
# of the License, or (at your option) any later version. #
|
|
12
|
+
# #
|
|
13
|
+
# This program is distributed in the hope that it will be useful, #
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
16
|
+
# GNU General Public License for more details. #
|
|
17
|
+
# #
|
|
18
|
+
# You should have received a copy of the GNU General Public License #
|
|
19
|
+
# along with this program; if not, write to the Free Software #
|
|
20
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, #
|
|
21
|
+
# USA. #
|
|
22
|
+
# #
|
|
23
|
+
# http://www.gnu.org/copyleft/gpl.html #
|
|
24
|
+
# #
|
|
25
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
26
|
+
# #
|
|
27
|
+
# This software is part of BioDSL (www.github.com/maasha/BioDSL). #
|
|
28
|
+
# #
|
|
29
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
30
|
+
|
|
31
|
+
require 'test/helper'
|
|
32
|
+
|
|
33
|
+
# Test class for WriteTree.
|
|
34
|
+
class TestWriteTree < Test::Unit::TestCase
|
|
35
|
+
def setup
|
|
36
|
+
@tmpdir = Dir.mktmpdir('BioDSL')
|
|
37
|
+
|
|
38
|
+
omit('FastTree not found') unless BioDSL::Filesys.which('FastTree')
|
|
39
|
+
|
|
40
|
+
setup_data
|
|
41
|
+
|
|
42
|
+
@file = File.join(@tmpdir, 'test.tree')
|
|
43
|
+
@p = BioDSL::Pipeline.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def setup_data
|
|
47
|
+
@input, @output = BioDSL::Stream.pipe
|
|
48
|
+
@input2, @output2 = BioDSL::Stream.pipe
|
|
49
|
+
|
|
50
|
+
@output.write(SEQ: 'attgactgacg--')
|
|
51
|
+
@output.write(SEQ: 'attgactaagacg')
|
|
52
|
+
@output.write(SEQ: 'a---actgacg--')
|
|
53
|
+
@output.write(SEQ: 'a---actaagacg')
|
|
54
|
+
@output.write(SEQ: 'a---actaagacg')
|
|
55
|
+
@output.write(FOO: 'BAR')
|
|
56
|
+
@output.close
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def teardown
|
|
60
|
+
FileUtils.rm_r @tmpdir if @tmpdir
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
test 'BioDSL::Pipeline::WriteTree with invalid options raises' do
|
|
64
|
+
assert_raise(BioDSL::OptionError) { @p.write_tree(foo: 'bar') }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
test 'BioDSL::Pipeline::WriteTree to stdout outputs correctly' do
|
|
68
|
+
result = capture_stdout { @p.write_tree.run(input: @input) }
|
|
69
|
+
expected = '(1:0.00055,(3:0.0,4:0.0):0.00054,' \
|
|
70
|
+
'(0:0.00055,2:0.00054)0.996:0.34079);'
|
|
71
|
+
assert_equal(expected, result.chomp)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
test 'BioDSL::Pipeline::WriteTree to file outputs correctly' do
|
|
75
|
+
@p.write_tree(output: @file).run(input: @input, output: @output2)
|
|
76
|
+
result = File.read(@file)
|
|
77
|
+
expected = '(1:0.00055,(3:0.0,4:0.0):0.00054,' \
|
|
78
|
+
'(0:0.00055,2:0.00054)0.996:0.34079);'
|
|
79
|
+
assert_equal(expected, result.chomp)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test 'BioDSL::Pipeline::WriteTree to existing file raises' do
|
|
83
|
+
`touch #{@file}`
|
|
84
|
+
assert_raise(BioDSL::OptionError) { @p.write_tree(output: @file) }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test 'BioDSL::Pipeline::WriteTree to existing file w. :force outputs OK' do
|
|
88
|
+
`touch #{@file}`
|
|
89
|
+
@p.write_tree(output: @file, force: true).run(input: @input)
|
|
90
|
+
result = File.open(@file).read
|
|
91
|
+
expected = '(1:0.00055,(3:0.0,4:0.0):0.00054,' \
|
|
92
|
+
'(0:0.00055,2:0.00054)0.996:0.34079);'
|
|
93
|
+
assert_equal(expected, result.chomp)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
test 'BioDSL::Pipeline::WriteTree with flux outputs correctly' do
|
|
97
|
+
@p.write_tree(output: @file).run(input: @input, output: @output2)
|
|
98
|
+
result = File.open(@file).read
|
|
99
|
+
expected = '(1:0.00055,(3:0.0,4:0.0):0.00054,' \
|
|
100
|
+
'(0:0.00055,2:0.00054)0.996:0.34079);'
|
|
101
|
+
assert_equal(expected, result.chomp)
|
|
102
|
+
|
|
103
|
+
expected = <<-EXP.gsub(/^\s+\|/, '')
|
|
104
|
+
|{:SEQ=>"attgactgacg--"}
|
|
105
|
+
|{:SEQ=>"attgactaagacg"}
|
|
106
|
+
|{:SEQ=>"a---actgacg--"}
|
|
107
|
+
|{:SEQ=>"a---actaagacg"}
|
|
108
|
+
|{:SEQ=>"a---actaagacg"}
|
|
109
|
+
|{:FOO=>"BAR"}
|
|
110
|
+
EXP
|
|
111
|
+
|
|
112
|
+
assert_equal(expected, collect_result)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
test 'BioDSL::Pipeline::WriteTree status outputs correctly' do
|
|
116
|
+
@p.write_tree(output: @file).run(input: @input, output: @output2)
|
|
117
|
+
assert_equal(6, @p.status.first[:records_in])
|
|
118
|
+
assert_equal(6, @p.status.first[:records_out])
|
|
119
|
+
assert_equal(5, @p.status.first[:sequences_in])
|
|
120
|
+
assert_equal(65, @p.status.first[:residues_in])
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
3
|
+
|
|
4
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
5
|
+
# #
|
|
6
|
+
# Copyright (C) 2007-2015 Martin Asser Hansen (mail@maasha.dk). #
|
|
7
|
+
# #
|
|
8
|
+
# This program is free software; you can redistribute it and/or #
|
|
9
|
+
# modify it under the terms of the GNU General Public License #
|
|
10
|
+
# as published by the Free Software Foundation; either version 2 #
|
|
11
|
+
# of the License, or (at your option) any later version. #
|
|
12
|
+
# #
|
|
13
|
+
# This program is distributed in the hope that it will be useful, #
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
16
|
+
# GNU General Public License for more details. #
|
|
17
|
+
# #
|
|
18
|
+
# You should have received a copy of the GNU General Public License #
|
|
19
|
+
# along with this program; if not, write to the Free Software #
|
|
20
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, #
|
|
21
|
+
# USA. #
|
|
22
|
+
# #
|
|
23
|
+
# http://www.gnu.org/copyleft/gpl.html #
|
|
24
|
+
# #
|
|
25
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
26
|
+
# #
|
|
27
|
+
# This software is part of BioDSL (www.github.com/maasha/BioDSL). #
|
|
28
|
+
# #
|
|
29
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
30
|
+
|
|
31
|
+
require 'test/helper'
|
|
32
|
+
|
|
33
|
+
# Test class for OptionHelper.
|
|
34
|
+
# rubocop:disable Metrics/ClassLength,
|
|
35
|
+
class TestOptionsHelper < Test::Unit::TestCase
|
|
36
|
+
include BioDSL::OptionsHelper
|
|
37
|
+
|
|
38
|
+
def setup
|
|
39
|
+
@err = BioDSL::OptionError
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test '#options_allowed with disallowed option raises' do
|
|
43
|
+
options = {bar: 'foo'}
|
|
44
|
+
assert_raise(@err) { options_allowed(options, :foo) }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
test '#options_allowed with allowed option dont raise' do
|
|
48
|
+
options = {foo: 'bar'}
|
|
49
|
+
assert_nothing_raised { options_allowed(options, :foo) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
test '#options_allowed with no options dont raise' do
|
|
53
|
+
options = {}
|
|
54
|
+
assert_nothing_raised { options_allowed(options, :foo) }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
test '#options_allowed_values with disallowed value raises' do
|
|
58
|
+
options = {bar: 'foo'}
|
|
59
|
+
assert_raise(@err) { options_allowed_values(options, bar: [1]) }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test '#options_allowed_values with allowed value dont raise' do
|
|
63
|
+
options = {bar: 'foo'}
|
|
64
|
+
assert_nothing_raised { options_allowed_values(options, bar: ['foo']) }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
test '#options_required w/o required options raises' do
|
|
68
|
+
options = {bar: 'foo'}
|
|
69
|
+
assert_raise(@err) { options_required(options, :foo) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
test '#options_required with required options dont raise' do
|
|
73
|
+
options = {bar: 'foo', one: 'two'}
|
|
74
|
+
assert_nothing_raised { options_required(options, :bar, :one) }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
test '#options_required_unique with non-unique required options raises' do
|
|
78
|
+
options = {bar: 'foo', one: 'two'}
|
|
79
|
+
assert_raise(@err) { options_required_unique(options, :bar, :one) }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test '#options_required_unique with unique required options dont raise' do
|
|
83
|
+
options = {bar: 'foo', one: 'two'}
|
|
84
|
+
assert_nothing_raised { options_required_unique(options, :one) }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test '#options_unique with non-unique options raises' do
|
|
88
|
+
options = {bar: 'foo', one: 'two'}
|
|
89
|
+
assert_raise(@err) { options_unique(options, :bar, :one) }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test '#options_unique with unique options dont raise' do
|
|
93
|
+
options = {bar: 'foo', one: 'two'}
|
|
94
|
+
assert_nothing_raised { options_unique(options, :one) }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
test '#options_unique with no options dont raise' do
|
|
98
|
+
options = {}
|
|
99
|
+
assert_nothing_raised { options_unique(options, :one) }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
test '#options_list_unique with duplicate elements raise' do
|
|
103
|
+
options = {foo: [0, 0]}
|
|
104
|
+
|
|
105
|
+
assert_raise(@err) { options_list_unique(options, :foo) }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test '#options_list_unique with unique elements dont raise' do
|
|
109
|
+
options = {foo: [0, 1]}
|
|
110
|
+
assert_nothing_raised { options_list_unique(options, :foo) }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
test '#options_tie w/o tie option raises' do
|
|
114
|
+
options = {gzip: true}
|
|
115
|
+
|
|
116
|
+
assert_raise(@err) { options_tie(options, gzip: :output) }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
test '#options_tie with tie option dont raise' do
|
|
120
|
+
options = {gzip: true, output: 'foo'}
|
|
121
|
+
assert_nothing_raised { options_tie(options, gzip: :output) }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
test '#options_tie with reverse tie option dont raise' do
|
|
125
|
+
options = {gzip: true, output: 'foo'}
|
|
126
|
+
assert_nothing_raised { options_tie(options, output: :gzip) }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
test '#options_conflict with conflicting options raise' do
|
|
130
|
+
options = {select: true, reject: true}
|
|
131
|
+
assert_raise(@err) { options_conflict(options, select: :reject) }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
test '#options_conflict with non-conflicting options dont raise' do
|
|
135
|
+
options = {select: true}
|
|
136
|
+
assert_nothing_raised { options_conflict(options, select: :reject) }
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
test '#options_files_exist w/o options dont raise' do
|
|
140
|
+
options = {}
|
|
141
|
+
assert_nothing_raised { options_files_exist(options, :foo) }
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
test '#options_files_exist with file dont raise' do
|
|
145
|
+
options = {input: __FILE__}
|
|
146
|
+
assert_nothing_raised { options_files_exist(options, :input) }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
test '#options_files_exist with non-existing file raise' do
|
|
150
|
+
options = {input: 'ljg34gj324'}
|
|
151
|
+
assert_raise(@err) { options_files_exist(options, :input) }
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
test '#options_files_exist with one non-existing file raise' do
|
|
155
|
+
options = {input: __FILE__, input2: '32g4g24g23'}
|
|
156
|
+
assert_raise(@err) { options_files_exist(options, :input, :input2) }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
test '#options_files_exist with Array of non-existing files raise' do
|
|
160
|
+
options = {input: %w(__FILE__ h23j42h34)}
|
|
161
|
+
assert_raise(@err) { options_files_exist(options, :input) }
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
test '#options_files_exist with Arrays of non-existing files raise' do
|
|
165
|
+
options = {input: [__FILE__], input2: ['h23j42h34']}
|
|
166
|
+
assert_raise(@err) { options_files_exist(options, :input, :input2) }
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
test '#options_files_exist with existing file and glob don\'t raise' do
|
|
170
|
+
glob = __FILE__.sub(/\.rb$/, '*')
|
|
171
|
+
options = {input: glob}
|
|
172
|
+
assert_nothing_raised { options_files_exist(options, :input) }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
test '#options_files_exist with non-matching glob raises' do
|
|
176
|
+
options = {input: 'f234rs*d32'}
|
|
177
|
+
assert_raise(@err) { options_files_exist(options, :input) }
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
test '#options_files_exist_force w/o options dont raise' do
|
|
181
|
+
options = {}
|
|
182
|
+
assert_nothing_raised { options_files_exist_force(options, :input) }
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
test '#options_files_exist_force with force dont raise' do
|
|
186
|
+
options = {input: __FILE__, force: true}
|
|
187
|
+
assert_nothing_raised { options_files_exist_force(options, :input) }
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
test '#options_files_exist_force w/o force raise' do
|
|
191
|
+
options = {input: __FILE__}
|
|
192
|
+
assert_raise(@err) { options_files_exist_force(options, :input) }
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
test '#options_dirs_exist w/o options dont raise' do
|
|
196
|
+
options = {}
|
|
197
|
+
assert_nothing_raised { options_dirs_exist(options, :foo) }
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
test '#options_dirs_exist with dir dont raise' do
|
|
201
|
+
options = {input: __dir__}
|
|
202
|
+
assert_nothing_raised { options_dirs_exist(options, :input) }
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
test '#options_dirs_exist with non-existing dir raise' do
|
|
206
|
+
options = {input: 'ljg34gj324'}
|
|
207
|
+
assert_raise(@err) { options_dirs_exist(options, :input) }
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
test '#options_dirs_exist with one non-existing dir raise' do
|
|
211
|
+
options = {input: __dir__, input2: '32g4g24g23'}
|
|
212
|
+
assert_raise(@err) { options_dirs_exist(options, :input, :input2) }
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
test '#options_dirs_exist with Array of non-existing dirs raise' do
|
|
216
|
+
options = {input: [__dir__, 'h23j42h34']}
|
|
217
|
+
assert_raise(@err) { options_dirs_exist(options, :input) }
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
test '#options_dirs_exist with Arrays of non-existing dirs raise' do
|
|
221
|
+
options = {input: [__dir__], input2: ['h23j42h34']}
|
|
222
|
+
assert_raise(@err) { options_dirs_exist(options, :input, :input2) }
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
test '#options_assert with false statement raise' do
|
|
226
|
+
options = {min: 0}
|
|
227
|
+
assert_raise(@err) { options_assert(options, ':min > 0') }
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
test '#options_assert with true statement dont raise' do
|
|
231
|
+
options = {min: 0}
|
|
232
|
+
assert_nothing_raised { options_assert(options, ':min == 0') }
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
test '#options_glob returns correctly' do
|
|
236
|
+
glob = __FILE__[0..-3] + '*'
|
|
237
|
+
assert_equal([__FILE__], options_glob(glob))
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
test '#options_glob with Array returns correctly' do
|
|
241
|
+
glob = __FILE__[0..-3] + '*'
|
|
242
|
+
assert_equal([__FILE__, __FILE__], options_glob([glob, glob]))
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
test 'options_load_rc with existing option returns correctly' do
|
|
246
|
+
file = Tempfile.new('rc_file')
|
|
247
|
+
|
|
248
|
+
begin
|
|
249
|
+
File.write(file, 'test foo bar')
|
|
250
|
+
options = {foo: 123}
|
|
251
|
+
options_load_rc(options, :test, file.path)
|
|
252
|
+
assert_equal({foo: 123}, options)
|
|
253
|
+
ensure
|
|
254
|
+
file.unlink
|
|
255
|
+
file.close
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
test 'options_load_rc w/o existing option returns correctly' do
|
|
260
|
+
file = Tempfile.new('rc_file')
|
|
261
|
+
|
|
262
|
+
begin
|
|
263
|
+
File.write(file, 'test foo bar')
|
|
264
|
+
options = {}
|
|
265
|
+
options_load_rc(options, :test, file.path)
|
|
266
|
+
assert_equal({foo: 'bar'}, options)
|
|
267
|
+
ensure
|
|
268
|
+
file.unlink
|
|
269
|
+
file.close
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
3
|
+
|
|
4
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
5
|
+
# #
|
|
6
|
+
# Copyright (C) 2007-2015 Martin Asser Hansen (mail@maasha.dk). #
|
|
7
|
+
# #
|
|
8
|
+
# This program is free software; you can redistribute it and/or #
|
|
9
|
+
# modify it under the terms of the GNU General Public License #
|
|
10
|
+
# as published by the Free Software Foundation; either version 2 #
|
|
11
|
+
# of the License, or (at your option) any later version. #
|
|
12
|
+
# #
|
|
13
|
+
# This program is distributed in the hope that it will be useful, #
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
16
|
+
# GNU General Public License for more details. #
|
|
17
|
+
# #
|
|
18
|
+
# You should have received a copy of the GNU General Public License #
|
|
19
|
+
# along with this program; if not, write to the Free Software #
|
|
20
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
|
|
21
|
+
# #
|
|
22
|
+
# http://www.gnu.org/copyleft/gpl.html #
|
|
23
|
+
# #
|
|
24
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
25
|
+
# #
|
|
26
|
+
# This software is part of BioDSL (www.BioDSL.org). #
|
|
27
|
+
# #
|
|
28
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
29
|
+
|
|
30
|
+
require 'test/helper'
|
|
31
|
+
|
|
32
|
+
class TestAssemble < Test::Unit::TestCase
|
|
33
|
+
def setup
|
|
34
|
+
@entry1 = BioDSL::Seq.new(seq: "ttttttttttATCTCGC")
|
|
35
|
+
@entry2 = BioDSL::Seq.new(seq: "naTCTCGgaaaaaaaaa")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
test "#assemble with bad mismatches_max raises" do
|
|
39
|
+
assert_raise(BioDSL::AssembleError) { BioDSL::Assemble.pair(@entry1, @entry2, mismatches_max: -1) }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "#assemble with bad overlap_max raises" do
|
|
43
|
+
assert_raise(BioDSL::AssembleError) { BioDSL::Assemble.pair(@entry1, @entry2, overlap_max: 0) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "#assemble with bad overlap_min raises" do
|
|
47
|
+
assert_raise(BioDSL::AssembleError) { BioDSL::Assemble.pair(@entry1, @entry2, overlap_min: 0) }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "#assemble returns correctly" do
|
|
51
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2)
|
|
52
|
+
assert_equal("ttttttttttatctcgCatctcggaaaaaaaaa", assembly.seq)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test "#assemble with uneven sequence length returns correctly" do
|
|
56
|
+
@entry1.seq = "tttttttttATCTCGC"
|
|
57
|
+
@entry2.seq = "naTCTCGgaaaaa"
|
|
58
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2)
|
|
59
|
+
assert_equal("tttttttttatctcgCatctcggaaaaa", assembly.seq)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test "#assemble with subsequence returns correctly" do
|
|
63
|
+
@entry1.seq = "tttttttttATCTCGC"
|
|
64
|
+
@entry2.seq = "naTCTCG"
|
|
65
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2)
|
|
66
|
+
assert_equal("ttttttttTATCTCGc", assembly.seq)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
test "#assemble with seq_name returns correctly" do
|
|
70
|
+
@entry1.seq_name = "foo"
|
|
71
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2)
|
|
72
|
+
assert_equal("foo:overlap=1:hamming=0", assembly.seq_name)
|
|
73
|
+
assert_equal("ttttttttttatctcgCatctcggaaaaaaaaa", assembly.seq)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "#assemble with qual returns correctly" do
|
|
77
|
+
@entry1.qual = "00000000000000000"
|
|
78
|
+
@entry2.qual = "@@@@@@@@@@@@@@@@@"
|
|
79
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2)
|
|
80
|
+
assert_equal("ttttttttttatctcgNatctcggaaaaaaaaa", assembly.seq)
|
|
81
|
+
assert_equal("00000000000000008@@@@@@@@@@@@@@@@", assembly.qual)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test "#assemble with mismatches_max returns correctly" do
|
|
85
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2, mismatches_max: 10)
|
|
86
|
+
assert_equal("tttttttttTATCTCGCaaaaaaaaa", assembly.seq)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
test "#assemble with overlap_max returns correctly" do
|
|
90
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2, mismatches_max: 10, overlap_max: 7)
|
|
91
|
+
assert_equal("ttttttttttatctcgCatctcggaaaaaaaaa", assembly.seq)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
test "#assemble with overlap_min returns correctly" do
|
|
95
|
+
assembly = BioDSL::Assemble.pair(@entry1, @entry2, mismatches_max: 10, overlap_min: 9)
|
|
96
|
+
assert_nil(assembly)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
3
|
+
|
|
4
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
5
|
+
# #
|
|
6
|
+
# Copyright (C) 2007-2015 Martin Asser Hansen (mail@maasha.dk). #
|
|
7
|
+
# #
|
|
8
|
+
# This program is free software; you can redistribute it and/or #
|
|
9
|
+
# modify it under the terms of the GNU General Public License #
|
|
10
|
+
# as published by the Free Software Foundation; either version 2 #
|
|
11
|
+
# of the License, or (at your option) any later version. #
|
|
12
|
+
# #
|
|
13
|
+
# This program is distributed in the hope that it will be useful, #
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
16
|
+
# GNU General Public License for more details. #
|
|
17
|
+
# #
|
|
18
|
+
# You should have received a copy of the GNU General Public License #
|
|
19
|
+
# along with this program; if not, write to the Free Software #
|
|
20
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
|
|
21
|
+
# #
|
|
22
|
+
# http://www.gnu.org/copyleft/gpl.html #
|
|
23
|
+
# #
|
|
24
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
25
|
+
# #
|
|
26
|
+
# This software is part of BioDSL (www.BioDSL.org). #
|
|
27
|
+
# #
|
|
28
|
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #
|
|
29
|
+
|
|
30
|
+
require 'test/helper'
|
|
31
|
+
|
|
32
|
+
class BackTrackTest < Test::Unit::TestCase
|
|
33
|
+
def setup
|
|
34
|
+
# 0 1
|
|
35
|
+
# 01234567890123456789
|
|
36
|
+
@seq = BioDSL::Seq.new(seq: "tacgatgctagcatgcacgg")
|
|
37
|
+
@seq.extend(BioDSL::BackTrack)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
test "#patscan with bad pattern raises" do
|
|
41
|
+
["", "X", "1"].each { |pattern|
|
|
42
|
+
assert_raise(BioDSL::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(BioDSL::BackTrackError) { @seq.patscan("N", start: 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: start) }
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test "#patscan with bad stop raises" do
|
|
65
|
+
[-1, 20].each { |stop|
|
|
66
|
+
assert_raise(BioDSL::BackTrackError) { @seq.patscan("N", stop: 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", stop: stop) }
|
|
73
|
+
}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "#patscan with stop returns correctly" do
|
|
77
|
+
assert_nil(@seq.patmatch("G", start: 0, stop: 2))
|
|
78
|
+
assert_equal("3:1:g", @seq.patmatch("G", start: 0, stop: 3).to_s)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
test "#patscan with bad mis raises" do
|
|
82
|
+
[-1, 6].each { |mis|
|
|
83
|
+
assert_raise(BioDSL::BackTrackError) { @seq.patscan("N", max_mismatches: 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", max_mismatches: mis) }
|
|
90
|
+
}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
test "#patscan with bad ins raises" do
|
|
94
|
+
[-1, 6].each { |ins|
|
|
95
|
+
assert_raise(BioDSL::BackTrackError) { @seq.patscan("N", max_insertions: 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", max_insertions: ins) }
|
|
102
|
+
}
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
test "#patscan with bad del raises" do
|
|
106
|
+
[-1, 6].each { |del|
|
|
107
|
+
assert_raise(BioDSL::BackTrackError) { @seq.patscan("N", max_deletions: 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", max_deletions: 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", start: 10).first.to_s)
|
|
131
|
+
assert_equal("19:1:g", @seq.patscan("N", start: 10).last.to_s)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
test "#patscan mis left is ok" do
|
|
135
|
+
assert_equal("0:7:tacgatg", @seq.patscan("Aacgatg", max_mismatches: 1).first.to_s)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
test "#patscan mis right is ok" do
|
|
139
|
+
assert_equal("13:7:tgcacgg", @seq.patscan("tgcacgA", max_mismatches: 1).first.to_s)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
test "#patscan ins left is ok" do
|
|
143
|
+
assert_equal("0:7:tacgatg", @seq.patscan("Atacgatg", max_insertions: 1).first.to_s)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
test "#patscan ins right is ok" do
|
|
147
|
+
assert_equal("13:7:tgcacgg", @seq.patscan("tgcacggA", max_insertions: 1).first.to_s)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
test "#patscan del left is ok" do
|
|
151
|
+
assert_equal("0:7:tacgatg", @seq.patscan("acgatg", max_deletions: 1).first.to_s)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
test "#patscan del right is ok" do
|
|
155
|
+
assert_equal("12:8:atgcacgg", @seq.patscan("tgcacgg", max_deletions: 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",
|
|
160
|
+
max_mismatches: 1,
|
|
161
|
+
max_insertions: 1,
|
|
162
|
+
max_deletions: 1).first.to_s)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
test "#patmatch in block context returns correctly" do
|
|
166
|
+
@seq.patmatch("tacatgcNagGatgcCacgg",
|
|
167
|
+
max_mismatches: 1,
|
|
168
|
+
max_insertions: 1,
|
|
169
|
+
max_deletions: 1) do |hit|
|
|
170
|
+
assert_equal("tacgatgctagcatgcacgg", hit.match)
|
|
171
|
+
assert_equal(0, hit.pos)
|
|
172
|
+
assert_equal(20, hit.length)
|
|
173
|
+
break
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|