New Upstream Release - golang-github-shenwei356-bwt
Ready changes
Summary
Merged new upstream version: 0.6.1 (was: 0.6.0).
Resulting package
Built on 2022-12-14T04:36 (took 2m56s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-releases golang-github-shenwei356-bwt-dev
Lintian Result
Diff
diff --git a/bwt.go b/bwt.go
index bfa2fdf..fe2bb67 100644
--- a/bwt.go
+++ b/bwt.go
@@ -13,9 +13,15 @@ var CheckEndSymbol = true
// ErrEndSymbolExisted means you should choose another EndSymbol
var ErrEndSymbolExisted = errors.New("bwt: end-symbol existed in string")
+// ErrEmptySeq means a empty sequence is given
+var ErrEmptySeq = errors.New("bwt: empty sequence")
+
// Transform returns Burrows–Wheeler transform of a byte slice.
// See https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform
func Transform(s []byte, es byte) ([]byte, error) {
+ if len(s) == 0 {
+ return nil, ErrEmptySeq
+ }
if CheckEndSymbol {
for _, c := range s {
if c == es {
@@ -94,6 +100,9 @@ var ErrInvalidSuffixArray = errors.New("bwt: invalid suffix array")
// FromSuffixArray compute BWT from sa
func FromSuffixArray(s []byte, sa []int, es byte) ([]byte, error) {
+ if len(s) == 0 {
+ return nil, ErrEmptySeq
+ }
if len(s)+1 != len(sa) || sa[0] != len(s) {
return nil, ErrInvalidSuffixArray
}
diff --git a/bwt_test.go b/bwt_test.go
index dd55350..59f2ad2 100644
--- a/bwt_test.go
+++ b/bwt_test.go
@@ -35,6 +35,16 @@ func TestFromSuffixArray(t *testing.T) {
}
}
+func TestFromSuffixArrayEmptySeq(t *testing.T) {
+ s := ""
+
+ sa := SuffixArray([]byte(s))
+ _, err := FromSuffixArray([]byte(s), sa, '$')
+ if err == nil || err != ErrEmptySeq {
+ t.Error("Test failed: FromSuffixArray error")
+ }
+}
+
func TestSA(t *testing.T) {
s := "mississippi"
sa := SuffixArray([]byte(s))
diff --git a/debian/changelog b/debian/changelog
index 622a78d..ac888d1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+golang-github-shenwei356-bwt (0.6.1-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Wed, 14 Dec 2022 04:35:00 -0000
+
golang-github-shenwei356-bwt (0.6.0-2) unstable; urgency=medium
[ Debian Janitor ]
diff --git a/fmi/fmi.go b/fmi/fmi.go
index 6a6867e..44b7c5d 100644
--- a/fmi/fmi.go
+++ b/fmi/fmi.go
@@ -51,6 +51,9 @@ func NewFMIndex() *FMIndex {
// Transform return Burrows-Wheeler-Transform of s
func (fmi *FMIndex) Transform(s []byte) ([]byte, error) {
+ if len(s) == 0 {
+ return nil, bwt.ErrEmptySeq
+ }
var err error
sa := bwt.SuffixArray(s)
@@ -116,6 +119,9 @@ func (fmi *FMIndex) nextLetterInAlphabet(c byte) byte {
// Locate locates the pattern
func (fmi *FMIndex) Locate(query []byte, mismatches int) ([]int, error) {
+ if len(query) == 0 {
+ return []int{}, nil
+ }
var locations []int
locationsMap := make(map[int]struct{})
@@ -224,6 +230,9 @@ func (fmi *FMIndex) Locate(query []byte, mismatches int) ([]int, error) {
// Match is a simple version of Locate, which returns immediately for a match.
func (fmi *FMIndex) Match(query []byte, mismatches int) (bool, error) {
+ if len(query) == 0 {
+ return false, nil
+ }
if mismatches == 0 {
// letters := byteutil.Alphabet(query)
count := make([]int, 128)
@@ -342,20 +351,21 @@ func (fmi *FMIndex) String() string {
// C[c] is a table that, for each character c in the alphabet,
// contains the number of occurrences of lexically smaller characters
// in the text.
-// func ComputeC(L []byte, alphabet []byte) map[byte]int {
-// if alphabet == nil {
-// alphabet = byteutil.Alphabet(L)
-// }
-// C := make(map[byte]int, len(alphabet))
-// count := 0
-// for _, c := range L {
-// if _, ok := C[c]; !ok {
-// C[c] = count
-// }
-// count++
-// }
-// return C
-// }
+//
+// func ComputeC(L []byte, alphabet []byte) map[byte]int {
+// if alphabet == nil {
+// alphabet = byteutil.Alphabet(L)
+// }
+// C := make(map[byte]int, len(alphabet))
+// count := 0
+// for _, c := range L {
+// if _, ok := C[c]; !ok {
+// C[c] = count
+// }
+// count++
+// }
+// return C
+// }
func computeC(L []byte) []int {
C := make([]int, 128)
count := 0
@@ -370,32 +380,33 @@ func computeC(L []byte) []int {
// ComputeOccurrence returns occurrence information.
// Occ(c, k) is the number of occurrences of character c in the prefix L[1..k]
-// func ComputeOccurrence(bwt []byte, letters []byte) map[byte]*[]int32 {
-// if letters == nil {
-// letters = byteutil.Alphabet(bwt)
-// }
-// occ := make(map[byte]*[]int32, len(letters)-1)
-// for _, letter := range letters {
-// t := make([]int32, 1, len(bwt))
-// t[0] = 0
-// occ[letter] = &t
-// }
-// t := make([]int32, 1, len(bwt))
-// t[0] = 1
-// occ[bwt[0]] = &t
-// var letter, k byte
-// var v *[]int32
-// for _, letter = range bwt[1:] {
-// for k, v = range occ {
-// if k == letter {
-// *v = append(*v, (*v)[len(*v)-1]+1)
-// } else {
-// *v = append(*v, (*v)[len(*v)-1])
-// }
-// }
-// }
-// return occ
-// }
+//
+// func ComputeOccurrence(bwt []byte, letters []byte) map[byte]*[]int32 {
+// if letters == nil {
+// letters = byteutil.Alphabet(bwt)
+// }
+// occ := make(map[byte]*[]int32, len(letters)-1)
+// for _, letter := range letters {
+// t := make([]int32, 1, len(bwt))
+// t[0] = 0
+// occ[letter] = &t
+// }
+// t := make([]int32, 1, len(bwt))
+// t[0] = 1
+// occ[bwt[0]] = &t
+// var letter, k byte
+// var v *[]int32
+// for _, letter = range bwt[1:] {
+// for k, v = range occ {
+// if k == letter {
+// *v = append(*v, (*v)[len(*v)-1]+1)
+// } else {
+// *v = append(*v, (*v)[len(*v)-1])
+// }
+// }
+// }
+// return occ
+// }
func computeOccurrence(bwt []byte, letters []byte) []*[]int32 {
if letters == nil {
count := make([]int, 128)
diff --git a/fmi/fmi_test.go b/fmi/fmi_test.go
index c5d3ebd..c994aa6 100644
--- a/fmi/fmi_test.go
+++ b/fmi/fmi_test.go
@@ -2,6 +2,8 @@ package fmi
import (
"testing"
+
+ "github.com/shenwei356/bwt"
)
type Case struct {
@@ -11,6 +13,8 @@ type Case struct {
}
var cases = []Case{
+ {"", "abc", 0, []int{}},
+ {"mississippi", "", 0, []int{}},
{"mississippi", "iss", 0, []int{1, 4}},
{"abcabcabc", "abc", 0, []int{0, 3, 6}},
{"abcabcabc", "gef", 0, []int{}},
@@ -43,8 +47,12 @@ func TestLocate(t *testing.T) {
fmi = NewFMIndex()
_, err = fmi.Transform([]byte(c.s))
if err != nil {
- t.Errorf("case #%d: Transform: %s", i+1, err)
- return
+ if c.s == "" && err == bwt.ErrEmptySeq {
+ continue
+ } else {
+ t.Errorf("case #%d: Transform: %s", i+1, err)
+ return
+ }
}
match, err = fmi.Match([]byte(c.q), c.m)
@@ -70,8 +78,12 @@ func TestMatch(t *testing.T) {
fmi = NewFMIndex()
_, err = fmi.Transform([]byte(c.s))
if err != nil {
- t.Errorf("case #%d: Transform: %s", i+1, err)
- return
+ if c.s == "" && err == bwt.ErrEmptySeq {
+ continue
+ } else {
+ t.Errorf("case #%d: Transform: %s", i+1, err)
+ return
+ }
}
loc, err = fmi.Locate([]byte(c.q), c.m)
Debdiff
File lists identical (after any substitutions)
No differences were encountered in the control files