From 87befad2540f95a8c38592981b7702a6fee06052 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 6 Dec 2008 09:02:28 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@528 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/testevt.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/testevt.h | 25 ++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 test/testevt.c create mode 100644 test/testevt.h diff --git a/test/testevt.c b/test/testevt.c new file mode 100644 index 000000000..28e54cbf6 --- /dev/null +++ b/test/testevt.c @@ -0,0 +1,104 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include "test.h" + +#ifdef CH_USE_EVENTS + +#define ALLOWED_DELAY MS2ST(5) + +static EventSource es1, es2; + +static char *evt1_gettest(void) { + + return "Events, wait and broadcast"; +} + +static void evt1_setup(void) { + + chEvtClear(ALL_EVENTS); +} + +static void evt1_teardown(void) { +} + +static msg_t thread(void *p) { + + chEvtBroadcast(&es1); + chThdSleepMilliseconds(50); + chEvtBroadcast(&es2); + return 0; +} + +static void evt1_execute(void) { + eventmask_t m; + EventListener el1, el2; + systime_t target_time; + + /* + * Test on chEvtWaitOne(). + */ + chEvtPend(5); + m = chEvtWaitOne(ALL_EVENTS); + test_assert(m == 1, "chEvtWaitOne() error"); + m = chEvtWaitOne(ALL_EVENTS); + test_assert(m == 4, "chEvtWaitOne() error"); + m = chEvtClear(0); + test_assert(m == 0, "stuck event"); + + /* + * Test on chEvtWaitAny(). + */ + chEvtPend(5); + m = chEvtWaitAny(ALL_EVENTS); + test_assert(m == 5, "chEvtWaitAny() error"); + m = chEvtClear(0); + test_assert(m == 0, "stuck event"); + + /* + * Test on chEvtWaitAll(), chEvtRegisterMask() and chEvtUnregister(). + */ + chEvtInit(&es1); + chEvtInit(&es2); + chEvtRegisterMask(&es1, &el1, 1); + chEvtRegisterMask(&es2, &el2, 4); + target_time = chSysGetTime() + MS2ST(50); + threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()-1, thread, "A"); + m = chEvtWaitAll(5); + test_assert_time_window(target_time, target_time + ALLOWED_DELAY); + m = chEvtClear(0); + test_assert(m == 0, "stuck event"); + + test_wait_threads(); + chEvtUnregister(&es1, &el1); + chEvtUnregister(&es2, &el2); + test_assert(!chEvtIsListening(&es1), "stuck listener"); + test_assert(!chEvtIsListening(&es2), "stuck listener"); +} + +const struct testcase testevt1 = { + evt1_gettest, + evt1_setup, + evt1_teardown, + evt1_execute +}; + +#endif /* CH_USE_EVENTS */ diff --git a/test/testevt.h b/test/testevt.h new file mode 100644 index 000000000..5c66d5924 --- /dev/null +++ b/test/testevt.h @@ -0,0 +1,25 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TESTEVT_H_ +#define _TESTEVT_H_ + +extern const struct testcase testevt1; + +#endif /* _TESTEVT_H_ */ -- cgit v1.2.3