~ubuntu-branches/ubuntu/quantal/genometools/quantal-backports

« back to all changes in this revision

Viewing changes to testsuite/gt_encseq_include.rb

  • Committer: Package Import Robot
  • Author(s): Sascha Steinbiss
  • Date: 2012-07-09 14:10:23 UTC
  • Revision ID: package-import@ubuntu.com-20120709141023-juuu4spm6chqsf9o
Tags: upstream-1.4.1
ImportĀ upstreamĀ versionĀ 1.4.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Name "gt encseq encode|decode simple"
 
2
Keywords "gt_encseq_encode encseq gt_encseq_decode"
 
3
Test do
 
4
  run "#{$bin}gt encseq encode #{$testdata}foobar.fas"
 
5
  run "#{$bin}gt encseq decode foobar.fas"
 
6
  run "diff #{last_stdout} #{$testdata}foobar.fas"
 
7
end
 
8
 
 
9
Name "gt encseq encode multiple files without indexname"
 
10
Keywords "encseq gt_encseq_encode"
 
11
Test do
 
12
  run "#{$bin}gt encseq encode #{$testdata}foobar.fas"
 
13
  run_test "#{$bin}gt encseq encode #{$testdata}foobar.fas " + \
 
14
           "#{$testdata}foobar.fas", :retval => 1
 
15
  grep(last_stderr, /if more than one input file is given/)
 
16
end
 
17
 
 
18
Name "gt encseq decode lossless without ois"
 
19
Keywords "encseq gt_encseq_decode lossless"
 
20
Test do
 
21
  run "#{$bin}gt encseq encode #{$testdata}foobar.fas"
 
22
  run_test "#{$bin}gt encseq decode -lossless foobar.fas", \
 
23
           :retval => 1
 
24
  grep(last_stderr, /cannot open file.*ois/)
 
25
end
 
26
 
 
27
STDREADMODES  = ["fwd", "rev"]
 
28
DNAREADMODES  = STDREADMODES + ["cpl", "rcl"]
 
29
DNATESTSEQS   = ["#{$testdata}foobar.fas",
 
30
                 "#{$testdata}gt_bioseq_succ_3.fas",
 
31
                 "#{$testdata}at100K1"]
 
32
AATESTSEQS    = ["#{$testdata}trembl-eqlen.faa"]
 
33
NUMSAMPLES    = 5
 
34
 
 
35
def es_revcomp(seq)
 
36
  es_comp(seq).reverse
 
37
end
 
38
 
 
39
def es_comp(seq)
 
40
  seq.tr("aAcCgGtTnNrRyYmMkKwWsSbBdDhHvV","tTgGcCaAnNyYrRkKmMwWsSvVhHdDbB")
 
41
end
 
42
 
 
43
def mapwildcards(seq)
 
44
  seq.downcase.tr("rRyYmMkKwWsSbBdDhHvV", "nNnNnNnNnNnNnNnNnNnN")
 
45
end
 
46
 
 
47
def getseq(filename, mirrored = false, rm = "fwd")
 
48
  sequences = []
 
49
  rcseqs = []
 
50
  File.open(filename) do |file|
 
51
    seqs = file.read.split(">")
 
52
    seqs.shift
 
53
    seqs.each do |seq|
 
54
      seqarr = seq.split(/\n/)
 
55
      header = seqarr.shift.chomp
 
56
      seq = seqarr.collect{|v| v.chomp}.join('')
 
57
      sequences.push(seq)
 
58
      rcseqs.push(es_revcomp(seq))
 
59
    end
 
60
  end
 
61
  ret =  sequences.join("|")
 
62
  if mirrored then
 
63
    ret += "|" + rcseqs.reverse.join("|")
 
64
  end
 
65
  case rm
 
66
    when "fwd" then
 
67
      #pass
 
68
    when "rev" then
 
69
      ret = ret.reverse
 
70
    when "cpl" then
 
71
      ret = es_comp(ret)
 
72
    when "rcl" then
 
73
      ret = es_revcomp(ret)
 
74
    else
 
75
      raise "unknown readmode"
 
76
  end
 
77
  ret
 
78
end
 
79
 
 
80
def run_encseq_comparison(filename, mirrored, lossless, readmode, singlechars,
 
81
                          numsamples = NUMSAMPLES)
 
