source: rtems/c/src/ada-tests/sptests/sp20/sptest.adb @ a1ceec8

4.104.114.84.95
Last change on this file since a1ceec8 was d6a9988, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 3, 1997 at 7:18:15 PM

Changed mode and priority of initialization task.

  • Property mode set to 100644
File size: 7.1 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 20 of the RTEMS
7--  Single Processor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body SPTEST is
31
32--PAGE
33--
34--  INIT
35--
36
37   procedure INIT (
38      ARGUMENT : in     RTEMS.TASK_ARGUMENT
39   ) is
40      STATUS : RTEMS.STATUS_CODES;
41   begin
42
43      TEXT_IO.NEW_LINE( 2 );
44      TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
45
46      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
47      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
48      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
49      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
50      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
51
52      for INDEX in 1 .. 5
53      loop
54
55         SPTEST.COUNT( INDEX ) := 0;
56
57         RTEMS.TASK_CREATE( 
58            SPTEST.TASK_NAME( INDEX ), 
59            SPTEST.PRIORITIES( INDEX ), 
60            4096, 
61            RTEMS.DEFAULT_MODES,
62            RTEMS.DEFAULT_ATTRIBUTES,
63            SPTEST.TASK_ID( INDEX ),
64            STATUS
65         );
66         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
67
68      end loop;
69
70      for INDEX in 1 .. 5
71      loop
72
73         RTEMS.TASK_START(
74            SPTEST.TASK_ID( INDEX ),
75            SPTEST.TASK_1_THROUGH_5'ACCESS,
76            RTEMS.TASK_ARGUMENT( INDEX ),
77            STATUS
78         );
79         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
80 
81      end loop;
82
83      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
85
86   end INIT;
87
88--PAGE
89--
90--  TASK_1_THROUGH_5
91--
92
93   procedure TASK_1_THROUGH_5 (
94      ARGUMENT : in     RTEMS.TASK_ARGUMENT
95   ) is
96      RMID      : RTEMS.ID;
97      TEST_RMID : RTEMS.ID;
98      INDEX     : RTEMS.UNSIGNED32;
99      PASS      : RTEMS.UNSIGNED32;
100      FAILED    : RTEMS.UNSIGNED32;
101      STATUS    : RTEMS.STATUS_CODES;
102   begin
103
104      RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
105      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
106      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
107      TEXT_IO.PUT( "- rate_monotonic_create id = " );
108      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
109      TEXT_IO.NEW_LINE;
110 
111      RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
112      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
113      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
114      TEXT_IO.PUT( "- rate_monotonic_ident id = " );
115      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
116      TEXT_IO.NEW_LINE;
117      if TEST_RMID /= RMID then
118         TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
119         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
120      end if; 
121
122      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
123      TEXT_IO.PUT( " - (" );
124      UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
125      TEXT_IO.PUT( ") period " );
126      UNSIGNED32_IO.PUT( 
127         SPTEST.PERIODS( INTEGER( ARGUMENT ) ), 
128         WIDTH => 1, 
129         BASE => 10 
130      );
131      TEXT_IO.NEW_LINE;
132       
133      RTEMS.TASK_WAKE_AFTER( 2, STATUS );
134      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
135   
136      case ARGUMENT is
137         when 1 .. 4 =>
138            loop
139               RTEMS.RATE_MONOTONIC_PERIOD( 
140                  RMID, 
141                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ), 
142                  STATUS
143               );
144
145               TEST_SUPPORT.DIRECTIVE_FAILED( 
146                  STATUS, 
147                  "RATE_MONOTONIC_PERIOD" 
148               );
149
150               SPTEST.COUNT( INTEGER( ARGUMENT ) ) := 
151                  SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
152
153            end loop;
154
155         when 5 =>
156
157            PASS   := 0;
158            FAILED := 0;
159
160            RTEMS.RATE_MONOTONIC_PERIOD( 
161               RMID, 
162               SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
163               STATUS
164            );
165
166            TEST_SUPPORT.DIRECTIVE_FAILED( 
167               STATUS, 
168               "RATE_MONOTONIC_PERIOD 1 OF TA5" 
169            );
170
171            SPTEST.GET_ALL_COUNTERS;
172
173            loop
174
175               RTEMS.RATE_MONOTONIC_PERIOD( 
176                  RMID, 
177                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
178                  STATUS
179               );
180
181               TEST_SUPPORT.DIRECTIVE_FAILED( 
182                  STATUS, 
183                  "RATE_MONOTONIC_PERIOD 2 OF TA5" 
184               );
185
186               SPTEST.GET_ALL_COUNTERS;
187
188               for INDEX in 1 .. 4 
189               loop
190
191                  if SPTEST.TEMPORARY_COUNT( INDEX ) /= 
192                        SPTEST.ITERATIONS( INDEX ) then
193
194                     TEXT_IO.PUT( "FAIL -- " );
195                     TEST_SUPPORT.PUT_NAME( 
196                        SPTEST.TASK_NAME( INDEX ),
197                        FALSE
198                     );
199                     TEXT_IO.PUT( "ACTUAL=" );
200                     UNSIGNED32_IO.PUT( 
201                        SPTEST.TEMPORARY_COUNT( INDEX ), 
202                        WIDTH => 3, 
203                        BASE => 10 
204                     );
205                     TEXT_IO.PUT( " EXPECTED=" );
206                     UNSIGNED32_IO.PUT( 
207                        SPTEST.ITERATIONS( INDEX ), 
208                        WIDTH => 3, 
209                        BASE => 10 
210                     );
211                     TEXT_IO.NEW_LINE;
212
213                     FAILED := FAILED + 1;
214
215                  end if;
216
217               end loop;
218
219               if FAILED = 5 then
220                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
221               end if;
222
223               PASS := PASS + 1;
224               TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
225               UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
226               TEXT_IO.PUT_LINE( ")" );
227 
228               if PASS = 10 then
229                  TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
230                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
231               end if;
232
233            end loop;
234 
235         when others =>
236            NULL;
237           
238      end case;
239
240   end TASK_1_THROUGH_5;
241
242--PAGE
243--
244--  GET_ALL_COUNTERS
245--
246
247   procedure GET_ALL_COUNTERS
248   is
249      PREVIOUS_MODE : RTEMS.MODE;
250      STATUS        : RTEMS.STATUS_CODES;
251   begin
252
253      RTEMS.TASK_MODE(
254         RTEMS.NO_PREEMPT,
255         RTEMS.PREEMPT_MASK,
256         PREVIOUS_MODE,
257         STATUS
258      );
259      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
260
261      SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
262
263      for INDEX in 1 .. 5
264      loop
265
266         SPTEST.COUNT( INDEX ) := 0;
267
268      end loop;
269     
270      RTEMS.TASK_MODE(
271         RTEMS.PREEMPT,
272         RTEMS.PREEMPT_MASK,
273         PREVIOUS_MODE,
274         STATUS
275      );
276      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
277
278   end GET_ALL_COUNTERS;
279
280end SPTEST;
Note: See TracBrowser for help on using the repository browser.