diff options
author | Glenn Humphrey <glenn.humphrey@oarcorp.com> | 2009-12-08 23:07:38 +0000 |
---|---|---|
committer | Glenn Humphrey <glenn.humphrey@oarcorp.com> | 2009-12-08 23:07:38 +0000 |
commit | 7199b1d0dcd4d56ffd7c21091a1e62c6a799cf06 (patch) | |
tree | 8ba8556c261558a1814a30bbee121a2c2d0f7657 /testsuites/sptests/sp69/init.c | |
parent | 2009-12-08 Glenn Humphrey <glenn.humphrey@OARcorp.com> (diff) | |
download | rtems-7199b1d0dcd4d56ffd7c21091a1e62c6a799cf06.tar.bz2 |
2009-12-08 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* Makefile.am, configure.ac: Added a test for rate_monotonic_get_status
to ensure that all paths are tested.
* sp69/Makefile.am, sp69/init.c, sp69/sp69.doc, sp69/sp69.scn: New files.
Diffstat (limited to 'testsuites/sptests/sp69/init.c')
-rw-r--r-- | testsuites/sptests/sp69/init.c | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/testsuites/sptests/sp69/init.c b/testsuites/sptests/sp69/init.c new file mode 100644 index 0000000000..1b79e610e7 --- /dev/null +++ b/testsuites/sptests/sp69/init.c @@ -0,0 +1,164 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include <rtems/cpuuse.h> +#include <tmacros.h> +#include "test_support.h" + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_id period_id; + rtems_name period_name; + rtems_rate_monotonic_period_status period_status; + rtems_status_code status; + + period_name = rtems_build_name('P','E','R','1'); + + puts( "\n\n*** TEST 69 ***" ); + + /* create period */ + status = rtems_rate_monotonic_create( + period_name, + &period_id + ); + directive_failed( status, "rate_monotonic_create" ); + + /* + * Check get_status on an inactive period. + */ + puts( + "rtems_rate_monotonic_get_status - verify values of an inactive period" + ); + + status = rtems_rate_monotonic_get_status( period_id, &period_status ); + directive_failed( status, "rate_monotonic_get_status" ); + + /* Check status values. */ + rtems_test_assert( period_status.owner == rtems_task_self() ); + rtems_test_assert( period_status.state == RATE_MONOTONIC_INACTIVE ); + #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__ + rtems_test_assert( period_status.since_last_period.tv_sec == 0 ); + rtems_test_assert( period_status.since_last_period.tv_nsec == 0 ); + rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 ); + rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 ); + #else + rtems_test_assert( period_status.since_last_period == 0 ); + rtems_test_assert( period_status.executed_since_last_period == 0 ); + #endif + + /* + * Check get_status error cases. + */ + puts( "rtems_rate_monotonic_get_status - check RTEMS_NOT_DEFINED" ); + + /* Do some work to get a non-zero cpu usage */ + rtems_test_spin_for_ticks( 10 ); + + status = rtems_rate_monotonic_period( period_id, 100 ); + directive_failed( status, "rate_monotonic_period" ); + + /* Do some more work */ + rtems_test_spin_for_ticks( 10 ); + + /* Reset the cpu usage statistics. */ + rtems_cpu_usage_reset(); + + /* Status should be undefined. */ + status = rtems_rate_monotonic_get_status( period_id, &period_status ); + fatal_directive_status( + status, + RTEMS_NOT_DEFINED, + "rtems_rate_monotonic_get_status after cpu usage reset" + ); + + /* Clean up. */ + status = rtems_rate_monotonic_cancel( period_id ); + directive_failed( status, "rate_monotonic_cancel" ); + + /* + * Check normal get_status results. + */ + puts( + "rtems_rate_monotonic_get_status - verify values of an active period" + ); + rtems_test_spin_until_next_tick(); + status = rtems_rate_monotonic_period( period_id, 100 ); + directive_failed( status, "rate_monotonic_period" ); + + /* Do some work */ + rtems_test_spin_for_ticks( 10 ); + + /* Block a little */ + status = rtems_task_wake_after( 50 ); + + /* Check the status */ + status = rtems_rate_monotonic_get_status( period_id, &period_status ); + directive_failed( status, "rate_monotonic_get_status" ); + + /* Check status values. */ + #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__ + printf( + "wall time should be ~600000000 is %d\n", + period_status.since_last_period.tv_nsec + ); + printf( + "cpu time should be ~100000000 is %d\n", + period_status.executed_since_last_period.tv_nsec + ); + rtems_test_assert( period_status.since_last_period.tv_sec == 0 ); + rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 ); + rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 ); + rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 ); + rtems_test_assert( + period_status.executed_since_last_period.tv_nsec >= 100000000 + ); + rtems_test_assert( + period_status.executed_since_last_period.tv_nsec <= 110000000 + ); + #else + printf( + "wall time should be ~60 is %d\n", + (int) period_status.since_last_period + ); + printf( + "cpu time should be ~10 is %d\n", + (int) period_status.executed_since_last_period + ); + rtems_test_assert( period_status.since_last_period >= 60 ); + rtems_test_assert( period_status.since_last_period <= 61 ); + rtems_test_assert( period_status.executed_since_last_period >= 10 ); + rtems_test_assert( period_status.executed_since_last_period <= 12 ); + #endif + + puts("*** END OF TEST 69 ***"); + + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MILLISECONDS_PER_TICK 1 + +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_MAXIMUM_PERIODS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> +/* end of file */ |