82
  seq = getseq(filename, mirrored, readmode)
 
83
  ranges = []
 
84
  numsamples.times do
 
85
    len = rand((seq.length)/2)
 
86
    start = rand(seq.length-1-len);
 
87
    stop = start + len
 
88
    ranges.push([start, stop])
 
89
  end
 
90
 
 
91
  ranges.each do |rng|
 
92
    line = "#{$bin}gt encseq decode -output concat " + \
 
93
           "-range #{rng[0]} #{rng[1]} " + \
 
94
           "#{"-lossless" if lossless} " + \
 
95
           "-dir #{readmode} #{"-mirrored" if mirrored} " + \
 
96
           "#{"-singlechars" if singlechars} #{filename.split('/').last}"
 
97
    if mirrored and AATESTSEQS.include?(filename)
 
98
      # -mirroring should fail on proteins
 
99
      run_test(line, :retval => 1)
 
100
    else
 
101
      run_test line
 
102
      File.open("seqout", "w+") do |f|
 
103
        outseq = seq[rng[0]..rng[1]]
 
104
        if DNATESTSEQS.include?(filename) and !lossless then
 
105
          outseq = mapwildcards(outseq)
 
106
        end
 
107
        f.write(outseq)
 
108
        f.write("\n")
 
109
      end
 
110
      run "diff seqout #{last_stdout}"
 
111
    end
 
112
  end
 
113
end
 
114
 
 
115
def testformirrored(s, readmode)
 
116
  Name "gt encseq decode #{s.split('/').last} #{readmode}"
 
117
  Keywords "encseq gt_encseq_decode mirroring lossless"
 
118
  Test do
 
119
    [false, true].each do |lossless|
 
120
      run "rm -f #{s}.*"
 
121
      run "#{$bin}gt encseq encode " + \
 
122
              "#{"-lossless" if lossless} " + \
 
123
              "#{s}"
 
124
      [false, true].each do |mirrored|
 
125
        [false, true].each do |singlechars|
 
126
          run_encseq_comparison(s, mirrored, lossless, readmode, singlechars)
 
127
          seq = getseq(s, mirrored, readmode)
 
128
          line = "#{$bin}gt encseq decode -output concat -dir #{readmode} " + \
 
129
                  "#{"-mirrored" if mirrored} " + \
 
130
                  "#{"-lossless" if lossless} " + \
 
131
                  "#{"-singlechars" if singlechars} ./#{s.split('/').last}"
 
132
          if mirrored and AATESTSEQS.include?(s)
 
133
            # -mirroring should fail on proteins
 
134
            run_test(line, :retval => 1)
 
135
          else
 
136
            run_test line
 
137
            File.open("seqout", "w+") do |f|
 
138
              if DNATESTSEQS.include?(s) and !lossless then
 
139
                seq = mapwildcards(seq)
 
140
              end
 
141
              f.write(seq)
 
142
              f.write("\n")
 
143
            end
 
144
            run "diff seqout #{last_stdout}"
 
145
          end
 
146
        end
 
147
      end
 
148
    end
 
149
  end
 
150
end
 
151
 
 
152
DNATESTSEQS.each do |s|
 
153
  DNAREADMODES.each do |readmode|
 
154
    testformirrored(s, readmode)
 
155
  end
 
156
end
 
157
 
 
158
AATESTSEQS.each do |s|
 
159
  STDREADMODES.each do |readmode|
 
160
    testformirrored(s, readmode)
 
161
  end
 
162
end
 
163
 
 
164
 
 
165
fastafiles = ["Atinsert.fna",
 
166
              "Duplicate.fna",
 
167
              "Random-Small.fna",
 
168
              "Random.fna",
 
169
              "Copysorttest.fna",
 
170
              "Random159.fna",
 
171
              "Random160.fna",
 
172
              "RandomN.fna",
 
173
              "TTT-small.fna",
 
174
              "trna_glutamine.fna",
 
175
              "Small.fna",
 
176
              "Verysmall.fna",
 
177
              "Arabidopsis-C99826.fna"]
 
178
genbankfiles = fastafiles.collect{ |f| f.gsub(".fna",".gbk") }
 
