self
end
+ # Method to concatenate sequence entries.
+ def <<(entry)
+ raise SeqError, "sequences of different types" unless self.type == entry.type
+ raise SeqError, "qual is missing in one entry" unless self.qual.class == entry.qual.class
+
+ self.seq << entry.seq
+ self.qual << entry.qual unless entry.qual.nil?
+
+ self
+ end
+
# Method that returns a subsequence of from a given start position
# and of a given length.
def subseq(start, length = self.length - start)
assert_not_equal(@entry.seq, @entry.shuffle!.seq)
end
+ test "#<< with different types raises" do
+ @entry.seq = "atcg"
+ assert_raise(SeqError) { @entry << Seq.new("test", "atcg", "dna") }
+ end
+
+ test "#<< with missing qual in one entry raises" do
+ @entry.seq = "atcg"
+ @entry.type = "dna"
+ assert_raise(SeqError) { @entry << Seq.new("test", "atcg", "dna", "IIII") }
+ @entry.qual = "IIII"
+ assert_raise(SeqError) { @entry << Seq.new("test", "atcg", "dna") }
+ end
+
+ test "#<< with nil qual in both entries dont raise" do
+ @entry.seq = "atcg"
+ assert_nothing_raised { @entry << Seq.new("test", "atcg") }
+ end
+
+ test "#<< with qual in both entries dont raise" do
+ @entry.seq = "atcg"
+ @entry.type = "dna"
+ @entry.qual = "IIII"
+ assert_nothing_raised { @entry << Seq.new("test", "atcg", "dna", "IIII") }
+ end
+
+ test "#<< without qual returns correctly" do
+ @entry.seq = "atcg"
+ @entry << Seq.new("test", "ATCG")
+ assert_equal("atcgATCG", @entry.seq)
+ end
+
+ test "#<< with qual returns correctly" do
+ @entry.seq = "atcg"
+ @entry.type = "dna"
+ @entry.qual = "HHHH"
+ @entry << Seq.new("test", "ATCG", "dna", "IIII")
+ assert_equal("atcgATCG", @entry.seq)
+ assert_equal("HHHHIIII", @entry.qual)
+ end
+
test "#subseq with start < 0 raises" do
@entry.seq = "ATCG"
assert_raise(SeqError) { @entry.subseq(-1, 1) }