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

4.104.115
Last change on this file since 110e1f1 was 110e1f1, checked in by Joel Sherrill <joel.sherrill@…>, on 12/14/09 at 21:17:59

2009-12-14 Joel Sherrill <joel.sherrill@…>

  • samples/base_sp/sptest.adb, samples/hello/sptest.adb, samples/nsecs/sptest.adb, samples/ticker/sptest.adb, sptests/sp01/sptest.adb, sptests/sp02/sptest.adb, sptests/sp03/sptest.adb, sptests/sp04/sptest.adb, sptests/sp05/sptest.adb, sptests/sp06/sptest.adb, sptests/sp07/sptest.adb, sptests/sp08/sptest.adb, sptests/sp09/sptest.adb, sptests/sp11/sptest.adb, sptests/sp12/sptest.adb, sptests/sp13/sptest.adb, sptests/sp14/sptest.adb, sptests/sp15/sptest.adb, sptests/sp16/sptest.adb, sptests/sp17/sptest.adb, sptests/sp19/sptest.adp, sptests/sp20/sptest.adb, sptests/sp22/sptest.adb, sptests/sp23/sptest.adb, sptests/sp24/sptest.adb, sptests/sp25/sptest.adb, sptests/spname01/spname01.adb, sptests/spname01/sptest.adb, sptests/spname01/sptest.ads, support/address_io.adb, support/init.c, support/test_support.adb, support/test_support.ads, support/time_test_support.adb, support/timer_driver.adb, tmtests/tm01/tmtest.adb, tmtests/tm01/tmtest.ads, tmtests/tm02/tmtest.adb, tmtests/tm02/tmtest.ads, tmtests/tm03/tmtest.adb, tmtests/tm03/tmtest.ads, tmtests/tm04/tmtest.adb, tmtests/tm04/tmtest.ads, tmtests/tm05/tmtest.adb, tmtests/tm05/tmtest.ads, tmtests/tm06/tmtest.adb, tmtests/tm06/tmtest.ads, tmtests/tm07/tmtest.adb, tmtests/tm07/tmtest.ads, tmtests/tm08/tmtest.adb, tmtests/tm08/tmtest.ads, tmtests/tm09/tmtest.adb, tmtests/tm09/tmtest.ads, tmtests/tm10/tmtest.adb, tmtests/tm10/tmtest.ads, tmtests/tm11/tmtest.adb, tmtests/tm11/tmtest.ads, tmtests/tm12/tmtest.adb, tmtests/tm12/tmtest.ads, tmtests/tm13/tmtest.adb, tmtests/tm13/tmtest.ads, tmtests/tm14/tmtest.adb, tmtests/tm14/tmtest.ads, tmtests/tm15/tmtest.adb, tmtests/tm15/tmtest.ads, tmtests/tm16/tmtest.adb, tmtests/tm16/tmtest.ads, tmtests/tm17/tmtest.adb, tmtests/tm17/tmtest.ads, tmtests/tm18/tmtest.adb, tmtests/tm18/tmtest.ads, tmtests/tm19/tmtest.adb, tmtests/tm19/tmtest.ads, tmtests/tm20/tmtest.adb, tmtests/tm20/tmtest.ads, tmtests/tm21/tmtest.adb, tmtests/tm21/tmtest.ads, tmtests/tm22/tmtest.adb, tmtests/tm22/tmtest.ads, tmtests/tm23/tmtest.adb, tmtests/tm23/tmtest.ads, tmtests/tm24/tmtest.adb, tmtests/tm24/tmtest.ads, tmtests/tm25/tmtest.adb, tmtests/tm25/tmtest.ads, tmtests/tm28/tmtest.adb, tmtests/tm28/tmtest.ads, tmtests/tm29/tmtest.adb, tmtests/tm29/tmtest.ads, tmtests/tmck/tmtest.adb, tmtests/tmck/tmtest.ads, tmtests/tmoverhd/dummy_rtems.adb, tmtests/tmoverhd/tmtest.adb, tmtests/tmoverhd/tmtest.ads: Remove many warnings.
  • Property mode set to 100644
