Adds some unit test

Former-commit-id: b1a59df1c87187a1538f30c447d42bbe96402419
This commit is contained in:
2023-11-08 11:13:56 +02:00
parent dedf125f6e
commit a96ecb4837
5 changed files with 81 additions and 3 deletions

View File

@ -5,8 +5,16 @@ import (
"fmt"
)
// Returns a sub sequence start from position 'from' included,
// to position 'to' excluded. Coordinates start at position 0.
// Subsequence returns a subsequence of the BioSequence.
//
// Parameters:
// - from: starting position of the subsequence.
// - to: ending position of the subsequence.
// - circular: indicates whether the subsequence should be circular.
//
// Return:
// - *BioSequence: the subsequence of the BioSequence.
// - error: an error if the subsequence parameters are invalid.
func (sequence *BioSequence) Subsequence(from, to int, circular bool) (*BioSequence, error) {
if from >= to && !circular {
return nil, errors.New("from greater than to")

48
pkg/obiseq/subseq_test.go Normal file
View File

@ -0,0 +1,48 @@
package obiseq
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSubsequence(t *testing.T) {
// Test case 1: Subsequence with valid parameters and non-circular
seq := NewBioSequence("ID1", []byte("ATCG"), "")
sub, err := seq.Subsequence(1, 3, false)
assert.NoError(t, err)
assert.Equal(t, []byte("tc"), sub.Sequence())
seq = NewBioSequenceWithQualities("ID1", []byte("ATCG"), "", []byte{40, 30, 20, 10})
sub, err = seq.Subsequence(1, 3, false)
assert.NoError(t, err)
assert.Equal(t, []byte("tc"), sub.Sequence())
assert.Equal(t, Quality([]byte{30, 20}), sub.Qualities())
// Test case 2: Subsequence with valid parameters and circular
seq2 := NewBioSequence("ID1", []byte("ATCG"), "")
sub2, err2 := seq2.Subsequence(3, 2, true)
assert.NoError(t, err2)
assert.Equal(t, []byte("gat"), sub2.Sequence())
seq = NewBioSequenceWithQualities("ID1", []byte("ATCG"), "", []byte{40, 30, 20, 10})
sub, err = seq.Subsequence(3, 2, true)
assert.NoError(t, err)
assert.Equal(t, []byte("gat"), sub.Sequence())
assert.Equal(t, Quality([]byte{10, 40, 30}), sub.Qualities())
// Test case 3: Subsequence with from greater than to and non-circular
seq3 := NewBioSequence("ID1", []byte("ATCG"), "")
_, err3 := seq3.Subsequence(3, 1, false)
assert.EqualError(t, err3, "from greater than to")
// Test case 4: Subsequence with from out of bounds
seq4 := NewBioSequence("ID1", []byte("ATCG"), "")
_, err4 := seq4.Subsequence(-1, 2, false)
assert.EqualError(t, err4, "from out of bounds")
// Test case 5: Subsequence with to out of bounds
seq5 := NewBioSequence("ID1", []byte("ATCG"), "")
_, err5 := seq5.Subsequence(2, 5, false)
assert.EqualError(t, err5, "to out of bounds")
}