179
emblfiles = fastafiles.collect{ |f| f.gsub(".fna",".embl") }
 
180
 
 
181
[genbankfiles, emblfiles].each do |formatfiles|
 
182
  formatfiles.each do |formatfile|
 
183
    Name "gt sequence formats (#{formatfile})"
 
184
    Keywords "gt_encseq formats"
 
185
    Test do
 
186
      fasta = formatfile.gsub(/\.[a-z]+$/, ".fna")
 
187
      if File.exists?("#{$testdata}#{fasta}") then
 
188
        run "cp #{$testdata}#{formatfile} infile"
 
189
        run_test "#{$bin}gt encseq encode -v -indexname sfx infile"
 
190
        run_test "#{$bin}gt encseq decode -output concat sfx > sfx.seq"
 
191
        run_test "#{$bin}gt encseq info sfx > sfx.info"
 
192
        run_test "#{$bin}gt encseq check sfx"
 
193
        run "cp #{$testdata}#{fasta} infile"
 
194
        run_test "#{$bin}gt encseq encode -v -indexname sfx infile"
 
195
        run_test "#{$bin}gt encseq decode -output concat sfx > sfx2.seq"
 
196
        run_test "#{$bin}gt encseq info sfx > sfx2.info"
 
197
        run "diff sfx.seq sfx2.seq"
 
198
        run "diff sfx.info sfx2.info"
 
199
      end
 
200
    end
 
201
  end
 
202
end
 
203
 
 
204
Name "gt encseq mirrored trailing wildcard"
 
205
Keywords "encseq gt_encseq_encode wildcards mirror"
 
206
Test do
 
207
  run "cp #{$testdata}wildcardatend.fna infile"
 
208
  run_test "#{$bin}gt encseq encode infile"
 
209
  run_test "#{$bin}gt encseq info -mirrored infile | grep range > mirr.info"
 
210
  run "cp #{$testdata}wildcardatend_rev.fna infile"
 
211
  run_test "#{$bin}gt encseq encode infile"
 
212
  run_test "#{$bin}gt encseq info infile | grep range > rev.info"
 
213
  run "diff mirr.info rev.info"
 
214
end
 
215
 
 
216
Name "gt encseq mirrored no trailing wildcard"
 
217
Keywords "encseq gt_encseq_encode wildcards mirror"
 
218
Test do
 
219
  run "cp #{$testdata}nowildcardatend.fna infile"
 
220
  run_test "#{$bin}gt encseq encode infile"
 
221
  run_test "#{$bin}gt encseq info -mirrored infile | grep range > mirr.info"
 
222
  run "cp #{$testdata}nowildcardatend_rev.fna infile"
 
223
  run_test "#{$bin}gt encseq encode infile"
 
224
  run_test "#{$bin}gt encseq info infile | grep range > rev.info"
 
225
  run "diff mirr.info rev.info"
 
226
end
 
227
 
 
228
Name "gt encseq decode single sequence"
 
229
Keywords "encseq gt_encseq_decode single"
 
230
Test do
 
231
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
232
  run_test "#{$bin}gt encseq decode -seq 3 foo"
 
233
  run "diff #{last_stdout} #{$testdata}Atinsert_single_3.fna"
 
234
end
 
235
 
 
236
Name "gt encseq decode single sequence (reverse)"
 
237
Keywords "encseq gt_encseq_decode single"
 
238
Test do
 
239
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
240
  run_test "#{$bin}gt encseq decode -dir rev -seq 17 foo"
 
241
  run "diff #{last_stdout} #{$testdata}Atinsert_single_3_rev.fna"
 
242
end
 
243
 
 
244
Name "gt encseq decode single sequence (invalid seqnumber)"
 
245
Keywords "encseq gt_encseq_decode single"
 
246
Test do
 
247
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
248
  run_test "#{$bin}gt encseq decode -seq 36 foo", :retval => 1
 
249
  grep last_stderr, /exceeds/
 
250
end
 
251
 
 
252
Name "gt encseq decode single sequence (with -output concat)"
 
253
Keywords "encseq gt_encseq_decode single"
 
254
Test do
 
255
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
256
  run_test "#{$bin}gt encseq decode -output concat -seq 36 foo", :retval => 1
 
257
  grep last_stderr, /can only be used with the/
 
258
end
 
