source: rtems/testsuites/ada/tmtests/tm23/tmtest.adb @ f6c9334d

5
Last change on this file since f6c9334d was f6c9334d, checked in by Sebastian Huber <sebastian.huber@…>, on 12/01/17 at 07:51:17

ada: Add standard test begin/end message

  • Property mode set to 100644
File size: 10.0 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 23 of the RTEMS
7--  Timing 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.org/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with RTEMS_CALLING_OVERHEAD;
23with TEST_SUPPORT;
24with TEXT_IO;
25with TIMER_DRIVER;
26with RTEMS.CLOCK;
27with RTEMS.TIMER;
28
29package body TMTEST is
30
31--
32--  INIT
33--
34
35   procedure INIT (
36      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
37   ) is
38      pragma Unreferenced(ARGUMENT);
39      TASK_PRIORITY : RTEMS.TASKS.PRIORITY;
40      ID            : RTEMS.ID;
41      TASK_ENTRY    : RTEMS.TASKS.ENTRY_POINT;
42      STATUS        : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEST_SUPPORT.ADA_TEST_BEGIN;
47
48      TASK_PRIORITY := 5;
49
50      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
51      loop
52
53         RTEMS.TASKS.CREATE(
54            RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
55            TASK_PRIORITY,
56            1024,
57            RTEMS.DEFAULT_MODES,
58            RTEMS.DEFAULT_ATTRIBUTES,
59            ID,
60            STATUS
61         );
62         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
63
64         if INDEX = 1 then
65            TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
66         elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
67            TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
68         else
69            TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
70         end if;
71
72         RTEMS.TASKS.START( ID, TASK_ENTRY, 0, STATUS );
73         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
74
75         TASK_PRIORITY := TASK_PRIORITY + 1;
76
77      end loop;
78
79      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
80      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
81
82   end INIT;
83
84--
85--  NULL_DELAY
86--
87
88   procedure NULL_DELAY (
89      IGNORED_ID      : in     RTEMS.ID;
90      IGNORED_ADDRESS : in     RTEMS.ADDRESS
91   ) is
92   begin
93
94      NULL;
95
96   end NULL_DELAY;
97
98--
99--  HIGH_TASK
100--
101
102   procedure HIGH_TASK (
103      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
104   ) is
105      pragma Unreferenced(ARGUMENT);
106      OVERHEAD : RTEMS.UNSIGNED32;
107      STATUS   : RTEMS.STATUS_CODES;
108   begin
109
110      TIMER_DRIVER.INITIALIZE;
111         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
112         loop
113            TIMER_DRIVER.EMPTY_FUNCTION;
114         end loop;
115      OVERHEAD := TIMER_DRIVER.READ_TIMER;
116
117      TIMER_DRIVER.INITIALIZE;
118         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
119         loop
120            RTEMS.TIMER.CREATE(
121               INDEX,
122               TMTEST.TIMER_ID( INDEX ),
123               STATUS
124            );
125         end loop;
126      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
127
128      TIME_TEST_SUPPORT.PUT_TIME(
129         "TIMER_CREATE",
130         TMTEST.END_TIME,
131         TIME_TEST_SUPPORT.OPERATION_COUNT,
132         0,
133         RTEMS_CALLING_OVERHEAD.TIMER_CREATE
134      );
135
136      TIMER_DRIVER.INITIALIZE;
137         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
138         loop
139            RTEMS.TIMER.FIRE_AFTER(
140               TMTEST.TIMER_ID( INDEX ),
141               500,
142               TMTEST.NULL_DELAY'ACCESS,
143               RTEMS.NULL_ADDRESS,
144               STATUS
145            );
146         end loop;
147      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
148
149      TIME_TEST_SUPPORT.PUT_TIME(
150         "TIMER_FIRE_AFTER (inactive)",
151         TMTEST.END_TIME,
152         TIME_TEST_SUPPORT.OPERATION_COUNT,
153         OVERHEAD,
154         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
155      );
156
157      TIMER_DRIVER.INITIALIZE;
158         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
159         loop
160            RTEMS.TIMER.FIRE_AFTER(
161               TMTEST.TIMER_ID( INDEX ),
162               500,
163               TMTEST.NULL_DELAY'ACCESS,
164               RTEMS.NULL_ADDRESS,
165               STATUS
166            );
167         end loop;
168      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
169
170      TIME_TEST_SUPPORT.PUT_TIME(
171         "TIMER_FIRE_AFTER (active)",
172         TMTEST.END_TIME,
173         TIME_TEST_SUPPORT.OPERATION_COUNT,
174         0,
175         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
176      );
177
178      TIMER_DRIVER.INITIALIZE;
179         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
180         loop
181            RTEMS.TIMER.CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
182         end loop;
183      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
184
185      TIME_TEST_SUPPORT.PUT_TIME(
186         "TIMER_CANCEL (active)",
187         TMTEST.END_TIME,
188         TIME_TEST_SUPPORT.OPERATION_COUNT,
189         0,
190         RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
191      );
192
193      TIMER_DRIVER.INITIALIZE;
194         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
195         loop
196            RTEMS.TIMER.CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
197         end loop;
198      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
199
200      TIME_TEST_SUPPORT.PUT_TIME(
201         "TIMER_CANCEL (inactive)",
202         TMTEST.END_TIME,
203         TIME_TEST_SUPPORT.OPERATION_COUNT,
204         0,
205         RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
206      );
207
208      TIMER_DRIVER.INITIALIZE;
209         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
210         loop
211            RTEMS.TIMER.RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
212         end loop;
213      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
214
215      TIME_TEST_SUPPORT.PUT_TIME(
216         "TIMER_RESET (inactive)",
217         TMTEST.END_TIME,
218         TIME_TEST_SUPPORT.OPERATION_COUNT,
219         0,
220         RTEMS_CALLING_OVERHEAD.TIMER_RESET
221      );
222
223      TIMER_DRIVER.INITIALIZE;
224         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
225         loop
226            RTEMS.TIMER.RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
227         end loop;
228      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
229
230      TIME_TEST_SUPPORT.PUT_TIME(
231         "TIMER_RESET (active)",
232         TMTEST.END_TIME,
233         TIME_TEST_SUPPORT.OPERATION_COUNT,
234         0,
235         RTEMS_CALLING_OVERHEAD.TIMER_RESET
236      );
237
238      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
239      loop
240         RTEMS.TIMER.CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
241      end loop;
242
243      TMTEST.TIME_OF_DAY := ( 1988, 12, 31, 9, 0, 0, 0 );
244
245      RTEMS.CLOCK.SET( TMTEST.TIME_OF_DAY, STATUS );
246      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
247
248      TMTEST.TIME_OF_DAY.YEAR := 1989;
249
250      TIMER_DRIVER.INITIALIZE;
251         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
252         loop
253            RTEMS.TIMER.FIRE_WHEN(
254               TMTEST.TIMER_ID( INDEX ),
255               TMTEST.TIME_OF_DAY,
256               TMTEST.NULL_DELAY'ACCESS,
257               RTEMS.NULL_ADDRESS,
258               STATUS
259            );
260         end loop;
261      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
262
263      TIME_TEST_SUPPORT.PUT_TIME(
264         "TIMER_FIRE_WHEN (inactive)",
265         TMTEST.END_TIME,
266         TIME_TEST_SUPPORT.OPERATION_COUNT,
267         0,
268         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
269      );
270
271      TIMER_DRIVER.INITIALIZE;
272         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
273         loop
274            RTEMS.TIMER.FIRE_WHEN(
275               TMTEST.TIMER_ID( INDEX ),
276               TMTEST.TIME_OF_DAY,
277               TMTEST.NULL_DELAY'ACCESS,
278               RTEMS.NULL_ADDRESS,
279               STATUS
280            );
281         end loop;
282      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
283
284      TIME_TEST_SUPPORT.PUT_TIME(
285         "TIMER_FIRE_WHEN (active)",
286         TMTEST.END_TIME,
287         TIME_TEST_SUPPORT.OPERATION_COUNT,
288         0,
289         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
290      );
291
292      TIMER_DRIVER.INITIALIZE;
293         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
294         loop
295            RTEMS.TIMER.DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
296         end loop;
297      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
298
299      TIME_TEST_SUPPORT.PUT_TIME(
300         "TIMER_DELETE (active)",
301         TMTEST.END_TIME,
302         TIME_TEST_SUPPORT.OPERATION_COUNT,
303         0,
304         RTEMS_CALLING_OVERHEAD.TIMER_DELETE
305      );
306
307      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
308      loop
309         RTEMS.TIMER.CREATE( INDEX, TMTEST.TIMER_ID( INDEX ), STATUS );
310         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
311
312         RTEMS.TIMER.FIRE_AFTER(
313            TMTEST.TIMER_ID( INDEX ),
314            500,
315            TMTEST.NULL_DELAY'ACCESS,
316            RTEMS.NULL_ADDRESS,
317            STATUS
318         );
319         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
320
321         RTEMS.TIMER.CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
322         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
323
324      end loop;
325
326      TIMER_DRIVER.INITIALIZE;
327         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
328         loop
329            RTEMS.TIMER.DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
330         end loop;
331      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
332
333      TIME_TEST_SUPPORT.PUT_TIME(
334         "TIMER_DELETE (inactive)",
335         TMTEST.END_TIME,
336         TIME_TEST_SUPPORT.OPERATION_COUNT,
337         0,
338         RTEMS_CALLING_OVERHEAD.TIMER_DELETE
339      );
340
341      TIMER_DRIVER.INITIALIZE;
342         RTEMS.TASKS.WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
343         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
344
345   end HIGH_TASK;
346
347--
348--  MIDDLE_TASKS
349--
350
351   procedure MIDDLE_TASKS (
352      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
353   ) is
354      pragma Unreferenced(ARGUMENT);
355      STATUS : RTEMS.STATUS_CODES;
356   begin
357
358      RTEMS.TASKS.WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
359      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
360
361   end MIDDLE_TASKS;
362
363--
364--  LOW_TASK
365--
366
367   procedure LOW_TASK (
368      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
369   ) is
370      pragma Unreferenced(ARGUMENT);
371   begin
372
373      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
374
375      TIME_TEST_SUPPORT.PUT_TIME(
376         "TASK_WAKE_WHEN",
377         TMTEST.END_TIME,
378         TIME_TEST_SUPPORT.OPERATION_COUNT,
379         0,
380         RTEMS_CALLING_OVERHEAD.TASK_WAKE_WHEN
381      );
382
383      TEST_SUPPORT.ADA_TEST_END;
384      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
385
386   end LOW_TASK;
387
388end TMTEST;
Note: See TracBrowser for help on using the repository browser.