source: rtems/c/src/ada-tests/mptests/mp13/mptest.adb @ f619250

4.115
Last change on this file since f619250 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on May 3, 2012 at 3:09:24 PM

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.6 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 13 of the RTEMS
7--  Multiprocessor 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 RTEMS;
23with RTEMS.MESSAGE_QUEUE;
24with RTEMS.SEMAPHORE;
25with RTEMS.TASKS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT( "*** TEST 13 -- NODE " );
44      UNSIGNED32_IO.PUT(
45         TEST_SUPPORT.NODE,
46         WIDTH => 1
47      );
48      TEXT_IO.PUT_LINE( " ***" );
49
50      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
51      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
52
53      MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'S', 'G', ' ' );
54
55      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
56
57      if TEST_SUPPORT.NODE = 1 then
58
59         TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
60         RTEMS.MESSAGE_QUEUE.CREATE(
61            MPTEST.QUEUE_NAME( 1 ),
62            3,
63            RTEMS.GLOBAL + RTEMS.LIMIT,
64            MPTEST.QUEUE_ID( 1 ),
65            STATUS
66         );
67         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
68
69         TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
70         RTEMS.SEMAPHORE.CREATE(
71            MPTEST.SEMAPHORE_NAME( 1 ),
72            1,
73            RTEMS.GLOBAL + RTEMS.PRIORITY,
74            MPTEST.SEMAPHORE_ID( 1 ),
75            STATUS
76         );
77         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
78
79         RTEMS.SEMAPHORE.OBTAIN(
80            MPTEST.SEMAPHORE_ID( 1 ),
81            RTEMS.DEFAULT_OPTIONS,
82            RTEMS.NO_TIMEOUT,
83            STATUS
84         );
85         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
86
87      end if;
88
89      TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
90         RTEMS.TASKS.CREATE(
91         MPTEST.TASK_NAME( 1 ),
92         1,
93         2048,
94         RTEMS.TIMESLICE,
95         RTEMS.DEFAULT_ATTRIBUTES,
96         MPTEST.TASK_ID( 1 ),
97         STATUS
98      );
99      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
100
101      TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
102      RTEMS.TASKS.START(
103         MPTEST.TASK_ID( 1 ),
104         MPTEST.TEST_TASK_1'ACCESS,
105         0,
106         STATUS
107      );
108      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
109
110      TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
111      RTEMS.TASKS.CREATE(
112         MPTEST.TASK_NAME( 2 ),
113         1,
114         2048,
115         RTEMS.TIMESLICE,
116         RTEMS.DEFAULT_ATTRIBUTES,
117         MPTEST.TASK_ID( 2 ),
118         STATUS
119      );
120      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
121
122      TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
123      RTEMS.TASKS.START(
124         MPTEST.TASK_ID( 2 ),
125         MPTEST.TEST_TASK_2'ACCESS,
126         0,
127         STATUS
128      );
129      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
130
131      if TEST_SUPPORT.NODE = 1 then
132
133         RTEMS.TASKS.WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
134         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
135
136         TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
137
138         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
139
140      end if;
141
142      TEXT_IO.PUT_LINE( "Deleting initialization task" );
143      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
144      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
145
146   end INIT;
147
148--
149--  TEST_TASK_1
150--
151
152   procedure TEST_TASK_1 (
153      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
154   ) is
155      COUNT               : RTEMS.UNSIGNED32;
156      RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
157      RECEIVE_BUFFER      : RTEMS.BUFFER_POINTER;
158      STATUS              : RTEMS.STATUS_CODES;
159   begin
160
161      RECEIVE_BUFFER :=
162         RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
163
164      TEXT_IO.PUT_LINE( "Getting QID of message queue" );
165
166      loop
167
168         RTEMS.MESSAGE_QUEUE.IDENT(
169            MPTEST.QUEUE_NAME( 1 ),
170            RTEMS.SEARCH_ALL_NODES,
171            MPTEST.QUEUE_ID( 1 ),
172            STATUS
173         );
174
175         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
176
177      end loop;
178
179      if TEST_SUPPORT.NODE = 1 then
180
181         TEXT_IO.PUT_LINE( "Receiving message ..." );
182         RTEMS.MESSAGE_QUEUE.RECEIVE(
183            MPTEST.QUEUE_ID( 1 ),
184            RECEIVE_BUFFER,
185            RTEMS.DEFAULT_OPTIONS,
186            RTEMS.NO_TIMEOUT,
187            STATUS
188         );
189         TEXT_IO.PUT_LINE( "How did I get back from here???" );
190         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
191
192      end if;
193
194      RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
195      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
196
197      TEXT_IO.PUT_LINE( "Receiving message ..." );
198      RTEMS.MESSAGE_QUEUE.RECEIVE(
199         MPTEST.QUEUE_ID( 1 ),
200         RECEIVE_BUFFER,
201         RTEMS.DEFAULT_OPTIONS,
202         2 * TEST_SUPPORT.TICKS_PER_SECOND,
203         STATUS
204      );
205      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
206         STATUS,
207         RTEMS.TIMEOUT,
208         "MESSAGE_QUEUE_RECEIVE"
209      );
210      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
211         STATUS,
212         RTEMS.TIMEOUT,
213         "MESSAGE_QUEUE_OBTAIN"
214      );
215
216      TEXT_IO.PUT_LINE(
217         "message_queue_receive correctly returned TIMEOUT"
218      );
219
220      TEXT_IO.PUT_LINE( "Deleting self" );
221      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
222      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
223
224   end TEST_TASK_1;
225
226--
227--  TEST_TASK_2
228--
229
230   procedure TEST_TASK_2 (
231      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
232   ) is
233      STATUS : RTEMS.STATUS_CODES;
234   begin
235
236      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
237
238      loop
239
240         RTEMS.SEMAPHORE.IDENT(
241            MPTEST.SEMAPHORE_NAME( 1 ),
242            RTEMS.SEARCH_ALL_NODES,
243            MPTEST.SEMAPHORE_ID( 1 ),
244            STATUS
245         );
246
247         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
248
249      end loop;
250
251      if TEST_SUPPORT.NODE = 1 then
252
253         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
254         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
255
256         TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
257         RTEMS.SEMAPHORE.RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
258         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
259
260         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
261         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
262
263         TEXT_IO.PUT_LINE( "Getting semaphore ..." );
264         RTEMS.SEMAPHORE.OBTAIN(
265            MPTEST.SEMAPHORE_ID( 1 ),
266            RTEMS.DEFAULT_OPTIONS,
267            RTEMS.NO_TIMEOUT,
268            STATUS
269         );
270         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
271
272         TEXT_IO.PUT_LINE( "Getting semaphore ..." );
273         RTEMS.SEMAPHORE.OBTAIN(
274            MPTEST.SEMAPHORE_ID( 1 ),
275            RTEMS.DEFAULT_OPTIONS,
276            RTEMS.NO_TIMEOUT,
277            STATUS
278         );
279         TEXT_IO.PUT_LINE( "How did I get back from here???" );
280         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
281
282      end if;
283
284      RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
285      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
286
287      TEXT_IO.PUT_LINE( "Getting semaphore ..." );
288      RTEMS.SEMAPHORE.OBTAIN(
289         MPTEST.SEMAPHORE_ID( 1 ),
290         RTEMS.DEFAULT_OPTIONS,
291         RTEMS.NO_TIMEOUT,
292         STATUS
293      );
294      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
295
296      TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
297      RTEMS.SEMAPHORE.RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
298      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
299
300      RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
301      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
302
303      TEXT_IO.PUT_LINE( "Getting semaphore ..." );
304      RTEMS.SEMAPHORE.OBTAIN(
305         MPTEST.SEMAPHORE_ID( 1 ),
306         RTEMS.DEFAULT_OPTIONS,
307         2 * TEST_SUPPORT.TICKS_PER_SECOND,
308         STATUS
309      );
310      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
311         STATUS,
312         RTEMS.TIMEOUT,
313         "SEMAPHORE_OBTAIN"
314      );
315      TEXT_IO.PUT_LINE( "semaphore_obtain correctly returned TIMEOUT" );
316
317      TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
318
319      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
320
321   end TEST_TASK_2;
322
323end MPTEST;
Note: See TracBrowser for help on using the repository browser.