Add AnySet() to topologymanager bitmask API

This commit is contained in:
Kevin Klues 2020-07-18 18:31:39 +00:00
parent d9c3d15018
commit 9f5f401d60
2 changed files with 58 additions and 0 deletions

View File

@ -33,6 +33,7 @@ type BitMask interface {
IsEqual(mask BitMask) bool
IsEmpty() bool
IsSet(bit int) bool
AnySet(bits []int) bool
IsNarrowerThan(mask BitMask) bool
String() string
Count() int
@ -120,6 +121,16 @@ func (s *bitMask) IsSet(bit int) bool {
return (*s & (1 << uint64(bit))) > 0
}
// AnySet checks bit in mask to see if any provided bit is set to one
func (s *bitMask) AnySet(bits []int) bool {
for _, b := range bits {
if s.IsSet(b) {
return true
}
}
return false
}
// IsEqual checks if masks are equal
func (s *bitMask) IsEqual(mask BitMask) bool {
return *s == *mask.(*bitMask)

View File

@ -381,6 +381,53 @@ func TestIsSet(t *testing.T) {
}
}
func TestAnySet(t *testing.T) {
tcases := []struct {
name string
mask []int
checkBits []int
expectedSet bool
}{
{
name: "Check if any bits from 11 in mask 00 is set",
mask: nil,
checkBits: []int{0, 1},
expectedSet: false,
},
{
name: "Check if any bits from 11 in mask 01 is set",
mask: []int{0},
checkBits: []int{0, 1},
expectedSet: true,
},
{
name: "Check if any bits from 11 in mask 11 is set",
mask: []int{0, 1},
checkBits: []int{0, 1},
expectedSet: true,
},
{
name: "Check if any bit outside range 0-63 is set",
mask: []int{0, 1},
checkBits: []int{64, 65},
expectedSet: false,
},
{
name: "Check if any bits from 1001 in mask 0110 is set",
mask: []int{1, 2},
checkBits: []int{0, 3},
expectedSet: false,
},
}
for _, tc := range tcases {
mask, _ := NewBitMask(tc.mask...)
set := mask.AnySet(tc.checkBits)
if set != tc.expectedSet {
t.Errorf("Expected value to be %v, got %v", tc.expectedSet, set)
}
}
}
func TestIsEqual(t *testing.T) {
tcases := []struct {
name string