github.com/biogo/biogo@v1.0.4/align/align_test.go (about)

     1  // Copyright ©2011-2012 The bíogo Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package align
     6  
     7  import (
     8  	"fmt"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/biogo/biogo/alphabet"
    13  	"github.com/biogo/biogo/io/seqio/fasta"
    14  	"github.com/biogo/biogo/seq/linear"
    15  	"gopkg.in/check.v1"
    16  )
    17  
    18  // Tests
    19  func Test(t *testing.T) { check.TestingT(t) }
    20  
    21  type S struct{}
    22  
    23  var _ = check.Suite(&S{})
    24  
    25  func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in example tests.\n") }
    26  
    27  // https://github.com/biogo/biogo/issues/58
    28  func (s *S) TestIssue58(c *check.C) {
    29  	a := "GCTCACTAAAAACACAATCTACAACAGACGTTGCACTAACACTGTAATTGCCTTTAGTCC"
    30  	b := "ACTGCGTA"
    31  
    32  	nwsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte(a))}
    33  	nwsa.Alpha = alphabet.DNAgapped
    34  	nwsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte(b))}
    35  	nwsb.Alpha = alphabet.DNAgapped
    36  
    37  	needle := NWAffine{
    38  		Matrix: Linear{
    39  			{0, -1, -1, -1, -1},
    40  			{-1, 1, -1, -1, -1},
    41  			{-1, -1, 1, -1, -1},
    42  			{-1, -1, -1, 1, -1},
    43  			{-1, -1, -1, -1, 1},
    44  		},
    45  		GapOpen: -1,
    46  	}
    47  
    48  	aln, err := needle.Align(nwsa, nwsb)
    49  	c.Check(err, check.Equals, nil)
    50  	c.Check(fmt.Sprint(aln), check.Equals, "[[0,4)/-=-5 [4,7)/[0,3)=3 [7,32)/-=-26 [32,34)/[3,5)=2 [34,43)/-=-10 [43,46)/[5,8)=3 [46,60)/-=-15]")
    51  }
    52  
    53  func BenchmarkSWAlign(b *testing.B) {
    54  	t := &linear.Seq{}
    55  	t.Alpha = alphabet.DNAgapped
    56  	r := fasta.NewReader(strings.NewReader(crspFa), t)
    57  	swsa, _ := r.Read()
    58  	swsb, _ := r.Read()
    59  
    60  	smith := SW{
    61  		{2, -1, -1, -1, -1},
    62  		{-1, 2, -1, -1, -1},
    63  		{-1, -1, 2, -1, -1},
    64  		{-1, -1, -1, 2, -1},
    65  		{-1, -1, -1, -1, 0},
    66  	}
    67  	b.ResetTimer()
    68  	for i := 0; i < b.N; i++ {
    69  		smith.Align(swsa, swsb)
    70  	}
    71  }
    72  
    73  func BenchmarkNWAlign(b *testing.B) {
    74  	t := &linear.Seq{}
    75  	t.Alpha = alphabet.DNAgapped
    76  	r := fasta.NewReader(strings.NewReader(crspFa), t)
    77  	nwsa, _ := r.Read()
    78  	nwsb, _ := r.Read()
    79  
    80  	needle := NW{
    81  		{10, -3, -1, -4, -5},
    82  		{-3, 9, -5, 0, -5},
    83  		{-1, -5, 7, -3, -5},
    84  		{-4, 0, -3, 8, -5},
    85  		{-4, -4, -4, -4, 0},
    86  	}
    87  
    88  	b.ResetTimer()
    89  	for i := 0; i < b.N; i++ {
    90  		needle.Align(nwsa, nwsb)
    91  	}
    92  }
    93  
    94  func BenchmarkSWAffineAlign(b *testing.B) {
    95  	t := &linear.Seq{}
    96  	t.Alpha = alphabet.DNAgapped
    97  	r := fasta.NewReader(strings.NewReader(crspFa), t)
    98  	swsa, _ := r.Read()
    99  	swsb, _ := r.Read()
   100  
   101  	smith := SWAffine{
   102  		Matrix: Linear{
   103  			{2, -1, -1, -1, -1},
   104  			{-1, 2, -1, -1, -1},
   105  			{-1, -1, 2, -1, -1},
   106  			{-1, -1, -1, 2, -1},
   107  			{-1, -1, -1, -1, 0},
   108  		},
   109  		GapOpen: -5,
   110  	}
   111  	b.ResetTimer()
   112  	for i := 0; i < b.N; i++ {
   113  		smith.Align(swsa, swsb)
   114  	}
   115  }
   116  
   117  func BenchmarkNWAffineAlign(b *testing.B) {
   118  	t := &linear.Seq{}
   119  	t.Alpha = alphabet.DNAgapped
   120  	r := fasta.NewReader(strings.NewReader(crspFa), t)
   121  	nwsa, _ := r.Read()
   122  	nwsb, _ := r.Read()
   123  
   124  	needle := NWAffine{
   125  		Matrix: Linear{
   126  			{10, -3, -1, -4, -5},
   127  			{-3, 9, -5, 0, -5},
   128  			{-1, -5, 7, -3, -5},
   129  			{-4, 0, -3, 8, -5},
   130  			{-4, -4, -4, -4, 0},
   131  		},
   132  		GapOpen: -10,
   133  	}
   134  
   135  	b.ResetTimer()
   136  	for i := 0; i < b.N; i++ {
   137  		needle.Align(nwsa, nwsb)
   138  	}
   139  }