41 EXPECT_EQ(
mq_peek(_messageQueue, &msg),
ENOMSG) <<
"Did not peek message from empty queue";
49 EXPECT_EQ(
mq_push(_messageQueue, _message), 0) <<
"Added message to unlimited queue";
52 msg->
size =
sizeof(msg);
54 EXPECT_EQ(
mq_peek(_messageQueue, msg),
EMSGSIZE) <<
"Did not peek messsage because not enough buffer space";
55 EXPECT_EQ(msg->
size,
sizeof(
Message) + 1) <<
"After peek we know the needed buffer space";
56 EXPECT_EQ(msg->
type,
MT_Invalid) <<
"When message buffer is too small, message type is MT_Invalid";
61 EXPECT_EQ(
mq_peek(_messageQueue, msg), 0) <<
"Peeked message from queue with a single message in it";
62 EXPECT_EQ(msg->
user_data.
raw[0], _message->user_data.raw[0]) <<
"Contents of peeked message correct";
68 EXPECT_EQ(
mq_peek(_messageQueue, msg), 0) <<
"Again peeked message from queue with a single message in it";
69 EXPECT_EQ(msg->
user_data.
raw[0], _message->user_data.raw[0]) <<
"Contents of peeked message correct";
75 EXPECT_EQ(
mq_pop(_messageQueue, msg), 0) <<
"Message in queue, popped it";
76 EXPECT_EQ(msg->
user_data.
raw[0], _message->user_data.raw[0]) <<
"Contents of peeked message correct";
82 EXPECT_EQ(
mq_pop(_messageQueue, msg),
ENOMSG) <<
"Popping again gives no message but correct error code";
88 const size_t num_messages = 16;
90 for(
size_t i = 0; i < num_messages; ++i) {
96 EXPECT_EQ(
mq_push(_messageQueue, msg), 0) <<
"Pushed message to queue";
101 for(
size_t i = 0; i < num_messages; ++i) {
108 EXPECT_EQ(
mq_peek(_messageQueue, msg_peeked), 0) <<
"Successfully peeked message from queue";
109 EXPECT_EQ(
mq_pop(_messageQueue, msg_popped), 0) <<
"Successfully popped message from queue";
111 EXPECT_EQ(msg_peeked->
size, msg_popped->
size) <<
"Messages have identical size";
113 EXPECT_EQ(msg_peeked->
user_data.
raw[0], i) <<
"Messages have correct raw user data";
void * memset(void *dest, int c, size_t size)
void * malloc(size_t size)
size_t size
Size of the message, including metadata.
union Message::UserData user_data
@ MT_Invalid
Invalid message, only size is valid.
size_t user_size
Size of the user data.
enum MessageType type
Type of the message.
uint64_t mq_push(uint64_t mq, struct Message *message)
uint64_t mq_pop(uint64_t mq, struct Message *msg)
uint64_t mq_peek(uint64_t mq, struct Message *msg)
uint64_t mq_create(allocator_t *alloc)
void init_mq(allocator_t *alloc)
void mq_destroy(uint64_t mq)
TEST_F(MessageQueueTest, PopFromEmptyQueue)
void scheduler_waitable_done(enum wait_reason r, union wait_data d, size_t m)
void(* dealloc)(struct allocator *alloc, void *mem)