diff options
| author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-05-03 16:42:52 +0000 | 
|---|---|---|
| committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-05-03 16:42:52 +0000 | 
| commit | f6394ab13af22044ab8009a09b68053bec0f130b (patch) | |
| tree | f56a258938ea0a505814016119ec24efe6b0c519 /test/testqueues.c | |
| parent | 62beef8720971259545e9df90b182e1a94280c09 (diff) | |
| download | ChibiOS-f6394ab13af22044ab8009a09b68053bec0f130b.tar.gz ChibiOS-f6394ab13af22044ab8009a09b68053bec0f130b.tar.bz2 ChibiOS-f6394ab13af22044ab8009a09b68053bec0f130b.zip | |
100% code coverage for queues.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@946 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'test/testqueues.c')
| -rw-r--r-- | test/testqueues.c | 146 | 
1 files changed, 146 insertions, 0 deletions
| 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 <http://www.gnu.org/licenses/>.
 +*/
 +
 +#include <ch.h>
 +
 +#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
 +};
 | 
