summaryrefslogtreecommitdiffstats
path: root/testsuites/itrontests/itronsem01
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-11-09 22:07:23 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-11-09 22:07:23 +0000
commit352c9b2035e32e56f10f261d94955d97f4ab0f1c (patch)
treef433e95ae0ab8d8854ea19b7f4bfab3ffb431726 /testsuites/itrontests/itronsem01
parentFixed warning where initialized default POSIX API structure did (diff)
downloadrtems-352c9b2035e32e56f10f261d94955d97f4ab0f1c.tar.bz2
This patch adds the basic framework for the ITRON 3.0 API implementation
for RTEMS.
Diffstat (limited to 'testsuites/itrontests/itronsem01')
-rw-r--r--testsuites/itrontests/itronsem01/init.c328
-rw-r--r--testsuites/itrontests/itronsem01/system.h39
2 files changed, 367 insertions, 0 deletions
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 <stdio.h>
+
+/*
+ * The following is hopefully temporary.
+ */
+
+#include <time.h>
+
+#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 <tmacros.h>
+#include <itron.h>
+#include <assert.h>
+
+/* 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 <confdefs.h>
+
+/* global variables */
+
+TEST_EXTERN rtems_id Global_variable; /* example global variable */
+
+/* end of include file */