tests/periph_uart_nonblocking: add simple test application
The application is mainly to compile-test non-blocking UART functionality, but some functional testing is also possible. With non-blocking UART the total runtime of the program is 2100735 µs on same54-xpro. With blocking UART the total runtime is 2152407 µs.
This commit is contained in:
parent
0d977b3b3c
commit
0c08abd19a
6
tests/periph_uart_nonblocking/Makefile
Normal file
6
tests/periph_uart_nonblocking/Makefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
include ../Makefile.tests_common
|
||||||
|
|
||||||
|
FEATURES_REQUIRED += periph_uart_nonblocking
|
||||||
|
USEMODULE += xtimer
|
||||||
|
|
||||||
|
include $(RIOTBASE)/Makefile.include
|
||||||
69
tests/periph_uart_nonblocking/main.c
Normal file
69
tests/periph_uart_nonblocking/main.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 Benjamin Valentin <benpicco@googlemail.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup tests
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file
|
||||||
|
* @brief Simple test application for non-blocking UART functionality
|
||||||
|
*
|
||||||
|
* @author Benjamin Valentin <benpicco@googlemail.com>
|
||||||
|
*
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <xtimer.h>
|
||||||
|
|
||||||
|
#define LINE_DELAY_MS 100
|
||||||
|
|
||||||
|
static inline uint32_t puts_delay(const char* str)
|
||||||
|
{
|
||||||
|
puts(str);
|
||||||
|
xtimer_usleep(LINE_DELAY_MS * 1000);
|
||||||
|
return LINE_DELAY_MS * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
uint32_t total_us = 0;
|
||||||
|
xtimer_ticks32_t counter = xtimer_now();
|
||||||
|
|
||||||
|
/* Richard Stallman and the Free Software Foundation
|
||||||
|
claim no copyright on this song. */
|
||||||
|
total_us += puts_delay("");
|
||||||
|
total_us += puts_delay("Join us now and share the software;");
|
||||||
|
total_us += puts_delay("You'll be free, hackers, you'll be free.");
|
||||||
|
total_us += puts_delay("Join us now and share the software;");
|
||||||
|
total_us += puts_delay("You'll be free, hackers, you'll be free.");
|
||||||
|
total_us += puts_delay("");
|
||||||
|
total_us += puts_delay("Hoarders can get piles of money,");
|
||||||
|
total_us += puts_delay("That is true, hackers, that is true.");
|
||||||
|
total_us += puts_delay("But they cannot help their neighbors;");
|
||||||
|
total_us += puts_delay("That's not good, hackers, that's not good.");
|
||||||
|
total_us += puts_delay("");
|
||||||
|
total_us += puts_delay("When we have enough free software");
|
||||||
|
total_us += puts_delay("At our call, hackers, at our call,");
|
||||||
|
total_us += puts_delay("We'll kick out those dirty licenses");
|
||||||
|
total_us += puts_delay("Ever more, hackers, ever more.");
|
||||||
|
total_us += puts_delay("");
|
||||||
|
total_us += puts_delay("Join us now and share the software;");
|
||||||
|
total_us += puts_delay("You'll be free, hackers, you'll be free.");
|
||||||
|
total_us += puts_delay("Join us now and share the software;");
|
||||||
|
total_us += puts_delay("You'll be free, hackers, you'll be free.");
|
||||||
|
total_us += puts_delay("");
|
||||||
|
|
||||||
|
counter.ticks32 = xtimer_now().ticks32 - counter.ticks32;
|
||||||
|
|
||||||
|
printf("== printed in %" PRIu32 "/%" PRIu32 " µs ==\n", xtimer_usec_from_ticks(counter), total_us);
|
||||||
|
|
||||||
|
puts("[SUCCESS]");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
24
tests/periph_uart_nonblocking/tests/01-run.py
Executable file
24
tests/periph_uart_nonblocking/tests/01-run.py
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Copyright (C) 2019 Benjamin Valentin
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from testrunner import run
|
||||||
|
|
||||||
|
|
||||||
|
def testfunc(child):
|
||||||
|
child.expect(r'== printed in (\d+)/(\d+) µs ==')
|
||||||
|
time_actual = int(child.match.group(1))
|
||||||
|
time_expect = int(child.match.group(2))
|
||||||
|
|
||||||
|
assert time_actual / time_expect < 1.0015
|
||||||
|
|
||||||
|
child.expect_exact("[SUCCESS]")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(run(testfunc))
|
||||||
Loading…
x
Reference in New Issue
Block a user