diff --git a/unix/syscall_aix_test.go b/unix/syscall_aix_test.go
index 7563dc2..789f394 100644
--- a/unix/syscall_aix_test.go
+++ b/unix/syscall_aix_test.go
@@ -123,26 +123,6 @@
 	}
 }
 
-func TestSelect(t *testing.T) {
-	_, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-
-	dur := 150 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	_, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-}
-
 func TestPselect(t *testing.T) {
 	if runtime.GOARCH == "ppc64" {
 		t.Skip("pselect issue with structure timespec on AIX 7.2 tl0, skipping test")
diff --git a/unix/syscall_bsd_test.go b/unix/syscall_bsd_test.go
index bee9295..b552324 100644
--- a/unix/syscall_bsd_test.go
+++ b/unix/syscall_bsd_test.go
@@ -7,11 +7,9 @@
 package unix_test
 
 import (
-	"os"
 	"os/exec"
 	"runtime"
 	"testing"
-	"time"
 
 	"golang.org/x/sys/unix"
 )
@@ -48,57 +46,6 @@
 	}
 }
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 250 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	// On some BSDs the actual timeout might also be slightly less than the requested.
-	// Add an acceptable margin to avoid flaky tests.
-	if took < dur*2/3 {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestSysctlRaw(t *testing.T) {
 	if runtime.GOOS == "openbsd" {
 		t.Skip("kern.proc.pid does not exist on OpenBSD")
diff --git a/unix/syscall_linux_test.go b/unix/syscall_linux_test.go
index 01a1028..cc3af9f 100644
--- a/unix/syscall_linux_test.go
+++ b/unix/syscall_linux_test.go
@@ -237,55 +237,6 @@
 	}
 }
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 150 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestPselect(t *testing.T) {
 	for {
 		_, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil)
diff --git a/unix/syscall_solaris_test.go b/unix/syscall_solaris_test.go
index 9598c22..d3e7d2b 100644
--- a/unix/syscall_solaris_test.go
+++ b/unix/syscall_solaris_test.go
@@ -7,63 +7,12 @@
 package unix_test
 
 import (
-	"os"
 	"os/exec"
 	"testing"
-	"time"
 
 	"golang.org/x/sys/unix"
 )
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 150 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestStatvfs(t *testing.T) {
 	if err := unix.Statvfs("", nil); err == nil {
 		t.Fatal(`Statvfs("") expected failure`)
diff --git a/unix/syscall_unix_test.go b/unix/syscall_unix_test.go
index d01964b..bc76875 100644
--- a/unix/syscall_unix_test.go
+++ b/unix/syscall_unix_test.go
@@ -512,6 +512,57 @@
 	}
 }
 
+func TestSelect(t *testing.T) {
+	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 0 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	}
+
+	dur := 250 * time.Millisecond
+	tv := unix.NsecToTimeval(int64(dur))
+	start := time.Now()
+	n, err = unix.Select(0, nil, nil, nil, &tv)
+	took := time.Since(start)
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 0 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	}
+
+	// On some BSDs the actual timeout might also be slightly less than the requested.
+	// Add an acceptable margin to avoid flaky tests.
+	if took < dur*2/3 {
+		t.Errorf("Select: got %v timeout, expected at least %v", took, dur)
+	}
+
+	rr, ww, err := os.Pipe()
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer rr.Close()
+	defer ww.Close()
+
+	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
+		t.Fatal(err)
+	}
+
+	rFdSet := &unix.FdSet{}
+	fd := int(rr.Fd())
+	rFdSet.Set(fd)
+
+	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 1 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 1", n)
+	}
+}
+
 func TestGetwd(t *testing.T) {
 	fd, err := os.Open(".")
 	if err != nil {
