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;