forked from TrueCloudLab/hrw
Panic if provided value is not a slice
Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>
This commit is contained in:
parent
fad35bbd3b
commit
22b833d972
2 changed files with 4 additions and 11 deletions
4
hrw.go
4
hrw.go
|
@ -109,7 +109,7 @@ func SortSliceByWeightIndex(slice interface{}, weights []float64, hash uint64) {
|
||||||
func prepareRule(slice interface{}) []uint64 {
|
func prepareRule(slice interface{}) []uint64 {
|
||||||
t := reflect.TypeOf(slice)
|
t := reflect.TypeOf(slice)
|
||||||
if t.Kind() != reflect.Slice {
|
if t.Kind() != reflect.Slice {
|
||||||
return nil
|
panic("HRW sort expects slice, got " + t.Kind().String())
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -188,7 +188,7 @@ func prepareRule(slice interface{}) []uint64 {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if _, ok := val.Index(0).Interface().(Hasher); !ok {
|
if _, ok := val.Index(0).Interface().(Hasher); !ok {
|
||||||
return nil
|
panic("slice elements must implement hrw.Hasher")
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < length; i++ {
|
for i := 0; i < length; i++ {
|
||||||
|
|
11
hrw_test.go
11
hrw_test.go
|
@ -113,15 +113,13 @@ func TestSortSliceByValueFail(t *testing.T) {
|
||||||
t.Run("must be slice", func(t *testing.T) {
|
t.Run("must be slice", func(t *testing.T) {
|
||||||
actual := 10
|
actual := 10
|
||||||
hash := Hash(testKey)
|
hash := Hash(testKey)
|
||||||
require.NotPanics(t, func() { SortSliceByValue(actual, hash) })
|
require.Panics(t, func() { SortSliceByValue(actual, hash) })
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("must 'fail' for unknown type", func(t *testing.T) {
|
t.Run("must 'fail' for unknown type", func(t *testing.T) {
|
||||||
actual := []unknown{1, 2, 3, 4, 5}
|
actual := []unknown{1, 2, 3, 4, 5}
|
||||||
expect := []unknown{1, 2, 3, 4, 5}
|
|
||||||
hash := Hash(testKey)
|
hash := Hash(testKey)
|
||||||
SortSliceByValue(actual, hash)
|
require.Panics(t, func() { SortSliceByValue(actual, hash) })
|
||||||
require.Equal(t, expect, actual)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,11 +173,6 @@ func TestSortSliceByValueIntSlice(t *testing.T) {
|
||||||
expect: []uint32{5, 1, 2, 0, 3, 4},
|
expect: []uint32{5, 1, 2, 0, 3, 4},
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
actual: Uint32Slice{0, 1, 2, 3, 4, 5},
|
|
||||||
expect: Uint32Slice{0, 1, 2, 3, 4, 5},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
actual: []int64{0, 1, 2, 3, 4, 5},
|
actual: []int64{0, 1, 2, 3, 4, 5},
|
||||||
expect: []int64{5, 3, 0, 1, 4, 2},
|
expect: []int64{5, 3, 0, 1, 4, 2},
|
||||||
|
|
Loading…
Reference in a new issue