File: test_sequence_masker.rb

package info (click to toggle)
ruby-bio 2.0.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,108 kB
  • sloc: ruby: 68,331; perl: 13; makefile: 11; sh: 1
file content (169 lines) | stat: -rw-r--r-- 4,834 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#
# = test/unit/bio/sequence/test_sequence_masker.rb - Unit test for Bio::Sequence::SequenceMasker
#
# Copyright::   Copyright (C) 2010
#               Naohisa Goto <ng@bioruby.org>
# License::     The Ruby License
#

# loading helper routine for testing bioruby
require 'pathname'
load Pathname.new(File.join(File.dirname(__FILE__), ['..'] * 3,
                            'bioruby_test_helper.rb')).cleanpath.to_s

# libraries needed for the tests
require 'test/unit'
require 'bio/sequence'
require 'bio/sequence/sequence_masker'  

module Bio

class TestSequenceMasker < Test::Unit::TestCase

  def setup
    s = "aaacgcattagcaccaccattaccaccacc"
    @raw = s.dup.freeze
    @seq = Bio::Sequence.new(s)
    @seq.quality_scores =
      (0...30).collect { |i| i * 3 }
    @seq.error_probabilities = 
      (0...30).collect { |i| 10 ** -(i * 3 / 10.0) }
  end

  # Very simple enumerator for testing.
  class SimpleEnum
    include Enumerable

    def initialize(ary)
      @ary = ary
    end

    def each(&block)
      @ary.each(&block)
    end
  end #class SimpleEnum

  def test_mask_with_enumerator
    enum = SimpleEnum.new((0..29).to_a)
    newseq = @seq.mask_with_enumerator(enum, 'n') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "naacgcattnncaccaccannaccaccacn"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_enumerator_longer_mask_char
    enum = SimpleEnum.new((0..29).to_a)
    newseq = @seq.mask_with_enumerator(enum, '-*-') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "-*-aacgcatt-*--*-caccacca-*--*-accaccac-*-"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_enumerator_empty_mask_char
    enum = SimpleEnum.new((0..29).to_a)
    newseq = @seq.mask_with_enumerator(enum, '') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "aacgcattcaccaccaaccaccac"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_enumerator_shorter
    enum = SimpleEnum.new((0..10).to_a.freeze)
    enum.freeze
    # normal mask char
    newseq = @seq.mask_with_enumerator(enum, 'n') do |item|
      item > 5
    end
    expected = "aaacgcnnnnncaccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
    # empty mask char
    newseq = @seq.mask_with_enumerator(enum, '') do |item|
      item > 5
    end
    expected = "aaacgccaccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
    # longer mask char
    newseq = @seq.mask_with_enumerator(enum, '-*-') do |item|
      item > 5
    end
    expected = "aaacgc-*--*--*--*--*-caccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_enumerator_excess
    enum = SimpleEnum.new((0..200).to_a.freeze)
    enum.freeze
    # normal mask char
    newseq = @seq.mask_with_enumerator(enum, 'n') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "naacgcattnncaccaccannaccaccacn"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
    # empty mask char
    newseq = @seq.mask_with_enumerator(enum, '') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "aacgcattcaccaccaaccaccac"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
    # longer mask char
    newseq = @seq.mask_with_enumerator(enum, '-*-') do |item|
      i = item % 10
      i == 9 || i == 0
    end
    expected = "-*-aacgcatt-*--*-caccacca-*--*-accaccac-*-"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_quality_score
    newseq = @seq.mask_with_quality_score(30, 'n')
    expected = "nnnnnnnnnngcaccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask
    newseq = @seq.mask_with_quality_score(30, 'n')
    expected = "nnnnnnnnnngcaccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

  def test_mask_with_error_probability
    newseq = @seq.mask_with_error_probability(0.001, 'n')
    expected = "nnnnnnnnnngcaccaccattaccaccacc"
    assert_equal(expected, newseq.seq)
    # not breaking original sequence
    assert_equal(@raw, @seq.seq)
  end

end #class TestSequenceMasker

end #module Bio