fix posix.mq_receive compilation with cpp backend (#20710)

* fix posix.mq_receive compilation with cpp backend

* only enable runnableExample on posix

* linux, not posix

* simplify example

* add test

* mqueue.h does not exist on MacOS

* place test case in own block

* drop runnableExamples
This commit is contained in:
n5m 2022-11-05 05:31:19 +00:00 • committed by GitHub
commit 51bef9b4a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 88 additions and 28 deletions

View file

@ -7,7 +7,7 @@ outputsub: ""
when not defined(windows):
import posix
import std/syncio
import std/[assertions, syncio]
var
u: Utsname
@ -18,3 +18,46 @@ when not defined(windows):
writeLine(stdout, u.nodename)
writeLine(stdout, u.release)
writeLine(stdout, u.machine)
when not (defined(nintendoswitch) or defined(macos) or defined(macosx)):
block:
type Message = object
value: int
const MQ_PATH: cstring = "/top_level_file"
const MQ_PRIORITY: cuint = 170
const MQ_MESSAGE_SIZE: csize_t = csize_t(sizeof(Message))
let mqd_a: posix.MqAttr = MqAttr(mq_maxmsg: 10, mq_msgsize: clong(MQ_MESSAGE_SIZE))
let writable: posix.Mqd = posix.mq_open(
MQ_PATH,
posix.O_CREAT or posix.O_WRONLY or posix.O_NONBLOCK,
posix.S_IRWXU,
addr(mqd_a)
)
let readable: posix.Mqd = posix.mq_open(
MQ_PATH,
posix.O_RDONLY or posix.O_NONBLOCK,
posix.S_IRWXU,
addr(mqd_a)
)
let sent: Message = Message(value: 88)
block:
let success: int = writable.mq_send(
cast[cstring](sent.addr),
MQ_MESSAGE_SIZE,
MQ_PRIORITY
)
doAssert success == 0, $success
block:
var buffer: Message
var priority: cuint
let bytesRead: int = readable.mq_receive(
cast[cstring](buffer.addr),
MQ_MESSAGE_SIZE,
priority
)
doAssert buffer == sent
doAssert bytesRead == int(MQ_MESSAGE_SIZE)