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:
parent
850a827c24
commit
e843514510
@ -1,3 +1,10 @@
|
|||||||
include ../Makefile.core_common
|
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
|
include $(RIOTBASE)/Makefile.include
|
||||||
|
|
||||||
|
# Make config available in Python test script via environment variables
|
||||||
|
export CONFIG_MSG_QUEUE_PRINT_MAX
|
||||||
|
@ -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
|
* 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
|
* 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 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)
|
int main(void)
|
||||||
{
|
{
|
||||||
msg_t messages[QUEUE_SIZE];
|
msg_t msg;
|
||||||
|
|
||||||
msg_queue_print();
|
msg_queue_print();
|
||||||
msg_init_queue(msg_queue, QUEUE_SIZE);
|
msg_init_queue(msg_queue, QUEUE_SIZE);
|
||||||
msg_queue_print();
|
msg_queue_print();
|
||||||
|
|
||||||
|
/* fill message queue */
|
||||||
for (uintptr_t i = 0; i < QUEUE_SIZE; i++) {
|
for (uintptr_t i = 0; i < QUEUE_SIZE; i++) {
|
||||||
messages[i].type = i;
|
msg.type = i;
|
||||||
messages[i].content.ptr = (void *) i;
|
msg.content.ptr = (void *) i;
|
||||||
msg_send_to_self(&messages[i]);
|
msg_send_to_self(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_queue_print();
|
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");
|
puts("DONE");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,34 +1,60 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# 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
|
# General Public License v2.1. See the file LICENSE in the top level
|
||||||
# directory for more details.
|
# directory for more details.
|
||||||
|
|
||||||
# @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
|
# @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
|
||||||
|
# @author Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from testrunner import run
|
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):
|
def testfunc(child):
|
||||||
child.expect("No messages or no message queue")
|
expect_none(child)
|
||||||
child.expect("No messages or no message queue")
|
expect_none(child)
|
||||||
child.expect(r"Message queue of thread \d+\r\n")
|
expect_some(child, 8, 8, 0)
|
||||||
child.expect_exact('size: 8 (avail: 8)')
|
expect_some(child, 8, 4, 4)
|
||||||
if os.environ.get('BOARD') in ['native', 'native64']:
|
expect_some(child, 8, 8, 4)
|
||||||
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)')
|
|
||||||
child.expect_exact('DONE')
|
child.expect_exact('DONE')
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user