1
0
Fork 0
mirror of https://github.com/ii64/gouring.git synced 2025-04-23 12:41:15 +02:00
gouring/core_test.go
MastahSenpai 5937800f05
fix(perf): direct field access
Signed-off-by: MastahSenpai <26342994+ii64@users.noreply.github.com>
2022-01-26 01:20:07 +07:00

61 lines
1.1 KiB
Go

package gouring
import (
"strings"
"syscall"
"testing"
"github.com/stretchr/testify/assert"
)
func TestCore(t *testing.T) {
ring, err := New(256, nil)
assert.NoError(t, err, "create ring")
defer func() {
err := ring.Close()
assert.NoError(t, err, "close ring")
}()
mkdata := func(i int) []byte {
return []byte("print me to stdout please" + strings.Repeat("!", i) + "\n")
}
sq := ring.SQ()
n := 5
for i := 0; i < n; i++ {
sqTail := *sq.Tail
sqIdx := sqTail & *sq.RingMask
sqe := &sq.Event[sqIdx]
sqe.Reset()
m := mkdata(i)
sqe.Opcode = IORING_OP_WRITE
sqe.Fd = int32(syscall.Stdout)
sqe.UserData = uint64(i)
sqe.Len = uint32(len(m))
sqe.SetOffset(0)
sqe.SetAddr(&m[0])
*sq.Array.Get(sqIdx) = *sq.Head & *sq.RingMask
*sq.Tail++
done, err := ring.Enter(1, 1, IORING_ENTER_GETEVENTS, nil)
assert.NoError(t, err, "ring enter")
t.Logf("done %d", done)
}
// get cq
cq := ring.CQ()
for i := 0; i < int(*cq.Tail); i++ {
cqHead := *cq.Head
cqIdx := cqHead & *cq.RingMask
cqe := cq.Event[cqIdx]
*cq.Head++
t.Logf("CQE %+#v", cqe)
}
}