From b0e8b47e92fb9ccccf7bbf3e7518f85091255a54 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 27 Aug 2002 11:48:54 +0000 Subject: 2002-08-27 Joel Sherrill * sptests/sp19/sptest.adp: Added from old Ada implementation. --- c/src/ada-tests/ChangeLog | 4 + c/src/ada-tests/sptests/sp19/sptest.adp | 400 ++++++++++++++++++++++++++++++++ 2 files changed, 404 insertions(+) create mode 100644 c/src/ada-tests/sptests/sp19/sptest.adp (limited to 'c') diff --git a/c/src/ada-tests/ChangeLog b/c/src/ada-tests/ChangeLog index b0b1d1534e..451df541b9 100644 --- a/c/src/ada-tests/ChangeLog +++ b/c/src/ada-tests/ChangeLog @@ -1,3 +1,7 @@ +2002-08-27 Joel Sherrill + + * sptests/sp19/sptest.adp: Added from old Ada implementation. + 2002-08-27 Joel Sherrill * tmtests/tm27/.cvsignore: Removed. Missed in previous attempts. diff --git a/c/src/ada-tests/sptests/sp19/sptest.adp b/c/src/ada-tests/sptests/sp19/sptest.adp new file mode 100644 index 0000000000..bf5fc89b5c --- /dev/null +++ b/c/src/ada-tests/sptests/sp19/sptest.adp @@ -0,0 +1,400 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 19 of the RTEMS +-- Single Processor Test Suite. +-- +-- DEPENDENCIES: +-- +-- +-- +-- 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. +-- +-- sptest.adp,v 1.3 1995/07/12 19:42:20 joel Exp +-- + +with INTERFACES; use INTERFACES; +with FLOAT_IO; +with RTEMS; +with TEST_SUPPORT; +with TEXT_IO; +with UNSIGNED32_IO; + +include(../../include/fp.inc) +include(../../include/integer.inc) + +package body SPTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TEST 19 ***" ); + + SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); + SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' ); + SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' ); + SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' ); + SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' ); + SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME( 'F', 'P', '1', ' ' ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 1 ), + 2, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.FLOATING_POINT, + SPTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 2 ), + 2, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 2 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 3 ), + 2, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 3 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 4 ), + 2, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.FLOATING_POINT, + SPTEST.TASK_ID( 4 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 5 ), + 2, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.FLOATING_POINT, + SPTEST.TASK_ID( 5 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 6 ), + 1, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.FLOATING_POINT, + SPTEST.TASK_ID( 6 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF FP1" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 6 ), + SPTEST.FIRST_FP_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF FP1" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 1 ), + SPTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 2 ), + SPTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 3 ), + SPTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 4 ), + SPTEST.FP_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 5 ), + SPTEST.FP_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" ); + + -- + -- Load "task dependent factors" in the context areas + -- + + SPTEST.FP_FACTORS( 0 ) := 0.0; + SPTEST.FP_FACTORS( 1 ) := 1000.1; + SPTEST.FP_FACTORS( 2 ) := 2000.2; + SPTEST.FP_FACTORS( 3 ) := 3000.3; + SPTEST.FP_FACTORS( 4 ) := 4000.4; + SPTEST.FP_FACTORS( 5 ) := 5000.5; + SPTEST.FP_FACTORS( 6 ) := 6000.6; + SPTEST.FP_FACTORS( 7 ) := 7000.7; + SPTEST.FP_FACTORS( 8 ) := 8000.8; + SPTEST.FP_FACTORS( 9 ) := 9000.9; + + SPTEST.INTEGER_FACTORS( 0 ) := 16#0000#; + SPTEST.INTEGER_FACTORS( 1 ) := 16#1000#; + SPTEST.INTEGER_FACTORS( 2 ) := 16#2000#; + SPTEST.INTEGER_FACTORS( 3 ) := 16#3000#; + SPTEST.INTEGER_FACTORS( 4 ) := 16#4000#; + SPTEST.INTEGER_FACTORS( 5 ) := 16#5000#; + SPTEST.INTEGER_FACTORS( 6 ) := 16#6000#; + SPTEST.INTEGER_FACTORS( 7 ) := 16#7000#; + SPTEST.INTEGER_FACTORS( 8 ) := 16#8000#; + SPTEST.INTEGER_FACTORS( 9 ) := 16#9000#; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- FIRST_FP_TASK +-- + + procedure FIRST_FP_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + TID : RTEMS.ID; + TIME : RTEMS.TIME_OF_DAY; + TASK_INDEX : RTEMS.UNSIGNED32; + INTEGER_DECLARE; + FP_DECLARE; + begin + + RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" ); + + TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID ); + + INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) ); + FP_LOAD( FP_FACTORS( TASK_INDEX ) ); + + TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( TASK_INDEX ), FALSE ); + TEXT_IO.PUT( " - integer base = (" ); + UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 ); + TEXT_IO.PUT_LINE( ")" ); + + -- + -- C implementation prints NA if no hardware FP support. + -- + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + TEXT_IO.PUT( " - float base = (" ); + FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) ); + TEXT_IO.PUT_LINE( ")" ); + + if ARGUMENT = 0 then + RTEMS.TASK_RESTART( + RTEMS.SELF, + 1, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" ); + else + TIME := ( 1988, 12, 31, 9, 0, 0, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + end if; + + end FIRST_FP_TASK; + +--PAGE +-- +-- FP_TASK +-- + + procedure FP_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + TID : RTEMS.ID; + TIME : RTEMS.TIME_OF_DAY; + TASK_INDEX : RTEMS.UNSIGNED32; + INTEGER_DECLARE; + FP_DECLARE; + begin + + RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" ); + + TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID ); + + INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) ); + FP_LOAD( FP_FACTORS( TASK_INDEX ) ); + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + TEXT_IO.PUT( " - integer base = (" ); + UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 ); + TEXT_IO.PUT_LINE( ")" ); + + -- + -- C implementation prints NA if no hardware FP support. + -- + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + TEXT_IO.PUT( " - float base = (" ); + FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) ); + TEXT_IO.PUT_LINE( ")" ); + + loop + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" ); + + if TIME.SECOND >= 16 then + + if TEST_SUPPORT.TASK_NUMBER( TID ) = 4 then + TEXT_IO.PUT_LINE( "TA4 - task_delete - self" ); + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" ); + end if; + + TEXT_IO.PUT_LINE( "TA5 - task_delete - TA3" ); + RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" ); + + TEXT_IO.PUT_LINE( "*** END OF TEST 19 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + end if; + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + + TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) ); + FP_CHECK( FP_FACTORS( TASK_INDEX ) ); + + RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + end loop; + + end FP_TASK; + +--PAGE +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + TID : RTEMS.ID; + TIME : RTEMS.TIME_OF_DAY; + TASK_INDEX : RTEMS.UNSIGNED32; + INTEGER_DECLARE; + begin + + RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" ); + + TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID ); + + INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) ); + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + TEXT_IO.PUT( " - integer base = (" ); + UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 ); + TEXT_IO.PUT_LINE( ")" ); + + loop + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" ); + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ), + FALSE + ); + + TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) ); + + RTEMS.TASK_WAKE_AFTER( + TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * + TEST_SUPPORT.TICKS_PER_SECOND, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + end loop; + + end TASK_1; + +end SPTEST; -- cgit v1.2.3