259
 
 
260
Name "gt encseq decode sequence range"
 
261
Keywords "encseq gt_encseq_decode seqrange"
 
262
Test do
 
263
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
264
  run_test "#{$bin}gt encseq decode -seqrange 3 7 foo"
 
265
  run "diff #{last_stdout} #{$testdata}Atinsert_seqrange_3-7.fna"
 
266
end
 
267
 
 
268
Name "gt encseq decode sequence range (reverse)"
 
269
Keywords "encseq gt_encseq_decode seqrange"
 
270
Test do
 
271
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
272
  run_test "#{$bin}gt encseq decode -dir rev -seqrange 13 17 foo"
 
273
  run "diff #{last_stdout} #{$testdata}Atinsert_seqrange_13-17_rev.fna"
 
274
end
 
275
 
 
276
Name "gt encseq decode sequence range (invalid range start)"
 
277
Keywords "encseq gt_encseq_decode seqrange"
 
278
Test do
 
279
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
280
  run_test "#{$bin}gt encseq decode -seqrange 37 49 foo", :retval => 1
 
281
  grep last_stderr, /exceeding/
 
282
end
 
283
 
 
284
Name "gt encseq decode sequence range (invalid range end)"
 
285
Keywords "encseq gt_encseq_decode seqrange"
 
286
Test do
 
287
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
288
  run_test "#{$bin}gt encseq decode -seqrange 3 49 foo", :retval => 1
 
289
  grep last_stderr, /exceeding/
 
290
end
 
291
 
 
292
Name "gt encseq decode sequence range (with -output concat)"
 
293
Keywords "encseq gt_encseq_decode seqrange"
 
294
Test do
 
295
  run "#{$bin}gt encseq encode -indexname foo #{$testdata}Atinsert.fna"
 
296
  run_test "#{$bin}gt encseq decode -output concat -seqrange 3 49 foo", \
 
297
           :retval => 1
 
298
  grep last_stderr, /can only be used with the/
 
299
end
 
300
 
 
301
Name "gt encseq Lua bindings"
 
302
Keywords "encseq gt_scripts "
 
303
Test do
 
304
  run_test "#{$bin}gt #{$testdata}gtscripts/encseq.lua #{$testdata}"
 
305
end
 
306
 
 
307
Name "gt encseq 64bit/32bit header (success)"
 
308
Keywords "encseq encseq_file_format"
 
309
Test do
 
310
  is64 = Kernel.system("#{$bin}gt -64bit")
 
311
  if is64 then
 
312
    bit = "64"
 
313
  else
 
314
    bit = "32"
 
315
  end
 
316
  run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}"
 
317
  run "diff #{last_stdout} #{$testdata}foo.#{bit}.info_map"
 
318
  run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}"
 
319
  run "diff #{last_stdout} #{$testdata}foo.#{bit}.info_nomap"
 
320
end
 
321
 
 
322
Name "gt encseq 64bit/32bit header (failure)"
 
323
Keywords "encseq encseq_file_format"
 
324
Test do
 
325
  is64 = Kernel.system("#{$bin}gt -64bit")
 
326
  if !is64 then
 
327
    bit = "64"
 
328
  else
 
329
    bit = "32"
 
330
  end
 
331
  run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}", \
 
332
           :retval => 1
 
333
  grep last_stderr, /please use correct index for this platform/
 
334
  run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}", \
 
335
           :retval => 1
 
336
  grep last_stderr, /please use correct index for this platform/
 
337
end
 
338
 
 
339
Name "gt encseq incompatible file format version"
 
340
Keywords "encseq encseq_file_format"
 
341
Test do
 
342
  is64 = Kernel.system("#{$bin}gt -64bit")
 
343
  if is64 then
 
344
    bit = "64"
 
345
  else
 
346
    bit = "32"
 
347
  end
 
348
  run_test "#{$bin}gt encseq info -noindexname #{$testdata}foo.#{bit}.ver0", \
 
349
           :retval => 1
 
350
  grep last_stderr, /is format version 0/
 
351
  run_test "#{$bin}gt encseq info -noindexname -nomap #{$testdata}foo.#{bit}.ver0", \
 
352
           :retval => 1
 
353
  grep last_stderr, /is format version 0/
 
354
end