diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2014-02-10 15:36:30 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2014-02-10 15:36:30 +0000 |
commit | 4fc90c99b72c00ab803a018bf55dd4ad75960224 (patch) | |
tree | 227f2634a2e2aad0ef4223ac4a912361df0fa222 /test/nil | |
parent | 12a2f695cfb4de204b5114a958e31689f961b98c (diff) | |
download | ChibiOS-4fc90c99b72c00ab803a018bf55dd4ad75960224.tar.gz ChibiOS-4fc90c99b72c00ab803a018bf55dd4ad75960224.tar.bz2 ChibiOS-4fc90c99b72c00ab803a018bf55dd4ad75960224.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6696 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'test/nil')
-rw-r--r-- | test/nil/test.mk | 3 | ||||
-rw-r--r-- | test/nil/test_root.c | 1 | ||||
-rw-r--r-- | test/nil/test_root.h | 3 | ||||
-rw-r--r-- | test/nil/test_sequence_000.c | 26 | ||||
-rw-r--r-- | test/nil/test_sequence_001.c | 182 | ||||
-rw-r--r-- | test/nil/test_sequence_001.h | 22 |
6 files changed, 227 insertions, 10 deletions
diff --git a/test/nil/test.mk b/test/nil/test.mk index a69e80e08..1cb5641cf 100644 --- a/test/nil/test.mk +++ b/test/nil/test.mk @@ -1,7 +1,8 @@ # List of all the ChibiOS/RT test files.
TESTSRC = ${CHIBIOS}/test/lib/ch_test.c \
${CHIBIOS}/test/nil/test_root.c \
- ${CHIBIOS}/test/nil/test_sequence_000.c
+ ${CHIBIOS}/test/nil/test_sequence_000.c \
+ ${CHIBIOS}/test/nil/test_sequence_001.c
# Required include directories
TESTINC = ${CHIBIOS}/test/lib \
diff --git a/test/nil/test_root.c b/test/nil/test_root.c index 47e8c67e4..94f88f2a4 100644 --- a/test/nil/test_root.c +++ b/test/nil/test_root.c @@ -35,6 +35,7 @@ */
const testcase_t * const *test_suite[] = {
test_sequence_000,
+ test_sequence_001,
NULL
};
diff --git a/test/nil/test_root.h b/test/nil/test_root.h index 42463fc03..58e0790a4 100644 --- a/test/nil/test_root.h +++ b/test/nil/test_root.h @@ -28,6 +28,7 @@ #include "nil.h"
#include "test_sequence_000.h"
+#include "test_sequence_001.h"
/*===========================================================================*/
/* Default definitions. */
@@ -35,7 +36,7 @@ /* Global test suite name, it is printed on top of the test
report header.*/
-#define TEST_SUITE_NAME "ChibiOS/RT Test Suite"
+#define TEST_SUITE_NAME "ChibiOS/NIL Test Suite"
/*===========================================================================*/
/* External declarations. */
diff --git a/test/nil/test_sequence_000.c b/test/nil/test_sequence_000.c index a61ce4108..6d1dede6c 100644 --- a/test/nil/test_sequence_000.c +++ b/test/nil/test_sequence_000.c @@ -24,10 +24,11 @@ * File: @ref test_sequence_000.c
*
* <h2>Description</h2>
- * This sequence tests the ChibiOS/Nil functionalities related to threading.
+ * This sequence tests the ChibiOS/NIL functionalities related to threading.
*
* <h2>Test Cases</h2>
* - @subpage test_000_000
+ * - @subpage test_000_001
* .
*/
@@ -70,12 +71,12 @@ static void test_000_000_execute(void) { }
static const testcase_t test_000_000 = {
- "Brief description",
+ "System Tick Counter functionality",
NULL,
NULL,
test_000_000_execute
};
-#endif /* TEST_000_000_CONDITION */
+#endif /* TRUE */
#if TRUE || defined(__DOXYGEN__)
/**
@@ -109,7 +110,7 @@ static void test_000_001_execute(void) { time = chVTGetSystemTimeX();
chThdSleep(100);
test_assert_time_window(time + 100,
- time + 101,
+ time + 100 + 1,
"out of time window");
}
@@ -145,15 +146,24 @@ static void test_000_001_execute(void) { time + S2ST(1) + 1,
"out of time window");
}
+
+ test_set_step(5);
+ {
+ time = chVTGetSystemTimeX();
+ chThdSleepUntil(time + 100);
+ test_assert_time_window(time + 100,
+ time + 100 + 1,
+ "out of time window");
+ }
}
static const testcase_t test_000_001 = {
- "Brief description",
+ "Thread Sleep functionality",
NULL,
NULL,
test_000_001_execute
};
-#endif /* TEST_000_001_CONDITION */
+#endif /* TRUE */
/****************************************************************************
* Exported data.
@@ -163,10 +173,10 @@ static const testcase_t test_000_001 = { * @brief Sequence brief description.
*/
const testcase_t * const test_sequence_000[] = {
-#if 1 || defined(__DOXYGEN__)
+#if TRUE || defined(__DOXYGEN__)
&test_000_000,
#endif
-#if 1 || defined(__DOXYGEN__)
+#if TRUE || defined(__DOXYGEN__)
&test_000_001,
#endif
NULL
diff --git a/test/nil/test_sequence_001.c b/test/nil/test_sequence_001.c new file mode 100644 index 000000000..0157541d5 --- /dev/null +++ b/test/nil/test_sequence_001.c @@ -0,0 +1,182 @@ +/*
+ ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+#include "ch_test.h"
+#include "test_root.h"
+
+/**
+ * @page test_sequence_001 Semaphores functionality
+ *
+ * File: @ref test_sequence_001.c
+ *
+ * <h2>Description</h2>
+ * This sequence tests the ChibiOS/NIL functionalities related to semaphores.
+ *
+ * <h2>Test Cases</h2>
+ * - @subpage test_001_000
+ * .
+ */
+
+/****************************************************************************
+ * Shared code.
+ ****************************************************************************/
+
+static semaphore_t sem1;
+
+/****************************************************************************
+ * Test cases.
+ ****************************************************************************/
+
+#if TRUE || defined(__DOXYGEN__)
+/**
+ * @page test_001_000 Semaphores primitives, no state change
+ *
+ * <h2>Description</h2>
+ * Wait, Signal and Reset primitives are tested. The testing thread does not
+ * trigger a state change.
+ *
+ * <h2>Conditions</h2>
+ * None.
+ *
+ * <h2>Test Steps</h2>
+ * - The function chSemWait() is invoked, the Semaphore counter is tested
+ * for correct value after the call.
+ * - The function chSemSignal() is invoked, the Semaphore counter is tested
+ * for correct value after the call.
+ * - The function chSemReset() is invoked, the Semaphore counter is tested
+ * for correct value after the call.
+ * .
+ */
+
+static void test_001_000_setup(void) {
+
+ chSemObjectInit(&sem1, 1);
+}
+
+static void test_001_000_teardown(void) {
+
+ chSemReset(&sem1, 0);
+}
+
+static void test_001_000_execute(void) {
+
+ /* The function chSemWait() is invoked, the Semaphore counter is tested
+ for correct value after the call.*/
+ test_set_step(1);
+ {
+ chSemWait(&sem1);
+ test_assert_lock(chSemGetCounterI(&sem1) == 0,
+ "wrong counter value");
+ }
+
+ /* The function chSemSignal() is invoked, the Semaphore counter is tested
+ for correct value after the call.*/
+ test_set_step(2);
+ {
+ chSemSignal(&sem1);
+ test_assert_lock(chSemGetCounterI(&sem1) == 1,
+ "wrong counter value");
+ }
+
+ /* The function chSemReset() is invoked, the Semaphore counter is tested
+ for correct value after the call.*/
+ test_set_step(3);
+ {
+ chSemReset(&sem1, 2);
+ test_assert_lock(chSemGetCounterI(&sem1) == 2,
+ "wrong counter value");
+ }
+}
+
+static const testcase_t test_001_000 = {
+ "Brief description",
+ test_001_000_setup,
+ test_001_000_teardown,
+ test_001_000_execute
+};
+#endif /* TRUE */
+
+#if TRUE || defined(__DOXYGEN__)
+/**
+ * @page test_001_000 Semaphores timeout
+ *
+ * <h2>Description</h2>
+ * Timeouts on semaphores are tested.
+ *
+ * <h2>Conditions</h2>
+ * None.
+ *
+ * <h2>Test Steps</h2>
+ * - The function chSemWaitTimeout() is invoked, after return the system
+ * time, the counter and the returned message are tested.
+ * .
+ */
+
+static void test_001_001_setup(void) {
+
+ chSemObjectInit(&sem1, 0);
+}
+
+static void test_001_001_teardown(void) {
+
+ chSemReset(&sem1, 0);
+}
+
+static void test_001_001_execute(void) {
+ systime_t time;
+ msg_t msg;
+
+ /* The function chSemWaitTimeout() is invoked, after return the system
+ time, the counter and the returned message are tested.*/
+ test_set_step(1);
+ {
+ time = chVTGetSystemTimeX();
+ msg = chSemWaitTimeout(&sem1, 100);
+ test_assert_time_window(time + 100,
+ time + 100 + 1,
+ "out of time window");
+ test_assert_lock(chSemGetCounterI(&sem1) == 0,
+ "wrong counter value");
+ test_assert(MSG_TIMEOUT == msg,
+ "wrong timeout message");
+ }
+}
+
+static const testcase_t test_001_001 = {
+ "Brief description",
+ test_001_001_setup,
+ test_001_001_teardown,
+ test_001_001_execute
+};
+#endif /* TRUE */
+
+ /****************************************************************************
+ * Exported data.
+ ****************************************************************************/
+
+/**
+ * @brief Sequence brief description.
+ */
+const testcase_t * const test_sequence_001[] = {
+#if TRUE || defined(__DOXYGEN__)
+ &test_001_000,
+#endif
+#if TRUE || defined(__DOXYGEN__)
+ &test_001_001,
+#endif
+ NULL
+};
diff --git a/test/nil/test_sequence_001.h b/test/nil/test_sequence_001.h new file mode 100644 index 000000000..47ae8315b --- /dev/null +++ b/test/nil/test_sequence_001.h @@ -0,0 +1,22 @@ +/*
+ ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _TEST_SEQUENCE_001_H_
+#define _TEST_SEQUENCE_001_H_
+
+extern const testcase_t * const test_sequence_001[];
+
+#endif /* _TEST_SEQUENCE_001_H_ */
|