github.com/cosmos/cosmos-sdk@v0.50.10/x/group/internal/orm/index_property_test.go (about) 1 package orm 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "pgregory.net/rapid" 8 ) 9 10 func TestPrefixRangeProperty(t *testing.T) { 11 t.Run("TestPrefixRange", rapid.MakeCheck(func(t *rapid.T) { 12 prefix := rapid.SliceOf(rapid.Byte()).Draw(t, "prefix") 13 14 start, end := PrefixRange(prefix) 15 16 // len(prefix) == 0 => start == nil && end == nil 17 if len(prefix) == 0 { 18 require.Nil(t, start) 19 require.Nil(t, end) 20 } else { 21 // start == prefix 22 require.Equal(t, prefix, start) 23 24 // Would overflow if all bytes are 255 25 wouldOverflow := true 26 for _, b := range prefix { 27 if b != 255 { 28 wouldOverflow = false 29 } 30 } 31 32 // Overflow => end == nil 33 if wouldOverflow { 34 require.Nil(t, end) 35 } else { 36 require.Equal(t, len(start), len(end)) 37 38 // Scan back and find last value that isn't 255 39 overflowIndex := len(start) - 1 40 for overflowIndex > 0 && prefix[overflowIndex] == 255 { 41 overflowIndex-- 42 } 43 44 // bytes should be the same up to overflow 45 // index, one greater at overflow and 0 from 46 // then on 47 for i, b := range start { 48 if i < overflowIndex { 49 require.Equal(t, b, end[i]) 50 } else if i == overflowIndex { 51 require.Equal(t, b+1, end[i]) 52 } else { 53 require.Equal(t, uint8(0), end[i]) 54 } 55 } 56 } 57 } 58 })) 59 }