91 lines
1.4 KiB
Go
91 lines
1.4 KiB
Go
|
package dhcpd
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"testing"
|
||
|
"testing/quick"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestBitSet(t *testing.T) {
|
||
|
t.Run("nil", func(t *testing.T) {
|
||
|
var s *bitSet
|
||
|
|
||
|
ok := s.isSet(0)
|
||
|
assert.False(t, ok)
|
||
|
|
||
|
assert.NotPanics(t, func() {
|
||
|
s.set(0, true)
|
||
|
})
|
||
|
|
||
|
ok = s.isSet(0)
|
||
|
assert.False(t, ok)
|
||
|
|
||
|
assert.NotPanics(t, func() {
|
||
|
s.set(0, false)
|
||
|
})
|
||
|
|
||
|
ok = s.isSet(0)
|
||
|
assert.False(t, ok)
|
||
|
})
|
||
|
|
||
|
t.Run("non_nil", func(t *testing.T) {
|
||
|
s := newBitSet()
|
||
|
|
||
|
ok := s.isSet(0)
|
||
|
assert.False(t, ok)
|
||
|
|
||
|
s.set(0, true)
|
||
|
|
||
|
ok = s.isSet(0)
|
||
|
assert.True(t, ok)
|
||
|
|
||
|
s.set(0, false)
|
||
|
|
||
|
ok = s.isSet(0)
|
||
|
assert.False(t, ok)
|
||
|
})
|
||
|
|
||
|
t.Run("non_nil_long", func(t *testing.T) {
|
||
|
s := newBitSet()
|
||
|
|
||
|
s.set(0, true)
|
||
|
s.set(math.MaxUint64, true)
|
||
|
assert.Len(t, s.words, 2)
|
||
|
|
||
|
ok := s.isSet(0)
|
||
|
assert.True(t, ok)
|
||
|
|
||
|
ok = s.isSet(math.MaxUint64)
|
||
|
assert.True(t, ok)
|
||
|
})
|
||
|
|
||
|
t.Run("compare_to_map", func(t *testing.T) {
|
||
|
m := map[uint64]struct{}{}
|
||
|
s := newBitSet()
|
||
|
|
||
|
mapFunc := func(setNew, checkOld, delOld uint64) (ok bool) {
|
||
|
m[setNew] = struct{}{}
|
||
|
delete(m, delOld)
|
||
|
_, ok = m[checkOld]
|
||
|
|
||
|
return ok
|
||
|
}
|
||
|
|
||
|
setFunc := func(setNew, checkOld, delOld uint64) (ok bool) {
|
||
|
s.set(setNew, true)
|
||
|
s.set(delOld, false)
|
||
|
ok = s.isSet(checkOld)
|
||
|
|
||
|
return ok
|
||
|
}
|
||
|
|
||
|
err := quick.CheckEqual(mapFunc, setFunc, &quick.Config{
|
||
|
MaxCount: 10_000,
|
||
|
MaxCountScale: 10,
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
})
|
||
|
}
|