File size: 8.6 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-2009.
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--  $Id$
21--
22
23with INTERFACES; use INTERFACES;
24with TEST_SUPPORT;
25with TEXT_IO;
26with UNSIGNED32_IO;
27
28package body SPTEST is
29
30--PAGE
31--
32--  INIT
33--
34
35   procedure INIT (
36      ARGUMENT : in     RTEMS.TASK_ARGUMENT
37   ) is
38      pragma Unreferenced(ARGUMENT);
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
44
45      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
46      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
47      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
48      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
49      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
50      SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME(  'T', 'A', '6', ' ' );
51
52      for INDEX in 1 .. 6
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 .. 6
71      loop
72
73         RTEMS.TASK_START(
74            SPTEST.TASK_ID( INDEX ),
75            SPTEST.TASK_1_THROUGH_6'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_6
91--
92
93   procedure TASK_1_THROUGH_6 (
94      ARGUMENT : in     RTEMS.TASK_ARGUMENT
95   ) is
96      RMID      : RTEMS.ID;
97      TEST_RMID : RTEMS.ID;
98      PASS      : RTEMS.UNSIGNED32;
99      FAILED    : RTEMS.UNSIGNED32;
100      STATUS    : RTEMS.STATUS_CODES;
101      TIME      : array( 0 .. 10 ) of RTEMS.INTERVAL;
102      PERIOD    : RTEMS.INTERVAL;
103      MEASURE   : RTEMS.INTERVAL;
104   begin
105
106      RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
107      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
108      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
109      TEXT_IO.PUT( "- rate_monotonic_create id = " );
110      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
111      TEXT_IO.NEW_LINE;
112 
113      RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
114      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
115      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
116      TEXT_IO.PUT( "- rate_monotonic_ident id = " );
117      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
118      TEXT_IO.NEW_LINE;
119      if TEST_RMID /= RMID then
120         TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
121         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
122      end if;
123
124      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
125      TEXT_IO.PUT( " - (" );
126      UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
127      TEXT_IO.PUT( ") period " );
128      UNSIGNED32_IO.PUT(
129         SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
130         WIDTH => 1,
131         BASE => 10
132      );
133      TEXT_IO.NEW_LINE;
134       
135      RTEMS.TASK_WAKE_AFTER( 2, STATUS );
136      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
137   
138      case ARGUMENT is
139         when 1 .. 4 =>
140            loop
141               RTEMS.RATE_MONOTONIC_PERIOD(
142                  RMID,
143                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
144                  STATUS
145               );
146
147               TEST_SUPPORT.DIRECTIVE_FAILED(
148                  STATUS,
149                  "RATE_MONOTONIC_PERIOD"
150               );
151
152               SPTEST.COUNT( INTEGER( ARGUMENT ) ) :=
153                  SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
154
155            end loop;
156
157         when 5 =>
158
159            PASS   := 0;
160            FAILED := 0;
161
162            RTEMS.RATE_MONOTONIC_PERIOD(
163               RMID,
164               SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
165               STATUS
166            );
167
168            TEST_SUPPORT.DIRECTIVE_FAILED(
169               STATUS,
170               "RATE_MONOTONIC_PERIOD 1 OF TA5"
171            );
172
173            SPTEST.GET_ALL_COUNTERS;
174
175            loop
176
177               RTEMS.RATE_MONOTONIC_PERIOD(
178                  RMID,
179                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
180                  STATUS
181               );
182
183               TEST_SUPPORT.DIRECTIVE_FAILED(
184                  STATUS,
185                  "RATE_MONOTONIC_PERIOD 2 OF TA5"
186               );
187
188               SPTEST.GET_ALL_COUNTERS;
189
190               for INDEX in 1 .. 4 loop
191
192                  if SPTEST.TEMPORARY_COUNT( INDEX ) /=
193                        SPTEST.ITERATIONS( INDEX ) then
194
195                     TEXT_IO.PUT( "FAIL -- " );
196                     TEST_SUPPORT.PUT_NAME(
197                        SPTEST.TASK_NAME( INDEX ),
198                        FALSE
199                     );
200                     TEXT_IO.PUT( "ACTUAL=" );
201                     UNSIGNED32_IO.PUT(
202                        SPTEST.TEMPORARY_COUNT( INDEX ),
203                        WIDTH => 3,
204                        BASE => 10
205                     );
206                     TEXT_IO.PUT( " EXPECTED=" );
207                     UNSIGNED32_IO.PUT(
208                        SPTEST.ITERATIONS( INDEX ),
209                        WIDTH => 3,
210                        BASE => 10
211                     );
212                     TEXT_IO.NEW_LINE;
213
214                     FAILED := FAILED + 1;
215
216                  end if;
217
218               end loop;
219
220               if FAILED = 5 then
221                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
222               end if;
223
224               PASS := PASS + 1;
225               TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
226               UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
227               TEXT_IO.PUT_LINE( ")" );
228 
229               if PASS = 10 then
230                  TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
231                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
232               end if;
233
234            end loop;
235 
236         when 6 =>
237            -- test changing periods
238            for INDEX in 0 .. 10 loop
239               PERIOD := RTEMS.INTERVAL( ( INDEX + 1 ) * 10 );
240               RTEMS.RATE_MONOTONIC_PERIOD( RMID, PERIOD, STATUS);
241               TEST_SUPPORT.DIRECTIVE_FAILED(
242                  STATUS, "rate_monotonic_period of TA6"
243               );
244
245               -- timestamp
246               RTEMS.CLOCK_GET(
247                  RTEMS.CLOCK_GET_TICKS_SINCE_BOOT,
248                  Time( INDEX )'ADDRESS,
249                  STATUS
250               );
251               TEST_SUPPORT.DIRECTIVE_FAILED(
252                  STATUS, "clock_get of TA6"
253               );
254            end loop;
255
256            for INDEX in 1 .. 10 loop
257               MEASURE := TIME( INDEX ) - TIME( INDEX - 1 );
258               PERIOD := RTEMS.INTERVAL( INDEX * 10 );
259               TEXT_IO.PUT( "TA6 - Actual: " );
260               UNSIGNED32_IO.PUT( MEASURE, WIDTH => 3, BASE => 10 );
261               TEXT_IO.PUT( "  Expected: " );
262               UNSIGNED32_IO.PUT( PERIOD, WIDTH => 3, BASE => 10 );
263               if PERIOD = MEASURE then
264                  TEXT_IO.PUT_LINE( " - OK" );
265               else
266                  TEXT_IO.PUT_LINE( " - FAILED" );
267               end if;
268            end loop;
269
270            RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
271            TEST_SUPPORT.DIRECTIVE_FAILED(
272               STATUS, "task_suspend of TA6"
273            );
274
275         when others =>
276            NULL;
277           
278      end case;
279
280   end TASK_1_THROUGH_6;
281
282--PAGE
283--
284--  GET_ALL_COUNTERS
285--
286
287   procedure GET_ALL_COUNTERS
288   is
289      PREVIOUS_MODE : RTEMS.MODE;
290      STATUS        : RTEMS.STATUS_CODES;
291   begin
292
293      RTEMS.TASK_MODE(
294         RTEMS.NO_PREEMPT,
295         RTEMS.PREEMPT_MASK,
296         PREVIOUS_MODE,
297         STATUS
298      );
299      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
300
301      SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
302
303      for INDEX in 1 .. 5
304      loop
305
306         SPTEST.COUNT( INDEX ) := 0;
307
308      end loop;
309     
310      RTEMS.TASK_MODE(
311         RTEMS.PREEMPT,
312         RTEMS.PREEMPT_MASK,
313         PREVIOUS_MODE,
314         STATUS
315      );
316      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
317
318   end GET_ALL_COUNTERS;
319
320end SPTEST;
Note: See TracBrowser for help on using the repository browser.