Browse Source

added PrefixEndBytes (#186)

* added PrefixToBytes

* added test

* added comment
pull/1780/head
Sunny Aggarwal 7 years ago
committed by Anton Kaliaev
parent
commit
a807b5db57
2 changed files with 54 additions and 0 deletions
  1. +26
    -0
      common/byteslice.go
  2. +28
    -0
      common/byteslice_test.go

+ 26
- 0
common/byteslice.go View File

@ -45,3 +45,29 @@ func TrimmedString(b []byte) string {
return string(bytes.TrimLeft(b, trimSet)) return string(bytes.TrimLeft(b, trimSet))
} }
// PrefixEndBytes returns the end byteslice for a noninclusive range
// that would include all byte slices for which the input is the prefix
func PrefixEndBytes(prefix []byte) []byte {
if prefix == nil {
return nil
}
end := make([]byte, len(prefix))
copy(end, prefix)
finished := false
for !finished {
if end[len(end)-1] != byte(255) {
end[len(end)-1]++
finished = true
} else {
end = end[:len(end)-1]
if len(end) == 0 {
end = nil
finished = true
}
}
}
return end
}

+ 28
- 0
common/byteslice_test.go View File

@ -0,0 +1,28 @@
package common
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestPrefixEndBytes(t *testing.T) {
assert := assert.New(t)
var testCases = []struct {
prefix []byte
expected []byte
}{
{[]byte{byte(55), byte(255), byte(255), byte(0)}, []byte{byte(55), byte(255), byte(255), byte(1)}},
{[]byte{byte(55), byte(255), byte(255), byte(15)}, []byte{byte(55), byte(255), byte(255), byte(16)}},
{[]byte{byte(55), byte(200), byte(255)}, []byte{byte(55), byte(201)}},
{[]byte{byte(55), byte(255), byte(255)}, []byte{byte(56)}},
{[]byte{byte(255), byte(255), byte(255)}, nil},
{nil, nil},
}
for _, test := range testCases {
end := PrefixEndBytes(test.prefix)
assert.Equal(test.expected, end)
}
}

Loading…
Cancel
Save