cosmos-sdk/x/group/internal/orm/index_property_test.go

61 lines
1.3 KiB
Go

package orm
import (
"testing"
"pgregory.net/rapid"
"github.com/stretchr/testify/require"
)
func TestPrefixRangeProperty(t *testing.T) {
t.Run("TestPrefixRange", rapid.MakeCheck(func(t *rapid.T) {
prefix := rapid.SliceOf(rapid.Byte()).Draw(t, "prefix").([]byte)
start, end := PrefixRange(prefix)
// len(prefix) == 0 => start == nil && end == nil
if len(prefix) == 0 {
require.Nil(t, start)
require.Nil(t, end)
} else {
// start == prefix
require.Equal(t, prefix, start)
// Would overflow if all bytes are 255
wouldOverflow := true
for _, b := range prefix {
if b != 255 {
wouldOverflow = false
}
}
// Overflow => end == nil
if wouldOverflow {
require.Nil(t, end)
} else {
require.Equal(t, len(start), len(end))
// Scan back and find last value that isn't 255
overflowIndex := len(start) - 1
for overflowIndex > 0 && prefix[overflowIndex] == 255 {
overflowIndex--
}
// bytes should be the same up to overflow
// index, one greater at overflow and 0 from
// then on
for i, b := range start {
if i < overflowIndex {
require.Equal(t, b, end[i])
} else if i == overflowIndex {
require.Equal(t, b+1, end[i])
} else {
require.Equal(t, uint8(0), end[i])
}
}
}
}
}))
}