58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package strle
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/filecoin-project/go-bitfield"
|
|
)
|
|
|
|
func TestHumanBitfield(t *testing.T) {
|
|
check := func(ints []uint64, out string) {
|
|
bf := bitfield.NewFromSet(ints)
|
|
h, err := BitfieldToHumanRanges(bf)
|
|
require.NoError(t, err)
|
|
require.Equal(t, out, h)
|
|
}
|
|
|
|
check([]uint64{2, 3, 4}, "2-4")
|
|
check([]uint64{2, 3, 4, 8, 9, 10, 11}, "2-4,8-11")
|
|
check([]uint64{2}, "2")
|
|
check([]uint64{0}, "0")
|
|
check([]uint64{0, 1, 2}, "0-2")
|
|
check([]uint64{0, 1, 5, 9, 11, 13, 14, 19}, "0-1,5,9,11,13-14,19")
|
|
}
|
|
|
|
func TestHumanBitfieldRoundtrip(t *testing.T) {
|
|
check := func(ints []uint64, out string) {
|
|
parsed, err := HumanRangesToBitField(out)
|
|
require.NoError(t, err)
|
|
|
|
h, err := BitfieldToHumanRanges(parsed)
|
|
require.NoError(t, err)
|
|
require.Equal(t, out, h)
|
|
|
|
bf := bitfield.NewFromSet(ints)
|
|
ins, err := bitfield.IntersectBitField(bf, parsed)
|
|
require.NoError(t, err)
|
|
|
|
// if intersected bitfield has the same length as both bitfields they are the same
|
|
ic, err := ins.Count()
|
|
require.NoError(t, err)
|
|
|
|
pc, err := parsed.Count()
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, uint64(len(ints)), ic)
|
|
require.Equal(t, ic, pc)
|
|
}
|
|
|
|
check([]uint64{2, 3, 4}, "2-4")
|
|
check([]uint64{2, 3, 4, 8, 9, 10, 11}, "2-4,8-11")
|
|
check([]uint64{2}, "2")
|
|
check([]uint64{0}, "0")
|
|
check([]uint64{0, 1, 2}, "0-2")
|
|
check([]uint64{0, 1, 5, 9, 11, 13, 14, 19}, "0-1,5,9,11,13-14,19")
|
|
}
|