From c65a0cee2f5b34077b7484e46e47e6038a83f9b7 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 31 Jul 1996 17:17:48 +0000 Subject: added key test --- c/src/tests/psxtests/psx06/init.c | 105 +++++++++++++++++++++++++++++++++++ c/src/tests/psxtests/psx06/psx06.scn | 0 c/src/tests/psxtests/psx06/system.h | 61 ++++++++++++++++++++ c/src/tests/psxtests/psx06/task.c | 52 +++++++++++++++++ c/src/tests/psxtests/psx06/task2.c | 53 ++++++++++++++++++ 5 files changed, 271 insertions(+) create mode 100644 c/src/tests/psxtests/psx06/init.c create mode 100644 c/src/tests/psxtests/psx06/psx06.scn create mode 100644 c/src/tests/psxtests/psx06/system.h create mode 100644 c/src/tests/psxtests/psx06/task.c create mode 100644 c/src/tests/psxtests/psx06/task2.c (limited to 'c/src/tests/psxtests') diff --git a/c/src/tests/psxtests/psx06/init.c b/c/src/tests/psxtests/psx06/init.c new file mode 100644 index 0000000000..84b0caecde --- /dev/null +++ b/c/src/tests/psxtests/psx06/init.c @@ -0,0 +1,105 @@ +/* + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#define CONFIGURE_INIT +#include "system.h" +#include + +void Key_destructor( + void *key_data +) +{ + Destructor_invoked++; + + /* + * This checks out that we only run the destructor multiple times + * when the key data is non null. + */ + + if ( Destructor_invoked == 5 ) + (void) pthread_setspecific( Key_id, NULL ); +} + +void *POSIX_Init( + void *argument +) +{ + int status; + unsigned int remaining; + rtems_unsigned32 *key_data; + + puts( "\n\n*** POSIX TEST 6 ***" ); + + /* set the time of day, and print our buffer in multiple ways */ + + set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 ); + + /* get id of this thread */ + + Init_id = pthread_self(); + printf( "Init's ID is 0x%08x\n", Init_id ); + + /* create a couple of threads */ + + status = pthread_create( &Task_id, NULL, Task_1, NULL ); + assert( !status ); + + status = pthread_create( &Task2_id, NULL, Task_2, NULL ); + assert( !status ); + + /* create a key */ + + empty_line(); + + Destructor_invoked = 0; + printf( "Init: Creating a key\n" ); + status = pthread_key_create( &Key_id, Key_destructor ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Destructor invoked %d times\n", Destructor_invoked ); + + printf( "Init: Setting the key to %d\n", 0 ); + status = pthread_setspecific( Key_id, &Data_array[ 0 ] ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + /* switch to task 1 */ + + key_data = pthread_getspecific( Key_id ); + printf( "Init: Got the key value of %d\n", + (rtems_unsigned32 *)key_data - Data_array ); + + remaining = sleep( 3 ); + if ( remaining ) + printf( "seconds remaining = %d\n", remaining ); + assert( !remaining ); + + /* switch to task 1 */ + + /* delete the key */ + + printf( "Init: Deleting a key\n" ); + status = pthread_key_delete( Key_id ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Destructor invoked %d times\n", Destructor_invoked ); + + puts( "*** END OF POSIX TEST 6 ***" ); + exit( 0 ); + + return NULL; /* just so the compiler thinks we returned something */ +} diff --git a/c/src/tests/psxtests/psx06/psx06.scn b/c/src/tests/psxtests/psx06/psx06.scn new file mode 100644 index 0000000000..e69de29bb2 diff --git a/c/src/tests/psxtests/psx06/system.h b/c/src/tests/psxtests/psx06/system.h new file mode 100644 index 0000000000..434bde09e3 --- /dev/null +++ b/c/src/tests/psxtests/psx06/system.h @@ -0,0 +1,61 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +/* functions */ + +#include + +void *POSIX_Init( + void *argument +); + +void *Task_1( + void *argument +); + +void *Task_2( + void *argument +); + +/* configuration information */ + +#define CONFIGURE_SPTEST + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_MAXIMUM_POSIX_KEYS 10 + +#include + +/* global variables */ + +#ifdef CONFIGURE_INIT +#define TEST_EXTERN +#else +#define TEST_EXTERN extern +#endif + +TEST_EXTERN pthread_t Init_id; +TEST_EXTERN pthread_t Task_id; +TEST_EXTERN pthread_t Task2_id; +TEST_EXTERN pthread_key_t Key_id; +TEST_EXTERN rtems_unsigned32 Data_array[ CONFIGURE_MAXIMUM_POSIX_THREADS ]; +TEST_EXTERN rtems_unsigned32 Destructor_invoked; + +/* end of include file */ diff --git a/c/src/tests/psxtests/psx06/task.c b/c/src/tests/psxtests/psx06/task.c new file mode 100644 index 0000000000..f8fcb1e7e2 --- /dev/null +++ b/c/src/tests/psxtests/psx06/task.c @@ -0,0 +1,52 @@ +/* Task_1 + * + * This routine serves as a test task. It verifies the basic task + * switching capabilities of the executive. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" +#include + +void *Task_1( + void *argument +) +{ + int status; + rtems_unsigned32 *key_data; + + printf( "Task_1: Setting the key to %d\n", 1 ); + status = pthread_setspecific( Key_id, &Data_array[ 1 ] ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + key_data = pthread_getspecific( Key_id ); + printf( "Task_1: Got the key value of %d\n", + (rtems_unsigned32 *)key_data - Data_array ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Task_1: exitting\n" ); + + pthread_exit( NULL ); + + /* switch to task 2 */ + + return NULL; /* just so the compiler thinks we returned something */ +} diff --git a/c/src/tests/psxtests/psx06/task2.c b/c/src/tests/psxtests/psx06/task2.c new file mode 100644 index 0000000000..8446edfeaa --- /dev/null +++ b/c/src/tests/psxtests/psx06/task2.c @@ -0,0 +1,53 @@ +/* Task_2 + * + * This routine serves as a test task. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include "system.h" +#include + +void *Task_2( + void *argument +) +{ + int status; + rtems_unsigned32 *key_data; + + printf( "Destructor invoked %d times\n", Destructor_invoked ); + + printf( "Task_2: Setting the key to %d\n", 2 ); + status = pthread_setspecific( Key_id, &Data_array[ 2 ] ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + key_data = pthread_getspecific( Key_id ); + printf( "Task_2: Got the key value of %d\n", + (rtems_unsigned32 *)key_data - Data_array ); + if ( status ) + printf( "status = %d\n", status ); + assert( !status ); + + printf( "Task2: exitting\n" ); + + pthread_exit( NULL ); + + /* switch to init task */ + + return NULL; /* just so the compiler thinks we returned something */ +} -- cgit v1.2.3