1// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
6
7package unix_test
8
9import (
10	"testing"
11
12	"golang.org/x/sys/unix"
13)
14
15func TestFdSet(t *testing.T) {
16	var fdSet unix.FdSet
17	fdSet.Zero()
18	for fd := 0; fd < unix.FD_SETSIZE; fd++ {
19		if fdSet.IsSet(fd) {
20			t.Fatalf("Zero did not clear fd %d", fd)
21		}
22		fdSet.Set(fd)
23	}
24
25	for fd := 0; fd < unix.FD_SETSIZE; fd++ {
26		if !fdSet.IsSet(fd) {
27			t.Fatalf("IsSet(%d): expected true, got false", fd)
28		}
29	}
30
31	fdSet.Zero()
32	for fd := 0; fd < unix.FD_SETSIZE; fd++ {
33		if fdSet.IsSet(fd) {
34			t.Fatalf("Zero did not clear fd %d", fd)
35		}
36	}
37
38	for fd := 1; fd < unix.FD_SETSIZE; fd += 2 {
39		fdSet.Set(fd)
40	}
41
42	for fd := 0; fd < unix.FD_SETSIZE; fd++ {
43		if fd&0x1 == 0x1 {
44			if !fdSet.IsSet(fd) {
45				t.Fatalf("IsSet(%d): expected true, got false", fd)
46			}
47		} else {
48			if fdSet.IsSet(fd) {
49				t.Fatalf("IsSet(%d): expected false, got true", fd)
50			}
51		}
52	}
53
54	for fd := 1; fd < unix.FD_SETSIZE; fd += 2 {
55		fdSet.Clear(fd)
56	}
57
58	for fd := 0; fd < unix.FD_SETSIZE; fd++ {
59		if fdSet.IsSet(fd) {
60			t.Fatalf("Clear(%d) did not clear fd", fd)
61		}
62	}
63}
64