Back to home page

LXR

 
 

    


Warning, /testsuites/ada/sptests/sp19/sptest.adp is written in an unsupported language. File is not indexed.

0001 --
0002 --  SPTEST / BODY
0003 --
0004 --  DESCRIPTION:
0005 --
0006 --  This package is the implementation of Test 19 of the RTEMS
0007 --  Single Processor Test Suite.
0008 --
0009 --  DEPENDENCIES: 
0010 --
0011 --  
0012 --
0013 --  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
0014 --  On-Line Applications Research Corporation (OAR).
0015 --
0016 
0017 with INTERFACES; use INTERFACES;
0018 with FLOAT_IO;
0019 with TEST_SUPPORT;
0020 with TEXT_IO;
0021 with UNSIGNED32_IO;
0022 with RTEMS.CLOCK;
0023 
0024 include(../../support/fp.inc)
0025 include(../../support/integer.inc)
0026 
0027 package body SPTEST is
0028 
0029 -- 
0030 --  INIT
0031 --
0032 
0033    procedure INIT (
0034       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0035    ) is
0036       pragma Unreferenced(ARGUMENT);
0037       STATUS : RTEMS.STATUS_CODES;
0038    begin
0039 
0040       TEXT_IO.NEW_LINE( 2 );
0041       TEST_SUPPORT.ADA_TEST_BEGIN;
0042 
0043       SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
0044       SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
0045       SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
0046       SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
0047       SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
0048       SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME(  'F', 'P', '1', ' ' );
0049 
0050       RTEMS.TASKS.CREATE( 
0051          SPTEST.TASK_NAME( 1 ), 
0052          2, 
0053          2048, 
0054          RTEMS.DEFAULT_MODES,
0055          RTEMS.FLOATING_POINT,
0056          SPTEST.TASK_ID( 1 ),
0057          STATUS
0058       );
0059       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0060 
0061       RTEMS.TASKS.CREATE( 
0062          SPTEST.TASK_NAME( 2 ), 
0063          2, 
0064          2048, 
0065          RTEMS.DEFAULT_MODES,
0066          RTEMS.FLOATING_POINT,
0067          SPTEST.TASK_ID( 2 ),
0068          STATUS
0069       );
0070       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
0071 
0072       RTEMS.TASKS.CREATE( 
0073          SPTEST.TASK_NAME( 3 ), 
0074          2, 
0075          2048, 
0076          RTEMS.DEFAULT_MODES,
0077          RTEMS.FLOATING_POINT,
0078          SPTEST.TASK_ID( 3 ),
0079          STATUS
0080       );
0081       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
0082 
0083       RTEMS.TASKS.CREATE( 
0084          SPTEST.TASK_NAME( 4 ), 
0085          2, 
0086          2048, 
0087          RTEMS.DEFAULT_MODES,
0088          RTEMS.FLOATING_POINT,
0089          SPTEST.TASK_ID( 4 ),
0090          STATUS
0091       );
0092       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
0093 
0094       RTEMS.TASKS.CREATE( 
0095          SPTEST.TASK_NAME( 5 ), 
0096          2, 
0097          2048, 
0098          RTEMS.DEFAULT_MODES,
0099          RTEMS.FLOATING_POINT,
0100          SPTEST.TASK_ID( 5 ),
0101          STATUS
0102       );
0103       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
0104 
0105       RTEMS.TASKS.CREATE( 
0106          SPTEST.TASK_NAME( 6 ), 
0107          1, 
0108          2048, 
0109          RTEMS.DEFAULT_MODES,
0110          RTEMS.FLOATING_POINT,
0111          SPTEST.TASK_ID( 6 ),
0112          STATUS
0113       );
0114       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF FP1" );
0115 
0116       RTEMS.TASKS.START(
0117          SPTEST.TASK_ID( 6 ),
0118          SPTEST.FIRST_FP_TASK'ACCESS,
0119          0,
0120          STATUS
0121       );
0122       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF FP1" );
0123 
0124       RTEMS.TASKS.START(
0125          SPTEST.TASK_ID( 1 ),
0126          SPTEST.TASK_1'ACCESS,
0127          0,
0128          STATUS
0129       );
0130       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0131 
0132       RTEMS.TASKS.START(
0133          SPTEST.TASK_ID( 2 ),
0134          SPTEST.TASK_1'ACCESS,
0135          0,
0136          STATUS
0137       );
0138       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
0139 
0140       RTEMS.TASKS.START(
0141          SPTEST.TASK_ID( 3 ),
0142          SPTEST.TASK_1'ACCESS,
0143          0,
0144          STATUS
0145       );
0146       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
0147 
0148       RTEMS.TASKS.START(
0149          SPTEST.TASK_ID( 4 ),
0150          SPTEST.FP_TASK'ACCESS,
0151          0,
0152          STATUS
0153       );
0154       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
0155 
0156       RTEMS.TASKS.START(
0157          SPTEST.TASK_ID( 5 ),
0158          SPTEST.FP_TASK'ACCESS,
0159          0,
0160          STATUS
0161       );
0162       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
0163 
0164       --
0165       --  Load "task dependent factors" in the context areas
0166       --
0167 
0168       SPTEST.FP_FACTORS( 0 ) :=    0.0;
0169       SPTEST.FP_FACTORS( 1 ) := 1000.1;
0170       SPTEST.FP_FACTORS( 2 ) := 2000.2;
0171       SPTEST.FP_FACTORS( 3 ) := 3000.3;
0172       SPTEST.FP_FACTORS( 4 ) := 4000.4;
0173       SPTEST.FP_FACTORS( 5 ) := 5000.5;
0174       SPTEST.FP_FACTORS( 6 ) := 6000.6;
0175       SPTEST.FP_FACTORS( 7 ) := 7000.7;
0176       SPTEST.FP_FACTORS( 8 ) := 8000.8;
0177       SPTEST.FP_FACTORS( 9 ) := 9000.9;
0178 
0179       SPTEST.INTEGER_FACTORS( 0 ) := 16#0000#;
0180       SPTEST.INTEGER_FACTORS( 1 ) := 16#1000#;
0181       SPTEST.INTEGER_FACTORS( 2 ) := 16#2000#;
0182       SPTEST.INTEGER_FACTORS( 3 ) := 16#3000#;
0183       SPTEST.INTEGER_FACTORS( 4 ) := 16#4000#;
0184       SPTEST.INTEGER_FACTORS( 5 ) := 16#5000#;
0185       SPTEST.INTEGER_FACTORS( 6 ) := 16#6000#;
0186       SPTEST.INTEGER_FACTORS( 7 ) := 16#7000#;
0187       SPTEST.INTEGER_FACTORS( 8 ) := 16#8000#;
0188       SPTEST.INTEGER_FACTORS( 9 ) := 16#9000#;
0189 
0190       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0191       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0192 
0193    end INIT;
0194 
0195 -- 
0196 --  FIRST_FP_TASK
0197 --
0198 
0199    procedure FIRST_FP_TASK (
0200       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0201    ) is
0202       STATUS     : RTEMS.STATUS_CODES;
0203       TID        : RTEMS.ID;
0204       TIME       : RTEMS.TIME_OF_DAY;
0205       TASK_INDEX : RTEMS.UNSIGNED32;
0206       INTEGER_DECLARE;
0207       FP_DECLARE;
0208    begin
0209 
0210       RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
0211       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
0212 
0213       TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
0214    
0215       INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
0216       FP_LOAD( FP_FACTORS( TASK_INDEX ) );
0217 
0218       TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( TASK_INDEX ), FALSE );
0219       TEXT_IO.PUT( " - integer base = (" );
0220       UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
0221       TEXT_IO.PUT_LINE( ")" );
0222 
0223       --
0224       --  C implementation prints NA if no hardware FP support.
0225       --
0226 
0227       TEST_SUPPORT.PUT_NAME( 
0228          SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0229          FALSE
0230       );
0231       TEXT_IO.PUT( " - float base = (" );
0232       FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) );
0233       TEXT_IO.PUT_LINE( ")" );
0234 
0235       FP_CHECK( FP_FACTORS( TASK_INDEX ) );
0236       INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
0237       if ARGUMENT = 0 then
0238          RTEMS.TASKS.RESTART( 
0239             RTEMS.SELF,
0240             1,
0241             STATUS
0242          );
0243          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" );
0244       else
0245          TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
0246          RTEMS.CLOCK.SET( TIME, STATUS );
0247          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
0248 
0249          RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0250          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0251       end if;
0252 
0253    end FIRST_FP_TASK;
0254 
0255 -- 
0256 --  FP_TASK
0257 --
0258 
0259    procedure FP_TASK (
0260       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0261    ) is
0262       pragma Unreferenced(ARGUMENT);
0263       STATUS     : RTEMS.STATUS_CODES;
0264       TID        : RTEMS.ID;
0265       TIME       : RTEMS.TIME_OF_DAY;
0266       TASK_INDEX : RTEMS.UNSIGNED32;
0267       INTEGER_DECLARE;
0268       FP_DECLARE;
0269    begin
0270 
0271       RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
0272       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
0273    
0274       TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
0275   
0276       INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
0277       FP_LOAD( FP_FACTORS( TASK_INDEX ) );
0278  
0279       TEST_SUPPORT.PUT_NAME(
0280          SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0281          FALSE
0282       );
0283       TEXT_IO.PUT( " - integer base = (" );
0284       UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
0285       TEXT_IO.PUT_LINE( ")" );
0286  
0287       --
0288       --  C implementation prints NA if no hardware FP support.
0289       --
0290  
0291       TEST_SUPPORT.PUT_NAME(
0292          SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0293          FALSE
0294       );
0295       TEXT_IO.PUT( " - float base = (" );
0296       FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) );
0297       TEXT_IO.PUT_LINE( ")" );
0298 
0299       loop
0300 
0301          RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0302          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0303 
0304          if TIME.SECOND >= 16 then
0305 
0306             if TEST_SUPPORT.TASK_NUMBER( TID ) = 4 then
0307                TEXT_IO.PUT_LINE( "TA4 - task_delete - self" );
0308                RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0309                TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
0310             end if;
0311       
0312             TEXT_IO.PUT_LINE( "TA5 - task_delete - TA3" );
0313             RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 3 ), STATUS );
0314             TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
0315  
0316             TEST_SUPPORT.ADA_TEST_END;
0317             RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0318          end if;
0319 
0320          TEST_SUPPORT.PUT_NAME( 
0321             SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0322             FALSE
0323          );
0324 
0325          TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
0326          TEXT_IO.NEW_LINE;
0327 
0328          INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
0329          FP_CHECK( FP_FACTORS( TASK_INDEX ) );
0330  
0331          RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0332          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0333           
0334       end loop;
0335    
0336    end FP_TASK;
0337 
0338 -- 
0339 --  TASK_1
0340 --
0341 
0342    procedure TASK_1 (
0343       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0344    ) is
0345       pragma Unreferenced(ARGUMENT);
0346       STATUS     : RTEMS.STATUS_CODES;
0347       TID        : RTEMS.ID;
0348       TIME       : RTEMS.TIME_OF_DAY;
0349       TASK_INDEX : RTEMS.UNSIGNED32;
0350       INTEGER_DECLARE;
0351       FP_DECLARE;
0352    begin
0353 
0354       RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
0355       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
0356    
0357       TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
0358   
0359       INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
0360       FP_LOAD( FP_FACTORS( TASK_INDEX ) );
0361  
0362       TEST_SUPPORT.PUT_NAME(
0363          SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0364          FALSE
0365       );
0366       TEXT_IO.PUT( " - integer base = (" );
0367       UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
0368       TEXT_IO.PUT_LINE( ")" );
0369  
0370       loop
0371 
0372          RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0373          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0374 
0375          TEST_SUPPORT.PUT_NAME( 
0376             SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0377             FALSE
0378          );
0379 
0380          TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
0381          TEXT_IO.NEW_LINE;
0382 
0383          INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
0384          FP_CHECK( FP_FACTORS( TASK_INDEX ) );
0385 
0386          RTEMS.TASKS.WAKE_AFTER( 
0387             TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
0388               TEST_SUPPORT.TICKS_PER_SECOND, 
0389             STATUS
0390          );
0391          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0392           
0393       end loop;
0394    
0395    end TASK_1;
0396 
0397 end SPTEST;