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

4.115
Last change on this file since f619250 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/12 at 15:09:24

Remove All CVS Id Strings Possible Using a Script

Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines

next to each other after Id string line removed.

+ remove entire comment blocks which only exited to

contain CVS Ids

+ If the processing left a blank line at the top of

a file, it was removed.

  • Property mode set to 100644
File size: 8.7 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-2011.
14--  On-Line Applications Research Corporation (OAR).
15--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.com/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with TEST_SUPPORT;
23with TEXT_IO;
24with UNSIGNED32_IO;
25with RTEMS.CLOCK;
26with RTEMS.RATE_MONOTONIC;
27
28package body SPTEST is
29
30--
31--  INIT
32--
33
34   procedure INIT (
35      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
36   ) is
37      pragma Unreferenced(ARGUMENT);
38      STATUS : RTEMS.STATUS_CODES;
39   begin
40
41      TEXT_IO.NEW_LINE( 2 );
42      TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
43
44      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
45      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
46      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
47      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
48      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
49      SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME(  'T', 'A', '6', ' ' );
50
51      for INDEX in 1 .. 6
52      loop
53
54         SPTEST.COUNT( INDEX ) := 0;
55
56         RTEMS.TASKS.CREATE(
57            SPTEST.TASK_NAME( INDEX ),
58            SPTEST.PRIORITIES( INDEX ),
59            4096,
60            RTEMS.DEFAULT_MODES,
61            RTEMS.DEFAULT_ATTRIBUTES,
62            SPTEST.TASK_ID( INDEX ),
63            STATUS
64         );
65         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
66
67      end loop;
68
69      for INDEX in 1 .. 6
70      loop
71
72         RTEMS.TASKS.START(
73            SPTEST.TASK_ID( INDEX ),
74            SPTEST.TASK_1_THROUGH_6'ACCESS,
75            RTEMS.TASKS.ARGUMENT( INDEX ),
76            STATUS
77         );
78         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
79 
80      end loop;
81
82      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
83      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
84
85   end INIT;
86
87--
88--  TASK_1_THROUGH_6
89--
90
91   procedure TASK_1_THROUGH_6 (
92      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
93   ) is
94      RMID      : RTEMS.ID;
95      TEST_RMID : RTEMS.ID;
96      PASS      : RTEMS.UNSIGNED32;
97      FAILED    : RTEMS.UNSIGNED32;
98      STATUS    : RTEMS.STATUS_CODES;
99      TIME      : array( 0 .. 10 ) of RTEMS.INTERVAL;
100      PERIOD    : RTEMS.INTERVAL;
101      MEASURE   : RTEMS.INTERVAL;
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.TASKS.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 loop
189
190                  if SPTEST.TEMPORARY_COUNT( INDEX ) /=
191                        SPTEST.ITERATIONS( INDEX ) then
192
193                     TEXT_IO.PUT( "FAIL -- " );
194                     TEST_SUPPORT.PUT_NAME(
195                        SPTEST.TASK_NAME( INDEX ),
196                        FALSE
197                     );
198                     TEXT_IO.PUT( "ACTUAL=" );
199                     UNSIGNED32_IO.PUT(
200                        SPTEST.TEMPORARY_COUNT( INDEX ),
201                        WIDTH => 3,
202                        BASE => 10
203                     );
204                     TEXT_IO.PUT( " EXPECTED=" );
205                     UNSIGNED32_IO.PUT(
206                        SPTEST.ITERATIONS( INDEX ),
207                        WIDTH => 3,
208                        BASE => 10
209                     );
210                     TEXT_IO.NEW_LINE;
211
212                     FAILED := FAILED + 1;
213
214                  end if;
215
216               end loop;
217
218               if FAILED = 5 then
219                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
220               end if;
221
222               PASS := PASS + 1;
223               TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
224               UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
225               TEXT_IO.PUT_LINE( ")" );
226 
227               if PASS = 10 then
228                  TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
229                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
230               end if;
231
232            end loop;
233 
234         when 6 =>
235            -- test changing periods
236            for INDEX in 0 .. 10 loop
237               PERIOD := RTEMS.INTERVAL( ( INDEX + 1 ) * 10 );
238               RTEMS.RATE_MONOTONIC.PERIOD( RMID, PERIOD, STATUS);
239               TEST_SUPPORT.DIRECTIVE_FAILED(
240                  STATUS, "rate_monotonic_period of TA6"
241               );
242
243               -- timestamp
244               RTEMS.CLOCK.GET(
245                  RTEMS.CLOCK.GET_TICKS_SINCE_BOOT,
246                  Time( INDEX )'ADDRESS,
247                  STATUS
248               );
249               TEST_SUPPORT.DIRECTIVE_FAILED(
250                  STATUS, "clock_get of TA6"
251               );
252            end loop;
253
254            for INDEX in 1 .. 10 loop
255               MEASURE := TIME( INDEX ) - TIME( INDEX - 1 );
256               PERIOD := RTEMS.INTERVAL( INDEX * 10 );
257               TEXT_IO.PUT( "TA6 - Actual: " );
258               UNSIGNED32_IO.PUT( MEASURE, WIDTH => 3, BASE => 10 );
259               TEXT_IO.PUT( "  Expected: " );
260               UNSIGNED32_IO.PUT( PERIOD, WIDTH => 3, BASE => 10 );
261               if PERIOD = MEASURE then
262                  TEXT_IO.PUT_LINE( " - OK" );
263               else
264                  TEXT_IO.PUT_LINE( " - FAILED" );
265               end if;
266            end loop;
267
268            RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
269            TEST_SUPPORT.DIRECTIVE_FAILED(
270               STATUS, "task_suspend of TA6"
271            );
272
273         when others =>
274            NULL;
275           
276      end case;
277
278   end TASK_1_THROUGH_6;
279
280--
281--  GET_ALL_COUNTERS
282--
283
284   procedure GET_ALL_COUNTERS
285   is
286      PREVIOUS_MODE : RTEMS.MODE;
287      STATUS        : RTEMS.STATUS_CODES;
288   begin
289
290      RTEMS.TASKS.MODE(
291         RTEMS.NO_PREEMPT,
292         RTEMS.PREEMPT_MASK,
293         PREVIOUS_MODE,
294         STATUS
295      );
296      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
297
298      SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
299
300      for INDEX in 1 .. 5
301      loop
302
303         SPTEST.COUNT( INDEX ) := 0;
304
305      end loop;
306     
307      RTEMS.TASKS.MODE(
308         RTEMS.PREEMPT,
309         RTEMS.PREEMPT_MASK,
310         PREVIOUS_MODE,
311         STATUS
312      );
313      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
314
315   end GET_ALL_COUNTERS;
316
317end SPTEST;
Note: See TracBrowser for help on using the repository browser.