Fix "PR c++/92804 ICE trying to use concept as a nested-name-specifier"
[official-gcc.git] / libgo / go / syscall / syscall_freebsd_test.go
blob3ccfe5d463f0e8eba5f02aea7e4fd2beaed08e1f
1 // Copyright 2018 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.
5 // +build freebsd
7 package syscall_test
9 import (
10 "fmt"
11 "syscall"
12 "testing"
13 "unsafe"
16 func TestConvertFromDirent11(t *testing.T) {
17 const (
18 filenameFmt = "%04d"
19 numFiles = 64
20 fixedHdrSize = int(unsafe.Offsetof(syscall.Dirent_freebsd11{}.Name))
23 namlen := len(fmt.Sprintf(filenameFmt, 0))
24 reclen := syscall.Roundup(fixedHdrSize+namlen+1, 4)
25 old := make([]byte, numFiles*reclen)
26 for i := 0; i < numFiles; i++ {
27 dent := syscall.Dirent_freebsd11{
28 Fileno: uint32(i + 1),
29 Reclen: uint16(reclen),
30 Type: syscall.DT_REG,
31 Namlen: uint8(namlen),
33 rec := make([]byte, reclen)
34 copy(rec, (*[fixedHdrSize]byte)(unsafe.Pointer(&dent))[:])
35 copy(rec[fixedHdrSize:], fmt.Sprintf(filenameFmt, i+1))
36 copy(old[i*reclen:], rec)
39 buf := make([]byte, 2*len(old))
40 n := syscall.ConvertFromDirents11(buf, old)
42 names := make([]string, 0, numFiles)
43 _, _, names = syscall.ParseDirent(buf[:n], -1, names)
45 if len(names) != numFiles {
46 t.Errorf("expected %d files, have %d; names: %q", numFiles, len(names), names)
49 for i, name := range names {
50 if expected := fmt.Sprintf(filenameFmt, i+1); name != expected {
51 t.Errorf("expected names[%d] to be %q; got %q", i, expected, name)