From f6394ab13af22044ab8009a09b68053bec0f130b Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 3 May 2009 16:42:52 +0000 Subject: 100% code coverage for queues. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@946 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/test.c | 2 + test/test.mk | 10 ++-- test/testqueues.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/testqueues.h | 25 ++++++++++ 4 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 test/testqueues.c create mode 100644 test/testqueues.h (limited to 'test') diff --git a/test/test.c b/test/test.c index 071641274..3ca3d8a8a 100644 --- a/test/test.c +++ b/test/test.c @@ -29,6 +29,7 @@ #include "testheap.h" #include "testpools.h" #include "testdyn.h" +#include "testqueues.h" #include "testbmk.h" /* @@ -44,6 +45,7 @@ static const struct testcase **patterns[] = { patternheap, patternpools, patterndyn, + patternqueues, patternbmk, NULL }; diff --git a/test/test.mk b/test/test.mk index ee5128ac2..2a3e1a4f9 100644 --- a/test/test.mk +++ b/test/test.mk @@ -1,8 +1,10 @@ # List of all the ChibiOS/RT test files. -TESTSRC = ../../test/test.c ../../test/testthd.c ../../test/testsem.c \ - ../../test/testmtx.c ../../test/testmsg.c ../../test/testmbox.c \ - ../../test/testevt.c ../../test/testheap.c ../../test/testpools.c \ - ../../test/testdyn.c ../../test/testbmk.c +TESTSRC = ../../test/test.c ../../test/testthd.c \ + ../../test/testsem.c ../../test/testmtx.c \ + ../../test/testmsg.c ../../test/testmbox.c \ + ../../test/testevt.c ../../test/testheap.c \ + ../../test/testpools.c ../../test/testdyn.c \ + ../../test/testqueues.c ../../test/testbmk.c # Required include directories TESTINC = ../../test diff --git a/test/testqueues.c b/test/testqueues.c new file mode 100644 index 000000000..e3faf71f0 --- /dev/null +++ b/test/testqueues.c @@ -0,0 +1,146 @@ +/* + 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" + +#if CH_USE_QUEUES + +#define TEST_QUEUES_SIZE 4 + +static void notify(void) {} + +static char *queues1_gettest(void) { + + return "Queues, input queues"; +} + +static void queues1_execute(void) { + InputQueue iq; + unsigned i; + + chIQInit(&iq, wa[0], TEST_QUEUES_SIZE, notify); + + /* Initial empty state */ + test_assert(1, chIQIsEmpty(&iq), "not empty"); + + /* Queue filling */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + chIQPutI(&iq, 'A' + i); + test_assert(2, chIQIsFull(&iq), "still has space"); + test_assert(3, chIQPutI(&iq, 0) == Q_FULL, "failed to report Q_FULL"); + + /* Queue emptying */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + test_emit_token(chIQGet(&iq)); + test_assert(4, chIQIsEmpty(&iq), "still full"); + test_assert_sequence(5, "ABCD"); + + /* Queue filling again */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + chIQPutI(&iq, 'A' + i); + + /* Reading the whole thing */ + test_assert(6, + chIQRead(&iq, wa[1], TEST_QUEUES_SIZE * 2) == TEST_QUEUES_SIZE, + "wrong returned size"); + test_assert(7, chIQIsEmpty(&iq), "still full"); + + /* Testing reset */ + chIQPutI(&iq, 0); + chIQResetI(&iq); + test_assert(8, chIQIsEmpty(&iq), "still full"); + +#if CH_USE_SEMAPHORES_TIMEOUT + /* Timeout */ + test_assert(9, chIQGetTimeout(&iq, 10) == Q_TIMEOUT, "wrong timeout return"); +#endif +} + +const struct testcase testqueues1 = { + queues1_gettest, + NULL, + NULL, + queues1_execute +}; + +static char *queues2_gettest(void) { + + return "Queues, output queues"; +} + +static void queues2_execute(void) { + OutputQueue oq; + unsigned i; + + chOQInit(&oq, wa[0], TEST_QUEUES_SIZE, notify); + + /* Initial empty state */ + test_assert(1, chOQIsEmpty(&oq), "not empty"); + + /* Queue filling */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + chOQPut(&oq, 'A' + i); + test_assert(2, chOQIsFull(&oq), "still has space"); + + /* Queue emptying */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + test_emit_token(chOQGetI(&oq)); + test_assert(3, chOQIsEmpty(&oq), "still full"); + test_assert_sequence(4, "ABCD"); + test_assert(5, chOQGetI(&oq) == Q_EMPTY, "failed to report Q_EMPTY"); + + /* Writing the whole thing */ + test_assert(6, + chOQWrite(&oq, wa[1], TEST_QUEUES_SIZE * 2) == TEST_QUEUES_SIZE, + "wrong returned size"); + test_assert(7, chOQIsFull(&oq), "not full"); + + /* Testing reset */ + chOQResetI(&oq); + test_assert(8, chOQIsEmpty(&oq), "still full"); + +#if CH_USE_SEMAPHORES_TIMEOUT + /* Timeout */ + for (i = 0; i < TEST_QUEUES_SIZE; i++) + chOQPut(&oq, 'A' + i); + test_assert(9, chOQIsFull(&oq), "still has space"); + test_assert(10, chOQPutTimeout(&oq, 0, 10) == Q_TIMEOUT, "wrong timeout return"); +#endif +} + +const struct testcase testqueues2 = { + queues2_gettest, + NULL, + NULL, + queues2_execute +}; +#endif /* CH_USE_QUEUES */ + +/* + * Test sequence for queues pattern. + */ +const struct testcase * const patternqueues[] = { +#if CH_USE_QUEUES + &testqueues1, + &testqueues2, +#endif + NULL +}; diff --git a/test/testqueues.h b/test/testqueues.h new file mode 100644 index 000000000..69b96dfb0 --- /dev/null +++ b/test/testqueues.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 _TESTQUEUES_H_ +#define _TESTQUEUES_H_ + +extern const struct testcase *patternqueues[]; + +#endif /* _TESTQUEUES_H_ */ -- cgit v1.2.3