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

4.104.114.84.95
Last change on this file since 6d4e604b was 6d4e604b, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:19:03

Initial revision

  • Property mode set to 100644
File size: 7.3 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, 1990, 1991, 1992, 1993, 1994.
14--  On-Line Applications Research Corporation (OAR).
15--  All rights assigned to U.S. Government, 1994.
16--
17--  This material may be reproduced by or for the U.S. Government pursuant
18--  to the copyright license under the clause at DFARS 252.227-7013.  This
19--  notice must appear in all copies of this file and its derivatives.
20--
21--  sptest.adb,v 1.3 1995/07/12 19:42:24 joel Exp
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      INDEX  : RTEMS.UNSIGNED32;
41      STATUS : RTEMS.STATUS_CODES;
42   begin
43
44      TEXT_IO.NEW_LINE( 2 );
45      TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
46
47      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
48      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
49      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
50      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
51      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
52
53      for INDEX in 1 .. 5
54      loop
55
56         SPTEST.COUNT( INDEX ) := 0;
57
58         RTEMS.TASK_CREATE(
59            SPTEST.TASK_NAME( INDEX ),
60            SPTEST.PRIORITIES( INDEX ),
61            4096,
62            RTEMS.DEFAULT_MODES,
63            RTEMS.DEFAULT_ATTRIBUTES,
64            SPTEST.TASK_ID( INDEX ),
65            STATUS
66         );
67         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
68
69      end loop;
70
71      for INDEX in 1 .. 5
72      loop
73
74         RTEMS.TASK_START(
75            SPTEST.TASK_ID( INDEX ),
76            SPTEST.TASK_1_THROUGH_5'ACCESS,
77            RTEMS.TASK_ARGUMENT( INDEX ),
78            STATUS
79         );
80         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
81 
82      end loop;
83
84      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
85      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
86
87   end INIT;
88
89--PAGE
90--
91--  TASK_1_THROUGH_5
92--
93
94   procedure TASK_1_THROUGH_5 (
95      ARGUMENT : in     RTEMS.TASK_ARGUMENT
96   ) is
97      RMID      : RTEMS.ID;
98      TEST_RMID : RTEMS.ID;
99      INDEX     : RTEMS.UNSIGNED32;
100      PASS      : RTEMS.UNSIGNED32;
101      FAILED    : RTEMS.UNSIGNED32;
102      STATUS    : RTEMS.STATUS_CODES;
103   begin
104
105      RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
106      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
107      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
108      TEXT_IO.PUT( "- rate_monotonic_create id = " );
109      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
110      TEXT_IO.NEW_LINE;
111 
112      RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
113      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
114      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
115      TEXT_IO.PUT( "- rate_monotonic_ident id = " );
116      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
117      TEXT_IO.NEW_LINE;
118      if TEST_RMID /= RMID then
119         TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
120         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
121      end if;
122
123      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
124      TEXT_IO.PUT( " - (" );
125      UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
126      TEXT_IO.PUT( ") period " );
127      UNSIGNED32_IO.PUT(
128         SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
129         WIDTH => 1,
130         BASE => 10
131      );
132      TEXT_IO.NEW_LINE;
133       
134      RTEMS.TASK_WAKE_AFTER( 2, STATUS );
135      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
136   
137      case ARGUMENT is
138         when 1 .. 4 =>
139            loop
140               RTEMS.RATE_MONOTONIC_PERIOD(
141                  RMID,
142                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
143                  STATUS
144               );
145
146               TEST_SUPPORT.DIRECTIVE_FAILED(
147                  STATUS,
148                  "RATE_MONOTONIC_PERIOD"
149               );
150
151               SPTEST.COUNT( INTEGER( ARGUMENT ) ) :=
152                  SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
153
154            end loop;
155
156         when 5 =>
157
158            PASS   := 0;
159            FAILED := 0;
160
161            RTEMS.RATE_MONOTONIC_PERIOD(
162               RMID,
163               SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
164               STATUS
165            );
166
167            TEST_SUPPORT.DIRECTIVE_FAILED(
168               STATUS,
169               "RATE_MONOTONIC_PERIOD 1 OF TA5"
170            );
171
172            SPTEST.GET_ALL_COUNTERS;
173
174            loop
175
176               RTEMS.RATE_MONOTONIC_PERIOD(
177                  RMID,
178                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
179                  STATUS
180               );
181
182               TEST_SUPPORT.DIRECTIVE_FAILED(
183                  STATUS,
184                  "RATE_MONOTONIC_PERIOD 2 OF TA5"
185               );
186
187               SPTEST.GET_ALL_COUNTERS;
188
189               for INDEX in 1 .. 4
190               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 others =>
237            NULL;
238           
239      end case;
240
241   end TASK_1_THROUGH_5;
242
243--PAGE
244--
245--  GET_ALL_COUNTERS
246--
247
248   procedure GET_ALL_COUNTERS
249   is
250      PREVIOUS_MODE : RTEMS.MODE;
251      STATUS        : RTEMS.STATUS_CODES;
252      INDEX         : RTEMS.UNSIGNED32;
253   begin
254
255      RTEMS.TASK_MODE(
256         RTEMS.NO_PREEMPT,
257         RTEMS.PREEMPT_MASK,
258         PREVIOUS_MODE,
259         STATUS
260      );
261      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
262
263      SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
264
265      for INDEX in 1 .. 5
266      loop
267
268         SPTEST.COUNT( INDEX ) := 0;
269
270      end loop;
271     
272      RTEMS.TASK_MODE(
273         RTEMS.PREEMPT,
274         RTEMS.PREEMPT_MASK,
275         PREVIOUS_MODE,
276         STATUS
277      );
278      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
279
280   end GET_ALL_COUNTERS;
281
282end SPTEST;
Note: See TracBrowser for help on using the repository browser.