1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-13 08:40:26 +01:00

tests/core/msg_queue_print: test for special cases

This commit is contained in:
Mikolai Gütschow 2024-11-27 16:01:38 +01:00
parent 850a827c24
commit e843514510
No known key found for this signature in database
GPG Key ID: 943E2F37AA659AD5
3 changed files with 74 additions and 21 deletions

View File

@ -1,3 +1,10 @@
include ../Makefile.core_common
CONFIG_MSG_QUEUE_PRINT_MAX ?= 6
CFLAGS += -DCONFIG_MSG_QUEUE_PRINT_MAX=$(CONFIG_MSG_QUEUE_PRINT_MAX)
include $(RIOTBASE)/Makefile.include
# Make config available in Python test script via environment variables
export CONFIG_MSG_QUEUE_PRINT_MAX

View File

@ -1,5 +1,6 @@
/*
* Copyright (C) 2021 Freie Universität Berlin,
* Copyright (C) 2021 Freie Universität Berlin
* Copyright (C) 2024 TU Dresden
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
@ -15,6 +16,7 @@
*
*
* @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
* @author Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
*
*/
@ -29,19 +31,37 @@ msg_t msg_queue[QUEUE_SIZE];
int main(void)
{
msg_t messages[QUEUE_SIZE];
msg_t msg;
msg_queue_print();
msg_init_queue(msg_queue, QUEUE_SIZE);
msg_queue_print();
/* fill message queue */
for (uintptr_t i = 0; i < QUEUE_SIZE; i++) {
messages[i].type = i;
messages[i].content.ptr = (void *) i;
msg_send_to_self(&messages[i]);
msg.type = i;
msg.content.ptr = (void *) i;
msg_send_to_self(&msg);
}
msg_queue_print();
/* drain half of message queue */
for (uintptr_t i = 0; i < QUEUE_SIZE/2; i++) {
msg_receive(&msg);
}
msg_queue_print();
/* fill up message queue again */
for (uintptr_t i = QUEUE_SIZE; i < QUEUE_SIZE + QUEUE_SIZE/2; i++) {
msg.type = i;
msg.content.ptr = (void *) i;
msg_send_to_self(&msg);
}
msg_queue_print();
puts("DONE");
return 0;
}

View File

@ -1,34 +1,60 @@
#!/usr/bin/env python3
# Copyright (C) 2021 Freie Universität Berlin,
# Copyright (C) 2021 Freie Universität Berlin
# Copyright (C) 2024 TU Dresden
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
# @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
# @author Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
import os
import sys
from testrunner import run
PRINT_MAX = int(os.getenv('CONFIG_MSG_QUEUE_PRINT_MAX'))
def expect_none(child):
child.expect("No messages or no message queue")
def expect_some(child, size, avail, range_start):
child.expect(r"Message queue of thread \d+\r\n")
child.expect_exact(f'size: {size} (avail: {avail})')
expect_less = avail > PRINT_MAX
if expect_less:
range_end = range_start + PRINT_MAX
else:
range_end = range_start + avail
for counter in range(range_start, range_end):
expect_content(child, counter)
if expect_less:
child.expect('...')
def expect_content(child, counter):
if counter == 0:
if os.environ.get('BOARD') in ['native', 'native64']:
child.expect_exact('type: 0x0000, content: 0 ((nil))')
else:
child.expect(r'type: 0x0000, content: 0 \((0x)?0+\)')
else:
child.expect_exact(f'type: 0x{counter:04x}, content: {counter} (0x{counter:x})')
def testfunc(child):
child.expect("No messages or no message queue")
child.expect("No messages or no message queue")
child.expect(r"Message queue of thread \d+\r\n")
child.expect_exact('size: 8 (avail: 8)')
if os.environ.get('BOARD') in ['native', 'native64']:
child.expect_exact('type: 0x0000, content: 0 ((nil))')
else:
child.expect(r'type: 0x0000, content: 0 \((0x)?0+\)')
child.expect_exact('type: 0x0001, content: 1 (0x1)')
child.expect_exact('type: 0x0002, content: 2 (0x2)')
child.expect_exact('type: 0x0003, content: 3 (0x3)')
child.expect_exact('type: 0x0004, content: 4 (0x4)')
child.expect_exact('type: 0x0005, content: 5 (0x5)')
child.expect_exact('type: 0x0006, content: 6 (0x6)')
child.expect_exact('type: 0x0007, content: 7 (0x7)')
expect_none(child)
expect_none(child)
expect_some(child, 8, 8, 0)
expect_some(child, 8, 4, 4)
expect_some(child, 8, 8, 4)
child.expect_exact('DONE')