From 352c9b2035e32e56f10f261d94955d97f4ab0f1c Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 9 Nov 1999 22:07:23 +0000 Subject: This patch adds the basic framework for the ITRON 3.0 API implementation for RTEMS. --- testsuites/itrontests/Makefile.am | 21 ++ testsuites/itrontests/README | 6 + testsuites/itrontests/itronhello/init.c | 30 +++ testsuites/itrontests/itronhello/system.h | 35 +++ testsuites/itrontests/itronmbf01/init.c | 362 +++++++++++++++++++++++++++++ testsuites/itrontests/itronmbf01/system.h | 37 +++ testsuites/itrontests/itronsem01/init.c | 328 ++++++++++++++++++++++++++ testsuites/itrontests/itronsem01/system.h | 39 ++++ testsuites/itrontests/itrontask01/init.c | 72 ++++++ testsuites/itrontests/itrontask01/system.h | 39 ++++ 10 files changed, 969 insertions(+) create mode 100644 testsuites/itrontests/Makefile.am create mode 100644 testsuites/itrontests/README create mode 100644 testsuites/itrontests/itronhello/init.c create mode 100644 testsuites/itrontests/itronhello/system.h create mode 100644 testsuites/itrontests/itronmbf01/init.c create mode 100644 testsuites/itrontests/itronmbf01/system.h create mode 100644 testsuites/itrontests/itronsem01/init.c create mode 100644 testsuites/itrontests/itronsem01/system.h create mode 100644 testsuites/itrontests/itrontask01/init.c create mode 100644 testsuites/itrontests/itrontask01/system.h (limited to 'testsuites/itrontests') diff --git a/testsuites/itrontests/Makefile.am b/testsuites/itrontests/Makefile.am new file mode 100644 index 0000000000..ff9e16ae5a --- /dev/null +++ b/testsuites/itrontests/Makefile.am @@ -0,0 +1,21 @@ +## +## $Id$ +## + +AUTOMAKE_OPTIONS = foreign 1.4 +ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal + +project_bspdir = $(PROJECT_ROOT)/@RTEMS_BSP@ + +PREINSTALLDIRS = $(project_bspdir)/tests/screens/psxtests +$(PREINSTALLDIRS): + @$(mkinstalldirs) $@ + +all-local: $(PREINSTALLDIRS) + +ITRON_DIRS = itronhello itrontask01 itronmbf01 itronsem01 itrontime01 + +SUBDIRS = $(ITRON_DIRS) + +include $(top_srcdir)/../../../../automake/subdirs.am +include $(top_srcdir)/../../../../automake/local.am diff --git a/testsuites/itrontests/README b/testsuites/itrontests/README new file mode 100644 index 0000000000..65c5d4165d --- /dev/null +++ b/testsuites/itrontests/README @@ -0,0 +1,6 @@ +# +# $Id$ +# + +This directory contains the functionality tests for the ITRON 3.0 API +implementation. diff --git a/testsuites/itrontests/itronhello/init.c b/testsuites/itrontests/itronhello/init.c new file mode 100644 index 0000000000..f2c079048c --- /dev/null +++ b/testsuites/itrontests/itronhello/init.c @@ -0,0 +1,30 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is called from init_exec and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT +#include "system.h" +#include + +void ITRON_Init( void ) +{ + printf( "\n\n*** ITRON HELLO WORLD TEST ***\n" ); + printf( "Hello World\n" ); + printf( "*** END OF ITRON HELLO WORLD TEST ***\n" ); + exit( 0 ); +} diff --git a/testsuites/itrontests/itronhello/system.h b/testsuites/itrontests/itronhello/system.h new file mode 100644 index 0000000000..d7a30d195b --- /dev/null +++ b/testsuites/itrontests/itronhello/system.h @@ -0,0 +1,35 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include + +/* functions */ + +void ITRON_Init( void ); + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_ITRON_INIT_TASK_TABLE + +#include + +/* global variables */ + +TEST_EXTERN rtems_id Global_variable; /* example global variable */ + +/* end of include file */ diff --git a/testsuites/itrontests/itronmbf01/init.c b/testsuites/itrontests/itronmbf01/init.c new file mode 100644 index 0000000000..39788c49f8 --- /dev/null +++ b/testsuites/itrontests/itronmbf01/init.c @@ -0,0 +1,362 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is called from init_exec and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT +#include "system.h" +#include +#include + +/* + * The following is hopefully temporary. + */ + +#include + +#define put_time(_s) \ +do { \ + time_t a_time_t; \ + a_time_t = time( 0 ); \ + printf( "%s%s", _s, ctime( &a_time_t ) ); \ +} while(0) + + + +void TestCre(); +void TestDel(); +void TestPsnd(); +void TestRef(); +void TestTrcv(); +void TestRcv(); +void TestPrcv(); + +void ITRON_Init( void ) +{ + printf( "\n\n*** ITRONMBF01 -- ITRON MESSAGE BUFFER TEST ***\n" ); + + TestCre(); + TestDel(); + TestPsnd(); + TestRef(); + TestRcv(); + TestRef(); + TestPrcv(); + TestTrcv(); + + printf("\n\n*** ITRONMBF01 --- ITRON MESSAGE BUFFER TEST ***\n"); + exit(0); +} + +void TestCre() +{ + ER status; + T_CMBF pk_cmbf; + + /* + * Exercise cre_mbf - this code seems to exercise every path. + */ + + puts( "Init - cre_mbf - NULL pk_cmbf returns E_PAR" ); + status = cre_mbf( 1, NULL ); + assert( status == E_PAR ); + + puts( "Init - cre_mbf - negative values for bufsz returns E_PAR" ); + pk_cmbf.bufsz = -1; + pk_cmbf.maxmsz = 100; + status = cre_mbf( 1, &pk_cmbf ); + assert( status == E_PAR ); + + puts( "Init - cre_mbf - negative values for maxmsz returns E_PAR" ); + pk_cmbf.bufsz = 100; + pk_cmbf.maxmsz = -1; + status = cre_mbf( 1, &pk_cmbf ); + assert( status == E_PAR ); + + puts( "Init - cre_mbf - bufsz < maxmsz returns E_PAR" ); + pk_cmbf.bufsz = 100; + pk_cmbf.maxmsz = 101; + status = cre_mbf( 1, &pk_cmbf ); + assert( status == E_PAR ); + + /* + * Now run through all the bad ID errors + */ + + pk_cmbf.bufsz = 200; + pk_cmbf.maxmsz = 30; + puts( "Init - cre_mbf - bad id (less than -4) - E_OACV" ); + status = cre_mbf( -5, &pk_cmbf ); + assert( status == E_OACV ); + + puts( "Init - cre_mbf - bad id (between 0 and -4) - E_ID" ); + status = cre_mbf( -4, &pk_cmbf ); + assert( status == E_ID ); + + puts( "Init - cre_mbf - bad id (0) - E_ID" ); + status = cre_mbf( 0, &pk_cmbf ); + assert( status == E_ID ); + + puts( "Init - cre_mbf - bad id (too great) - E_ID" ); + status = cre_mbf( CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1, &pk_cmbf ); + assert( status == E_ID ); + + puts( "Init - cre_mbf - create mbf 1 TA_TFIFO - E_OK" ); + pk_cmbf.bufsz = 600; + pk_cmbf.maxmsz = 200; + pk_cmbf.mbfatr = TA_TFIFO; + status = cre_mbf( 1, &pk_cmbf ); + assert( status == E_OK ); + + puts( "Init - cre_mbf - create mbf 1 again - E_OBJ" ); + status = cre_mbf( 1, &pk_cmbf ); + assert( status == E_OBJ ); + + puts( "Init - cre_mbf - create mbf 2 TA_TPRI - E_OK" ); + pk_cmbf.bufsz = 600; + pk_cmbf.maxmsz = 200; + pk_cmbf.mbfatr = TA_TPRI; + status = cre_mbf( 2, &pk_cmbf ); + assert( status == E_OK ); +} + +void TestDel() +{ + ER status; + + /* + * Generate all the bad id errors for del_mbf + */ + + puts( "Init - del_mbf - bad id (less than -4) - E_OACV" ); + status = del_mbf( -5 ); + assert( status == E_OACV ); + + puts( "Init - del_mbf - bad id (between 0 and -4) - E_ID" ); + status = del_mbf( -4 ); + assert( status == E_ID ); + + puts( "Init - del_mbf - bad id (0) - E_ID" ); + status = del_mbf( 0 ); + assert( status == E_ID ); + + puts( "Init - del_mbf - bad id (too great) - E_ID" ); + status = del_mbf( CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1 ); + assert( status == E_ID ); + + + puts("Init - del_mbf - E_OK" ); + status = del_mbf(2); + assert(status == E_OK); +} + +void TestPsnd() +{ + ER status; + char msg[100] = "This is test message 1"; + + /* + * Generate all the bad id errors for psnd_mbf + */ + + puts( "Init - psnd_mbf - bad id (less than -4) - E_OACV" ); + status = psnd_mbf(-5, msg, sizeof(msg)); + assert( status == E_OACV ); + + puts( "Init - psnd_mbf - bad id (between 0 and -4) - E_ID" ); + status = psnd_mbf(-4, msg, sizeof(msg)); + assert( status == E_ID ); + + puts( "Init - psnd_mbf - bad id (0) - E_ID" ); + status = psnd_mbf(0, msg, sizeof(msg)); + assert( status == E_ID ); + + puts( "Init - psnd_mbf - bad id (too great) - E_ID" ); + status = psnd_mbf(CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1, msg, + sizeof(msg)); + assert( status == E_ID ); + + puts( "Init - psnd_mbf - msg == 0, E_PAR" ); + status = psnd_mbf(1, 0, sizeof(msg)); + assert( status == E_PAR ); + + puts( "Init - psnd_mbf - msgsz too big - E_PAR" ); + status = psnd_mbf(1, msg, 300); + assert( status == E_PAR ); + + puts( "Init - psnd_mbf - msgsz <0 - E_PAR" ); + status = psnd_mbf(1, msg, -10); + assert( status == E_PAR ); + + puts( "Init - psnd_mbf - E_OK" ); + status = psnd_mbf(1, msg, sizeof(msg)); + assert( status == E_OK ); +} + +void TestRef() +{ + ER status; + T_RMBF pk_rmbf; + + puts( "Init - ref_mbf - bad id (less than -4) - E_OACV" ); + status = ref_mbf(&pk_rmbf, -5); + assert( status == E_OACV ); + + puts( "Init - ref_mbf - bad id (between 0 and -4) - E_ID" ); + status = ref_mbf(&pk_rmbf, -4); + assert( status == E_ID ); + + puts( "Init - ref_mbf - bad id (0) - E_ID" ); + status = ref_mbf(&pk_rmbf, 0); + assert( status == E_ID ); + + puts( "Init - ref_mbf - bad id (too great) - E_ID" ); + status = ref_mbf(&pk_rmbf, + CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1); + assert( status == E_ID ); + + puts( "Init - ref_mbf - NULL pk_mbf returns E_PAR" ); + status = ref_mbf( NULL, 1 ); + assert( status == E_PAR ); + + puts( "Init - ref_mbf - mbf 1 - E_OK" ); + status = ref_mbf( &pk_rmbf, 1 ); + assert( status == E_OK ); + + printf( "Init - mbf 1 msgsz = %d\n", pk_rmbf.msgsz ); + printf( "Init - mbf 1 frbufsz = %d\n", pk_rmbf.frbufsz ); + printf( "Init - mbf 1 waiting tasks = %d\n", pk_rmbf.wtsk ); + printf( "Init - mbf 1 sending tasks = %d\n", pk_rmbf.stsk); +} + +void TestRcv() +{ + ER status; + char buffer[200]; + int s; + + puts( "Init - rcv_mbf - bad id (less than -4) - E_OACV" ); + status = rcv_mbf(buffer, &s, -5); + assert( status == E_OACV ); + + puts( "Init - rcv_mbf - bad id (between 0 and -4) - E_ID" ); + status = rcv_mbf(buffer, &s, -4); + assert( status == E_ID ); + + puts( "Init - rcv_mbf - bad id (0) - E_ID" ); + status = rcv_mbf(buffer, &s, 0); + assert( status == E_ID ); + + puts( "Init - rcv_mbf - bad id (too great) - E_ID" ); + status = rcv_mbf(buffer, &s, CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1); + assert( status == E_ID ); + + puts( "Init - rcv_mbf - NULL msg returns E_PAR" ); + status = rcv_mbf(NULL, &s, 1); + assert( status == E_PAR ); + + puts( "Init - rcv_mbf - NULL p_msgsz returns E_PAR" ); + status = rcv_mbf(buffer, 0, 1); + assert( status == E_PAR ); + + puts("Init - rcv_mbf -- OK"); + status = rcv_mbf(buffer, &s, 1); + assert(status == E_OK); + printf("Message:[%s], length:%d\n", buffer, s); +} + + +void TestPrcv() +{ + ER status; + char buffer[200]; + int s; + + puts( "Init - prcv_mbf - bad id (less than -4) - E_OACV" ); + status = prcv_mbf(buffer, &s, -5); + assert( status == E_OACV ); + + puts( "Init - prcv_mbf - bad id (between 0 and -4) - E_ID" ); + status = prcv_mbf(buffer, &s, -4); + assert( status == E_ID ); + + puts( "Init - prcv_mbf - bad id (0) - E_ID" ); + status = prcv_mbf(buffer, &s, 0); + assert( status == E_ID ); + + puts( "Init - prcv_mbf - bad id (too great) - E_ID" ); + status = prcv_mbf(buffer, &s, CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1); + assert( status == E_ID ); + + puts( "Init - prcv_mbf - NULL msg returns E_PAR" ); + status = prcv_mbf(NULL, &s, 1); + assert( status == E_PAR ); + + puts( "Init - prcv_mbf - NULL p_msgsz returns E_PAR" ); + status = prcv_mbf(buffer, 0, 1); + assert( status == E_PAR ); + + puts("Init - prcv_mbf -- E_TMOUT"); + status = prcv_mbf(buffer, &s, 1); + assert(status == E_TMOUT); +} + + +void TestTrcv() +{ + ER status; + char buffer[200]; + int s; + + puts( "Init - trcv_mbf - bad id (less than -4) - E_OACV" ); + status = trcv_mbf(buffer, &s, -5, 5000); + assert( status == E_OACV ); + + puts( "Init - trcv_mbf - bad id (between 0 and -4) - E_ID" ); + status = trcv_mbf(buffer, &s, -4, 5000); + assert( status == E_ID ); + + puts( "Init - trcv_mbf - bad id (0) - E_ID" ); + status = trcv_mbf(buffer, &s, 0, 5000); + assert( status == E_ID ); + + puts( "Init - trcv_mbf - bad id (too great) - E_ID" ); + status = trcv_mbf(buffer, &s, + CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS + 1, + 5000); + assert( status == E_ID ); + + puts( "Init - trcv_mbf - NULL msg returns E_PAR" ); + status = trcv_mbf(NULL, &s, 1, 5000); + assert( status == E_PAR ); + + puts( "Init - trcv_mbf - NULL p_msgsz returns E_PAR" ); + status = trcv_mbf(buffer, 0, 1, 5000); + assert( status == E_PAR ); + + puts( "Init - trcv_mbf - tmout <-2 returns E_PAR" ); + status = trcv_mbf(buffer, &s, 1, -2); + assert( status == E_PAR ); + + puts("\nInit - trcv_mbf -- E_TMOUT"); + put_time( "Init - starting to block at "); + status = trcv_mbf(buffer, &s, 1, 1000); + assert(status == E_TMOUT); + put_time( "Init - time out at "); +} + + diff --git a/testsuites/itrontests/itronmbf01/system.h b/testsuites/itrontests/itronmbf01/system.h new file mode 100644 index 0000000000..b433415b2b --- /dev/null +++ b/testsuites/itrontests/itronmbf01/system.h @@ -0,0 +1,37 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include + +/* functions */ + +void ITRON_Init( void ); + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_ITRON_INIT_TASK_TABLE +#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS 10 + +#include + +/* global variables */ + +TEST_EXTERN rtems_id Global_variable; /* example global variable */ + +/* end of include file */ diff --git a/testsuites/itrontests/itronsem01/init.c b/testsuites/itrontests/itronsem01/init.c new file mode 100644 index 0000000000..4748de7f45 --- /dev/null +++ b/testsuites/itrontests/itronsem01/init.c @@ -0,0 +1,328 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is called from init_exec and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT +#include "system.h" +#include + +/* + * The following is hopefully temporary. + */ + +#include + +#define put_time(_s) \ + do { \ + time_t a_time_t; \ + a_time_t = time( 0 ); \ + printf( "%s%s", _s, ctime( &a_time_t ) ); \ + } while(0) + +void ITRON_Init( void ) +{ + ER status; + T_CSEM pk_csem; + T_RSEM pk_rsem; + + printf( "\n\n*** ITRONSEM01 -- ITRON SEMAPHORE TEST ***\n" ); + + /* + * Exercise cre_sem - this code seems to exercise every path. + */ + + puts( "Init - cre_sem - NULL pk_sem returns E_PAR" ); + status = cre_sem( 1, NULL ); + assert( status == E_PAR ); + + puts( "Init - cre_sem - isemcnt > maxsem returns E_PAR" ); + pk_csem.isemcnt = 3; + pk_csem.maxsem = 2; + status = cre_sem( 1, &pk_csem ); + assert( status == E_PAR ); + + puts( "Init - cre_sem - maxsem of 0 returns E_PAR" ); + pk_csem.isemcnt = 0; + pk_csem.maxsem = 0; + status = cre_sem( 1, &pk_csem ); + assert( status == E_PAR ); + + /* + * Now run through all the bad ID errors + */ + + pk_csem.isemcnt = 2; + pk_csem.maxsem = 3; + puts( "Init - cre_sem - bad id (less than -4) - E_OACV" ); + status = cre_sem( -5, &pk_csem ); + assert( status == E_OACV ); + + puts( "Init - cre_sem - bad id (between 0 and -4) - E_ID" ); + status = cre_sem( -4, &pk_csem ); + assert( status == E_ID ); + + puts( "Init - cre_sem - bad id (0) - E_ID" ); + status = cre_sem( 0, &pk_csem ); + assert( status == E_ID ); + + puts( "Init - cre_sem - bad id (too great) - E_ID" ); + status = cre_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1, &pk_csem ); + assert( status == E_ID ); + + puts( "Init - cre_sem - create semaphore 1 TA_TFIFO - E_OK" ); + pk_csem.isemcnt = 2; + pk_csem.maxsem = 3; + pk_csem.sematr = TA_TFIFO; + status = cre_sem( 1, &pk_csem ); + assert( status == E_OK ); + + puts( "Init - cre_sem - create semaphore 1 again - E_OBJ" ); + status = cre_sem( 1, &pk_csem ); + assert( status == E_OBJ ); + + puts( "Init - cre_sem - create semaphore 2 TA_TPRI - E_OK" ); + pk_csem.isemcnt = 2; + pk_csem.maxsem = 3; + pk_csem.sematr = TA_TPRI; + status = cre_sem( 2, &pk_csem ); + assert( status == E_OK ); + + /* + * Generate all the bad id errors for del_sem + */ + + puts( "Init - del_sem - bad id (less than -4) - E_OACV" ); + status = del_sem( -5 ); + assert( status == E_OACV ); + + puts( "Init - del_sem - bad id (between 0 and -4) - E_ID" ); + status = del_sem( -4 ); + assert( status == E_ID ); + + puts( "Init - del_sem - bad id (0) - E_ID" ); + status = del_sem( 0 ); + assert( status == E_ID ); + + puts( "Init - del_sem - bad id (too great) - E_ID" ); + status = del_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1 ); + assert( status == E_ID ); + + /* + * Generate all the bad id errors for sig_sem + */ + + puts( "Init - sig_sem - bad id (less than -4) - E_OACV" ); + status = sig_sem( -5 ); + assert( status == E_OACV ); + + puts( "Init - sig_sem - bad id (between 0 and -4) - E_ID" ); + status = sig_sem( -4 ); + assert( status == E_ID ); + + puts( "Init - sig_sem - bad id (0) - E_ID" ); + status = sig_sem( 0 ); + assert( status == E_ID ); + + puts( "Init - sig_sem - bad id (too great) - E_ID" ); + status = wai_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1 ); + assert( status == E_ID ); + + /* + * Generate all the bad id errors for preq_sem + */ + + puts( "Init - preq_sem - bad id (less than -4) - E_OACV" ); + status = preq_sem( -5 ); + assert( status == E_OACV ); + + puts( "Init - preq_sem - bad id (between 0 and -4) - E_ID" ); + status = preq_sem( -4 ); + assert( status == E_ID ); + + puts( "Init - preq_sem - bad id (0) - E_ID" ); + status = preq_sem( 0 ); + assert( status == E_ID ); + + puts( "Init - preq_sem - bad id (too great) - E_ID" ); + status = preq_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1 ); + assert( status == E_ID ); + + /* + * Generate all the bad id errors for wai_sem + */ + + puts( "Init - wai_sem - bad id (less than -4) - E_OACV" ); + status = wai_sem( -5 ); + assert( status == E_OACV ); + + puts( "Init - wai_sem - bad id (between 0 and -4) - E_ID" ); + status = wai_sem( -4 ); + assert( status == E_ID ); + + puts( "Init - wai_sem - bad id (0) - E_ID" ); + status = wai_sem( 0 ); + assert( status == E_ID ); + + puts( "Init - wai_sem - bad id (too great) - E_ID" ); + status = wai_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1 ); + assert( status == E_ID ); + + /* + * Generate all the bad id errors for twai_sem + */ + + puts( "Init - twai_sem - bad id (less than -4) - E_OACV" ); + status = twai_sem( -5, 1000 ); + assert( status == E_OACV ); + + puts( "Init - twai_sem - bad id (between 0 and -4) - E_ID" ); + status = twai_sem( -4, 1000 ); + assert( status == E_ID ); + + puts( "Init - twai_sem - bad id (0) - E_ID" ); + status = twai_sem( 0, 1000 ); + assert( status == E_ID ); + + puts( "Init - twai_sem - bad id (too great) - E_ID" ); + status = twai_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1, 1000 ); + assert( status == E_ID ); + + /* + * Generate all the bad id errors for ref_sem + */ + + puts( "Init - ref_sem - bad id (less than -4) - E_OACV" ); + status = ref_sem( -5, &pk_rsem ); + assert( status == E_OACV ); + + puts( "Init - ref_sem - bad id (between 0 and -4) - E_ID" ); + status = ref_sem( -4, &pk_rsem ); + assert( status == E_ID ); + + puts( "Init - ref_sem - bad id (0) - E_ID" ); + status = ref_sem( 0, &pk_rsem ); + assert( status == E_ID ); + + puts( "Init - ref_sem - bad id (too great) - E_ID" ); + status = ref_sem( CONFIGURE_MAXIMUM_ITRON_SEMAPHORES + 1, &pk_rsem ); + assert( status == E_ID ); + + /* + * Exercise preq_sem (and sig_sem a little) + */ + + + puts( "Init - preq_sem - semaphore 1 available (count --> 1) - E_OK" ); + status = preq_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - preq_sem - semaphore 1 available (count --> 0) - E_OK" ); + status = preq_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - preq_sem - semaphore 1 unavailable - E_TMOUT" ); + status = preq_sem( 1 ); + assert( status == E_TMOUT ); + + puts( "Init - sig_sem - semaphore 1 (count --> 1) - E_OK" ); + status = sig_sem( 1 ); + assert( status == E_OK ); + + puts("Init - twai_sem(TMO_POL) - semaphore 1 available (count --> 0) - E_OK"); + status = twai_sem( 1, TMO_POL ); + assert( status == E_OK ); + + puts( "Init - twai_sem(TMO_POL) - semaphore 1 available - E_TMOUT" ); + status = twai_sem( 1, TMO_POL ); + assert( status == E_TMOUT ); + + /* + * Exercise twai_sem + */ + + puts( "Init - twai_sem - semaphore 1 unavailable - 1 second E_TMOUT" ); + put_time( "Init - starting to block at "); + status = twai_sem( 1, 1000 ); + assert( status == E_TMOUT ); + put_time( "Init - timed out at "); + puts( "Init - twai_sem - semaphore 1 unavailable - timeout completed" ); + + /* + * Now let's test exceed the maximum count of semaphore 1 + */ + + puts( "Init - sig_sem - semaphore 1 (count --> 1) - E_OK" ); + status = sig_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - sig_sem - semaphore 1 (count --> 2) - E_OK" ); + status = sig_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - sig_sem - semaphore 1 (count --> 3) - E_OK" ); + status = sig_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - sig_sem - semaphore 1 (count > maximum) - E_QOVR" ); + status = sig_sem( 1 ); + assert( status == E_OK ); + + /* + * Exercise ref_sem + */ + + puts( "Init - ref_sem - NULL pk_sem returns E_PAR" ); + status = ref_sem( 1, NULL ); + assert( status == E_PAR ); + + puts( "Init - ref_sem - semaphore 1 - E_OK" ); + status = ref_sem( 1, &pk_rsem ); + assert( status == E_OK ); + printf( "Init - semaphore 1 count = %d\n", pk_rsem.semcnt ); + printf( "Init - semaphore 1 waiting tasks = %d\n", pk_rsem.wtsk ); + + puts( "Init - preq_sem - semaphore 1 (count --> 2) - E_OK" ); + status = preq_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - ref_sem - semaphore 1 - E_OK" ); + status = ref_sem( 1, &pk_rsem ); + assert( status == E_OK ); + printf( "Init - semaphore 1 count = %d\n", pk_rsem.semcnt ); + printf( "Init - semaphore 1 waiting tasks = %d\n", pk_rsem.wtsk ); + + + /* + * Exercise del_sem + */ + + /* XXX really want another task blocking on the semaphore XXX */ + + puts( "Init - del_sem - semaphore 1 deleted - E_OK" ); + status = del_sem( 1 ); + assert( status == E_OK ); + + puts( "Init - XXX need other tasks to complete the test XXX" ); + + puts( "Init - dly_tsk - 1 second to let other task run" ); + status = dly_tsk( 1000 ); + assert( status == E_OK ); + + printf( "*** END OF ITRONSEM01 -- ITRON SEMAPHORE TEST ***\n" ); + exit( 0 ); +} diff --git a/testsuites/itrontests/itronsem01/system.h b/testsuites/itrontests/itronsem01/system.h new file mode 100644 index 0000000000..e3eac6012f --- /dev/null +++ b/testsuites/itrontests/itronsem01/system.h @@ -0,0 +1,39 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include +#include +#include + +/* functions */ + +void ITRON_Init( void ); + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_ITRON_INIT_TASK_TABLE +#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES 10 + +#include + +/* global variables */ + +TEST_EXTERN rtems_id Global_variable; /* example global variable */ + +/* end of include file */ diff --git a/testsuites/itrontests/itrontask01/init.c b/testsuites/itrontests/itrontask01/init.c new file mode 100644 index 0000000000..3b36e2e9ec --- /dev/null +++ b/testsuites/itrontests/itrontask01/init.c @@ -0,0 +1,72 @@ +/* Init + * + * This routine is the initialization task for this test program. + * It is a user initialization task and has the responsibility for creating + * and starting the tasks that make up the test. If the time of day + * clock is required for the test, it should also be set to a known + * value by this function. This test is based off of sp01. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + + +#define TEST_INIT +#include "system.h" + +#warning "Task_id is really an rtems_id" +void Task_1_through_3( void ){} + +void ITRON_Init( void ) +{ + rtems_time_of_day time; + ER status; + T_CTSK values; + + puts( "\n\n*** ITRONTASK01 - TICKER TEST ***" ); + + build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); + status = rtems_clock_set( &time ); + directive_failed( status, "rtems_clock_set" ); + + values.exinf = NULL; + values.tskatr = TA_HLNG; + values.task = Task_1_through_3; + values.itskpri = 1; + values.stksz = RTEMS_MINIMUM_STACK_SIZE; + + status = cre_tsk( Task_id[1], &values ); + directive_failed( status, "cre_tsk of TA1" ); + + values.stksz = RTEMS_MINIMUM_STACK_SIZE; + status = cre_tsk( Task_id[2], &values ); + directive_failed( status, "cre_tsk of TA1" ); + + values.stksz = RTEMS_MINIMUM_STACK_SIZE; + status = cre_tsk( Task_id[3], &values ); + directive_failed( status, "cre_tsk of TA1" ); + +#if 0 + status = sta_tsk( Task_id[1] ); + directive_failed( status, "rtems_task_start of TA1" ); + + directive_failed( status, "rtems_task_start of TA2" ); + + status = rtems_task_start( Task_id[ 3 ], Task_1_through_3, 0 ); + directive_failed( status, "rtems_task_start of TA3" ); + + status = rtems_task_delete( RTEMS_SELF ); + directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); +#endif +} diff --git a/testsuites/itrontests/itrontask01/system.h b/testsuites/itrontests/itrontask01/system.h new file mode 100644 index 0000000000..8a5b4ad378 --- /dev/null +++ b/testsuites/itrontests/itrontask01/system.h @@ -0,0 +1,39 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include +#include + +/* functions */ + +void ITRON_Init( void ); + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_ITRON_INIT_TASK_TABLE + +#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) + +#include + +/* global variables */ + +TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */ + +/* end of include file */ -- cgit v1.2.3