107 lines
2.0 KiB
Go
107 lines
2.0 KiB
Go
//go:build !windows
|
|
|
|
package platform
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/tetratelabs/wazero/internal/testing/require"
|
|
)
|
|
|
|
func TestFdSet(t *testing.T) {
|
|
allBitsSetAtIndex0 := FdSet{}
|
|
allBitsSetAtIndex0.Bits[0] = -1
|
|
|
|
tests := []struct {
|
|
name string
|
|
init FdSet
|
|
exec func(fdSet *FdSet)
|
|
expected FdSet
|
|
}{
|
|
{
|
|
name: "all bits set",
|
|
exec: func(fdSet *FdSet) {
|
|
for fd := 0; fd < nfdbits; fd++ {
|
|
fdSet.Set(fd)
|
|
}
|
|
},
|
|
expected: allBitsSetAtIndex0,
|
|
},
|
|
{
|
|
name: "all bits cleared",
|
|
init: allBitsSetAtIndex0,
|
|
exec: func(fdSet *FdSet) {
|
|
for fd := 0; fd < nfdbits; fd++ {
|
|
fdSet.Clear(fd)
|
|
}
|
|
},
|
|
expected: FdSet{},
|
|
},
|
|
{
|
|
name: "zero should clear all bits",
|
|
init: allBitsSetAtIndex0,
|
|
exec: func(fdSet *FdSet) {
|
|
fdSet.Zero()
|
|
},
|
|
expected: FdSet{},
|
|
},
|
|
{
|
|
name: "is-set should return true for all bits",
|
|
init: allBitsSetAtIndex0,
|
|
exec: func(fdSet *FdSet) {
|
|
for i := range fdSet.Bits {
|
|
require.True(t, fdSet.IsSet(i))
|
|
}
|
|
},
|
|
expected: allBitsSetAtIndex0,
|
|
},
|
|
{
|
|
name: "is-set should return true for all odd bits",
|
|
init: FdSet{},
|
|
exec: func(fdSet *FdSet) {
|
|
for fd := 1; fd < nfdbits; fd += 2 {
|
|
fdSet.Set(fd)
|
|
}
|
|
for fd := 0; fd < nfdbits; fd++ {
|
|
isSet := fdSet.IsSet(fd)
|
|
if fd&0x1 == 0x1 {
|
|
require.True(t, isSet)
|
|
} else {
|
|
require.False(t, isSet)
|
|
}
|
|
}
|
|
fdSet.Zero()
|
|
},
|
|
expected: FdSet{},
|
|
},
|
|
{
|
|
name: "should clear all even bits",
|
|
init: allBitsSetAtIndex0,
|
|
exec: func(fdSet *FdSet) {
|
|
for fd := 0; fd < nfdbits; fd += 2 {
|
|
fdSet.Clear(fd)
|
|
}
|
|
for fd := 0; fd < nfdbits; fd++ {
|
|
isSet := fdSet.IsSet(fd)
|
|
if fd&0x1 == 0x1 {
|
|
require.True(t, isSet)
|
|
} else {
|
|
require.False(t, isSet)
|
|
}
|
|
}
|
|
fdSet.Zero()
|
|
},
|
|
expected: FdSet{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tc := tt
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
x := tc.init
|
|
tc.exec(&x)
|
|
require.Equal(t, tc.expected, x)
|
|
})
|
|
}
|
|
}
|