source: rtems/c/src/ada-tests/sptests/sp13/sptest.adb @ 3d2bf71

4.104.114.95
Last change on this file since 3d2bf71 was 3d2bf71, checked in by Glenn Humphrey <glenn.humphrey@…>, on 10/18/07 at 19:36:29

2007-10-18 Glenn Humphrey <glenn.humphrey@…>

  • sptests/sp09/sp09.scn, sptests/sp09/sptest.adb, sptests/sp13/sp13.scn, sptests/sp13/sptest.adb, sptests/sp16/sp16.scn, sptests/sp16/sptest.adb, sptests/sp16/sptest.ads, sptests/sp20/sp20.scn, sptests/sp20/sptest.adb, sptests/sp20/sptest.ads: Updated tests to match the current C tests and regenerated the .scn files.
  • Property mode set to 100644
File size: 26.7 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 13 of the RTEMS
7--  Single Processor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-2007.
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 RTEMS;
25with TEST_SUPPORT;
26with TEXT_IO;
27with UNSIGNED32_IO;
28use type RTEMS.STATUS_CODES;
29
30package body SPTEST is
31
32   type BIG_BUFFER_TYPE is array (1 .. 2048) of RTEMS.UNSIGNED8;
33
34
35--PAGE
36--
37--  INIT
38--
39
40   procedure INIT (
41      ARGUMENT : in     RTEMS.TASK_ARGUMENT
42   ) is
43      STATUS : RTEMS.STATUS_CODES;
44   begin
45
46      TEXT_IO.NEW_LINE( 2 );
47      TEXT_IO.PUT_LINE( "*** TEST 13 ***" );
48
49      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
50      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
51      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
52
53      RTEMS.TASK_CREATE(
54         SPTEST.TASK_NAME( 1 ),
55         4,
56         2048,
57         RTEMS.DEFAULT_MODES,
58         RTEMS.DEFAULT_ATTRIBUTES,
59         SPTEST.TASK_ID( 1 ),
60         STATUS
61      );
62      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
63
64      RTEMS.TASK_CREATE(
65         SPTEST.TASK_NAME( 2 ),
66         4,
67         2048,
68         RTEMS.DEFAULT_MODES,
69         RTEMS.DEFAULT_ATTRIBUTES,
70         SPTEST.TASK_ID( 2 ),
71         STATUS
72      );
73      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
74
75      RTEMS.TASK_CREATE(
76         SPTEST.TASK_NAME( 3 ),
77         4,
78         2048,
79         RTEMS.DEFAULT_MODES,
80         RTEMS.DEFAULT_ATTRIBUTES,
81         SPTEST.TASK_ID( 3 ),
82         STATUS
83      );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
85
86      RTEMS.TASK_START(
87         SPTEST.TASK_ID( 1 ),
88         SPTEST.TASK_1'ACCESS,
89         0,
90         STATUS
91      );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
93
94      RTEMS.TASK_START(
95         SPTEST.TASK_ID( 2 ),
96         SPTEST.TASK_2'ACCESS,
97         0,
98         STATUS
99      );
100      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
101
102      RTEMS.TASK_START(
103         SPTEST.TASK_ID( 3 ),
104         SPTEST.TASK_3'ACCESS,
105         0,
106         STATUS
107      );
108      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
109
110      SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'Q', '1', ' ', ' ' );
111      SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME(  'Q', '2', ' ', ' ' );
112      SPTEST.QUEUE_NAME( 3 ) := RTEMS.BUILD_NAME(  'Q', '3', ' ', ' ' );
113
114      RTEMS.MESSAGE_QUEUE_CREATE(
115         SPTEST.QUEUE_NAME( 1 ),
116         100,
117         16,
118         RTEMS.DEFAULT_ATTRIBUTES,
119         SPTEST.QUEUE_ID( 1 ),
120         STATUS
121      );
122      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q1" );
123
124      RTEMS.MESSAGE_QUEUE_CREATE(
125         SPTEST.QUEUE_NAME( 2 ),
126         10,
127         16,
128         RTEMS.PRIORITY,
129         SPTEST.QUEUE_ID( 2 ),
130         STATUS
131      );
132      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q2" );
133
134      RTEMS.MESSAGE_QUEUE_CREATE(
135         SPTEST.QUEUE_NAME( 3 ),
136         100,
137         16,
138         RTEMS.DEFAULT_ATTRIBUTES,
139         SPTEST.QUEUE_ID( 3 ),
140         STATUS
141      );
142      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q3" );
143
144      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
145      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
146
147   end INIT;
148
149--PAGE
150--
151--  FILL_BUFFER
152--
153
154--
155-- Depends on tricks to make the copy work.
156--
157
158   procedure FILL_BUFFER (
159      SOURCE : in     STRING;
160      BUFFER :    out SPTEST.BUFFER
161   ) is
162   begin
163
164      BUFFER.FIELD1 := RTEMS.BUILD_NAME(
165         SOURCE( SOURCE'FIRST ),
166         SOURCE( SOURCE'FIRST + 1 ),
167         SOURCE( SOURCE'FIRST + 2 ),
168         SOURCE( SOURCE'FIRST + 3 )
169      );
170
171      BUFFER.FIELD2 := RTEMS.BUILD_NAME(
172         SOURCE( SOURCE'FIRST + 4 ),
173         SOURCE( SOURCE'FIRST + 5 ),
174         SOURCE( SOURCE'FIRST + 6 ),
175         SOURCE( SOURCE'FIRST + 7 )
176      );
177
178      BUFFER.FIELD3 := RTEMS.BUILD_NAME(
179         SOURCE( SOURCE'FIRST + 8 ),
180         SOURCE( SOURCE'FIRST + 9 ),
181         SOURCE( SOURCE'FIRST + 10 ),
182         SOURCE( SOURCE'FIRST + 11 )
183      );
184
185      BUFFER.FIELD4 := RTEMS.BUILD_NAME(
186         SOURCE( SOURCE'FIRST + 12 ),
187         SOURCE( SOURCE'FIRST + 13 ),
188         SOURCE( SOURCE'FIRST + 14 ),
189         SOURCE( SOURCE'FIRST + 15 )
190      );
191
192   end FILL_BUFFER;
193
194--PAGE
195--
196--  PUT_BUFFER
197--
198
199--
200-- Depends on tricks to make the output work.
201--
202
203   procedure PUT_BUFFER (
204      BUFFER : in     SPTEST.BUFFER
205   ) is
206   begin
207
208      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
209      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
210      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
211      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
212     
213   end PUT_BUFFER;
214
215--PAGE
216--
217--  TASK_1
218--
219
220   procedure TASK_1 (
221      ARGUMENT : in     RTEMS.TASK_ARGUMENT
222   ) is
223      QID                        : RTEMS.ID;
224      BIG_SEND_BUFFER            : BIG_BUFFER_TYPE;
225      BIG_SEND_BUFFER_POINTER    : RTEMS.ADDRESS := BIG_SEND_BUFFER'ADDRESS;
226      BIG_RECEIVE_BUFFER         : BIG_BUFFER_TYPE;
227      BIG_RECEIVE_BUFFER_POINTER : RTEMS.ADDRESS := BIG_RECEIVE_BUFFER'ADDRESS;
228      BUFFER                     : SPTEST.BUFFER;
229      BUFFER_POINTER             : RTEMS.ADDRESS := BUFFER'ADDRESS;
230      COUNT                      : RTEMS.UNSIGNED32;
231      MESSAGE_SIZE               : RTEMS.UNSIGNED32;
232      STATUS                     : RTEMS.STATUS_CODES;
233      SIZE                       : RTEMS.UNSIGNED32;
234   begin
235
236      RTEMS.MESSAGE_QUEUE_IDENT(
237         SPTEST.QUEUE_NAME( 1 ),
238         RTEMS.SEARCH_ALL_NODES,
239         QID,
240         STATUS
241      );
242      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_IDENT" );
243      TEXT_IO.PUT( "TA1 - message_queue_ident - qid => " );
244      UNSIGNED32_IO.PUT( QID, WIDTH => 8, BASE => 16 );
245      TEXT_IO.NEW_LINE;
246
247      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 1 ", BUFFER );
248      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 1" );
249      RTEMS.MESSAGE_QUEUE_SEND(
250         SPTEST.QUEUE_ID( 1 ),
251         BUFFER_POINTER,
252         16,
253         STATUS
254      );
255      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
256   
257      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 1 ", BUFFER );
258      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 1" );
259      RTEMS.MESSAGE_QUEUE_SEND(
260         SPTEST.QUEUE_ID( 1 ),
261         BUFFER_POINTER,
262         16,
263         STATUS
264      );
265      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
266
267      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
268      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
269      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
270         
271      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
272      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 1" );
273      RTEMS.MESSAGE_QUEUE_SEND(
274         SPTEST.QUEUE_ID( 1 ),
275         BUFFER_POINTER,
276         16,
277         STATUS
278      );
279      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
280
281      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
282      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
283      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
284         
285TEST_SUPPORT.PAUSE;
286
287      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 2 ", BUFFER );
288      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 2" );
289      RTEMS.MESSAGE_QUEUE_SEND(
290         SPTEST.QUEUE_ID( 2 ),
291         BUFFER_POINTER,
292         16,
293         STATUS
294      );
295      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
296
297      TEXT_IO.PUT(
298         "TA1 - message_queue_receive - receive from queue 1 - "
299      );
300      TEXT_IO.PUT_LINE( "10 second timeout" );
301      RTEMS.MESSAGE_QUEUE_RECEIVE(
302         SPTEST.QUEUE_ID( 1 ),
303         BUFFER_POINTER,
304         RTEMS.DEFAULT_OPTIONS,
305         10 * TEST_SUPPORT.TICKS_PER_SECOND,
306         MESSAGE_SIZE,
307         STATUS
308      );
309      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
310      TEXT_IO.PUT( "TA1 - buffer received: " );
311      SPTEST.PUT_BUFFER( BUFFER );
312      TEXT_IO.NEW_LINE;
313
314      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
315      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
316      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
317
318      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
319      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
320      RTEMS.MESSAGE_QUEUE_SEND(
321         SPTEST.QUEUE_ID( 3 ),
322         BUFFER_POINTER,
323         16,
324         STATUS
325      );
326      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
327
328      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
329      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
330      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
331         
332TEST_SUPPORT.PAUSE;
333
334      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
335      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
336      RTEMS.MESSAGE_QUEUE_SEND(
337         SPTEST.QUEUE_ID( 3 ),
338         BUFFER_POINTER,
339         16,
340         STATUS
341      );
342      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
343
344      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
345      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
346      RTEMS.MESSAGE_QUEUE_SEND(
347         SPTEST.QUEUE_ID( 3 ),
348         BUFFER_POINTER,
349         16,
350         STATUS
351      );
352      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
353
354      SPTEST.FILL_BUFFER( "BUFFER 4 TO Q 3 ", BUFFER );
355      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 4 TO Q 3" );
356      RTEMS.MESSAGE_QUEUE_SEND(
357         SPTEST.QUEUE_ID( 3 ),
358         BUFFER_POINTER,
359         16,
360         STATUS
361      );
362      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
363
364      SPTEST.FILL_BUFFER( "BUFFER 5 TO Q 3 ", BUFFER );
365      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 5 TO Q 3" );
366      RTEMS.MESSAGE_QUEUE_URGENT(
367         SPTEST.QUEUE_ID( 3 ),
368         BUFFER_POINTER,
369         16,
370         STATUS
371      );
372      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
373
374      for TIMES in 1 .. 4
375      loop
376         TEXT_IO.PUT(
377            "TA1 - message_queue_receive - receive from queue 3 - "
378         );
379         TEXT_IO.PUT_LINE( "WAIT FOREVER" );
380         RTEMS.MESSAGE_QUEUE_RECEIVE(
381            SPTEST.QUEUE_ID( 3 ),
382            BUFFER_POINTER,
383            RTEMS.DEFAULT_OPTIONS,
384            RTEMS.NO_TIMEOUT,
385            MESSAGE_SIZE,
386            STATUS
387         );
388         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
389         TEXT_IO.PUT( "TA1 - buffer received: " );
390         SPTEST.PUT_BUFFER( BUFFER );
391         TEXT_IO.NEW_LINE;
392      end loop;
393
394      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
395      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
396      RTEMS.MESSAGE_QUEUE_URGENT(
397         SPTEST.QUEUE_ID( 2 ),
398         BUFFER_POINTER,
399         16,
400         STATUS
401      );
402      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
403
404      TEXT_IO.PUT(
405        "TA1 - message_queue_receive - receive from queue 2 - "
406      );
407      TEXT_IO.PUT_LINE( "WAIT FOREVER" );
408      RTEMS.MESSAGE_QUEUE_RECEIVE(
409         SPTEST.QUEUE_ID( 2 ),
410         BUFFER_POINTER,
411         RTEMS.DEFAULT_OPTIONS,
412         RTEMS.NO_TIMEOUT,
413         MESSAGE_SIZE,
414         STATUS
415      );
416      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
417      TEXT_IO.PUT( "TA1 - buffer received: " );
418      SPTEST.PUT_BUFFER( BUFFER );
419      TEXT_IO.NEW_LINE;
420
421TEST_SUPPORT.PAUSE;
422
423      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
424      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
425      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
426   
427      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
428      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
429      RTEMS.MESSAGE_QUEUE_URGENT(
430         SPTEST.QUEUE_ID( 2 ),
431         BUFFER_POINTER,
432         16,
433         STATUS
434      );
435      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
436
437      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 2" );
438      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
439      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
440   
441      TEXT_IO.PUT_LINE( "TA1 - message_queue_get_number_pending - check Q 3" );
442      RTEMS.MESSAGE_QUEUE_GET_NUMBER_PENDING(
443         SPTEST.QUEUE_ID( 3 ), COUNT, STATUS
444      );
445      TEST_SUPPORT.DIRECTIVE_FAILED(
446         STATUS, "MESSAGE_QUEUE_GET_NUMBER_PENDING"
447      );
448      TEXT_IO.PUT( "TA1 - " );
449      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
450      TEXT_IO.PUT_LINE( " messages are pending on Q 3" );
451   
452      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
453      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
454      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
455      TEXT_IO.PUT( "TA1 - " );
456      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
457      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
458     
459      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
460      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
461      RTEMS.MESSAGE_QUEUE_SEND(
462         SPTEST.QUEUE_ID( 3 ),
463         BUFFER_POINTER,
464         16,
465         STATUS
466      );
467      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
468
469      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
470      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
471      RTEMS.MESSAGE_QUEUE_SEND(
472         SPTEST.QUEUE_ID( 3 ),
473         BUFFER_POINTER,
474         16,
475         STATUS
476      );
477      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
478
479      -- this broadcast should have no effect on the queue
480      SPTEST.FIlL_BUFFER( "NO BUFFER TO Q1 ", BUFFER );
481      TEXT_IO.PUT_LINE( "TA1 - message_queue_broadcast - NO BUFFER TO Q1" );
482      RTEMS.MESSAGE_QUEUE_BROADCAST(
483         SPTEST.QUEUE_ID( 1 ),
484         BUFFER_POINTER,
485         16,
486         COUNT,
487         STATUS
488      );
489      TEXT_IO.PUT( "TA1 - number of tasks awakened = " );
490      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
491      TEXT_IO.NEW_LINE;
492   
493      TEXT_IO.PUT_LINE( "TA1 - message_queue_get_number_pending - check Q 3" );
494      RTEMS.MESSAGE_QUEUE_GET_NUMBER_PENDING(
495         SPTEST.QUEUE_ID( 3 ), COUNT, STATUS
496      );
497      TEST_SUPPORT.DIRECTIVE_FAILED(
498         STATUS, "MESSAGE_QUEUE_GET_NUMBER_PENDING"
499      );
500      TEXT_IO.PUT( "TA1 - " );
501      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
502      TEXT_IO.PUT_LINE( " messages are pending on Q 3" );
503
504      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
505      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
506      RTEMS.MESSAGE_QUEUE_SEND(
507         SPTEST.QUEUE_ID( 3 ),
508         BUFFER_POINTER,
509         16,
510         STATUS
511      );
512      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
513
514      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
515      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
516      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
517      TEXT_IO.PUT( "TA1 - " );
518      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
519      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
520     
521      TEXT_IO.PUT_LINE(
522         "TA1 - message_queue_send - until all message buffers consumed"
523      );
524      loop
525
526         RTEMS.MESSAGE_QUEUE_SEND(
527            SPTEST.QUEUE_ID( 3 ),
528            BUFFER_POINTER,
529            16,
530            STATUS
531         );
532         
533         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TOO_MANY );
534
535         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
536         
537      end loop;
538
539      TEXT_IO.PUT_LINE(
540         "TA1 - message_queue_send - all message buffers consumed"
541      );
542
543      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
544      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
545      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
546      TEXT_IO.PUT( "TA1 - " );
547      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
548      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
549
550TEST_SUPPORT.PAUSE;
551     
552      TEXT_IO.PUT_LINE( "TA1 - create message queue of 20 bytes on queue 1" );
553      RTEMS.MESSAGE_QUEUE_CREATE(
554         SPTEST.QUEUE_NAME( 1 ),
555         100,
556         20,
557         RTEMS.DEFAULT_ATTRIBUTES,
558         SPTEST.QUEUE_ID( 1 ),
559         STATUS
560      );
561      TEST_SUPPORT.DIRECTIVE_FAILED(
562         STATUS, "MESSAGE_QUEUE_CREATE of Q1; 20 bytes each"
563      );
564      RTEMS.MESSAGE_QUEUE_SEND(
565         SPTEST.QUEUE_ID( 1 ), BIG_SEND_BUFFER_POINTER, 40, STATUS
566      );
567      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
568         STATUS, RTEMS.INVALID_SIZE, "expected INVALID_SIZE"
569      );
570
571      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
572      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
573      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
574
575TEST_SUPPORT.PAUSE;
576
577      TEXT_IO.PUT_LINE( "TA1 - message_queue_create - variable sizes " );
578      for QUEUE_SIZE in 1 .. 1029 loop
579          RTEMS.MESSAGE_QUEUE_CREATE(
580              SPTEST.QUEUE_NAME( 1 ),
581              2,            -- just 2 msgs each
582              RTEMS.UNSIGNED32( QUEUE_SIZE ),
583              RTEMS.DEFAULT_ATTRIBUTES,
584              QUEUE_ID( 1 ),
585              STATUS
586          );
587          if STATUS /= RTEMS.SUCCESSFUL then
588              TEXT_IO.PUT( "TA1 - msq que size: " );
589              UNSIGNED32_IO.PUT(
590                 RTEMS.UNSIGNED32( QUEUE_SIZE ), WIDTH => 3, BASE => 10
591              );
592              TEXT_IO.NEW_LINE;
593              TEST_SUPPORT.DIRECTIVE_FAILED(
594                 STATUS, "message_queue_create of Q1"
595              );
596          end if;
597
598          RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
599          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "message_queue_delete" );
600      end loop;
601
602      TEXT_IO.PUT_LINE(
603         "TA1 - message_queue_create and send - variable sizes "
604      );
605      for QUEUE_SIZE in 1 .. 1029 loop
606
607          RTEMS.MESSAGE_QUEUE_CREATE(
608              SPTEST.QUEUE_NAME( 1 ),
609              2,            -- just 2 msgs each
610              RTEMS.UNSIGNED32( QUEUE_SIZE ),
611              RTEMS.DEFAULT_ATTRIBUTES,
612              SPTEST.QUEUE_ID( 1 ),
613              STATUS
614          );
615          TEST_SUPPORT.DIRECTIVE_FAILED( status, "message_queue_create of Q1" );
616
617          BIG_SEND_BUFFER := (others => CHARACTER'POS( 'A' ));
618          BIG_RECEIVE_BUFFER := (others => CHARACTER'POS( 'Z' ));
619
620          -- send a msg too big
621          RTEMS.MESSAGE_QUEUE_SEND(
622             SPTEST.QUEUE_ID( 1 ),
623             BIG_SEND_BUFFER_POINTER,
624             RTEMS.UNSIGNED32( QUEUE_SIZE + 1 ),
625             STATUS
626          );
627          TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
628             STATUS, RTEMS.INVALID_SIZE, "message_queue_send too large"
629          );
630
631          -- send a msg that is just right
632          RTEMS.MESSAGE_QUEUE_SEND(
633             SPTEST.QUEUE_ID( 1 ),
634             BIG_SEND_BUFFER_POINTER,
635             RTEMS.UNSIGNED32( QUEUE_SIZE ),
636             STATUS
637          );
638          TEST_SUPPORT.DIRECTIVE_FAILED(
639             STATUS, "message_queue_send exact size"
640          );
641
642          -- now read and verify the message just sent
643          RTEMS.MESSAGE_QUEUE_RECEIVE(
644             SPTEST.QUEUE_ID( 1 ),
645             BIG_RECEIVE_BUFFER_POINTER,
646             RTEMS.DEFAULT_OPTIONS,
647             1 * TEST_SUPPORT.TICKS_PER_SECOND,
648             SIZE,
649             STATUS
650          );
651          TEST_SUPPORT.DIRECTIVE_FAILED(
652             STATUS, "message_queue_receive exact size"
653          );
654          if SIZE /= RTEMS.UNSIGNED32( QUEUE_SIZE ) then
655              TEXT_IO.PUT(
656                 "TA1 - exact size size match failed for queue_size = "
657              );
658              UNSIGNED32_IO.PUT(
659                 RTEMS.UNSIGNED32( QUEUE_SIZE ), WIDTH => 3, BASE => 10
660              );
661              TEXT_IO.NEW_LINE;
662          end if;
663
664          if (BIG_SEND_BUFFER( BIG_SEND_BUFFER'FIRST .. Integer( SIZE )) /=
665            BIG_RECEIVE_BUFFER( BIG_RECEIVE_BUFFER'FIRST .. Integer( SIZE ))) then
666              TEXT_IO.PUT_LINE("TA1 - exact size data match failed");
667          end if;
668
669          for I in Integer( SIZE + 1 ) .. BIG_RECEIVE_BUFFER'LAST loop
670              if BIG_RECEIVE_BUFFER( I ) /= CHARACTER'POS( 'Z' ) then
671                  TEXT_IO.PUT_LINE("TA1 - exact size overrun match failed");
672              end if;
673          end loop;
674
675          -- all done with this one; delete it
676          RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
677          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "message_queue_delete" );
678      end loop;
679
680      TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
681      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
682
683   end TASK_1;
684
685--PAGE
686--
687--  TASK_2
688--
689
690   procedure TASK_2 (
691      ARGUMENT : in     RTEMS.TASK_ARGUMENT
692   ) is
693      BUFFER            : SPTEST.BUFFER;
694      BUFFER_POINTER    : RTEMS.ADDRESS;
695      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
696      MESSAGE_SIZE      : RTEMS.UNSIGNED32;
697      STATUS            : RTEMS.STATUS_CODES;
698   begin
699
700      BUFFER_POINTER := BUFFER'ADDRESS;
701
702      TEXT_IO.PUT_LINE(
703         "TA2 - message_queue_receive - receive from queue 1 - NO_WAIT"
704      );
705      RTEMS.MESSAGE_QUEUE_RECEIVE(
706         SPTEST.QUEUE_ID( 1 ),
707         BUFFER_POINTER,
708         RTEMS.NO_WAIT,
709         RTEMS.NO_TIMEOUT,
710         MESSAGE_SIZE,
711         STATUS
712      );
713      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
714      TEXT_IO.PUT( "TA2 - buffer received: " );
715      SPTEST.PUT_BUFFER( BUFFER );
716      TEXT_IO.NEW_LINE;
717
718      TEXT_IO.PUT_LINE(
719         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
720      );
721      RTEMS.MESSAGE_QUEUE_RECEIVE(
722         SPTEST.QUEUE_ID( 1 ),
723         BUFFER_POINTER,
724         RTEMS.DEFAULT_OPTIONS,
725         RTEMS.NO_TIMEOUT,
726         MESSAGE_SIZE,
727         STATUS
728      );
729      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
730      TEXT_IO.PUT( "TA2 - buffer received: " );
731      SPTEST.PUT_BUFFER( BUFFER );
732      TEXT_IO.NEW_LINE;
733
734      TEXT_IO.PUT_LINE(
735         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
736      );
737      RTEMS.MESSAGE_QUEUE_RECEIVE(
738         SPTEST.QUEUE_ID( 1 ),
739         BUFFER_POINTER,
740         RTEMS.DEFAULT_OPTIONS,
741         RTEMS.NO_TIMEOUT,
742         MESSAGE_SIZE,
743         STATUS
744      );
745      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
746      TEXT_IO.PUT( "TA2 - buffer received: " );
747      SPTEST.PUT_BUFFER( BUFFER );
748      TEXT_IO.NEW_LINE;
749
750      TEXT_IO.PUT_LINE(
751         "TA2 - task_set_priority - make self highest priority task"
752      );
753      RTEMS.TASK_SET_PRIORITY(
754         RTEMS.SELF,
755         3,
756         PREVIOUS_PRIORITY,
757         STATUS
758      );
759      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
760
761      TEXT_IO.PUT_LINE(
762         "TA2 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
763      );
764      RTEMS.MESSAGE_QUEUE_RECEIVE(
765         SPTEST.QUEUE_ID( 2 ),
766         BUFFER_POINTER,
767         RTEMS.DEFAULT_OPTIONS,
768         RTEMS.NO_TIMEOUT,
769         MESSAGE_SIZE,
770         STATUS
771      );
772      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
773      TEXT_IO.PUT( "TA2 - buffer received: " );
774      SPTEST.PUT_BUFFER( BUFFER );
775      TEXT_IO.NEW_LINE;
776
777      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 2 ", BUFFER );
778      TEXT_IO.PUT_LINE( "TA2 - message_queue_send - BUFFER 2 TO Q 2" );
779      RTEMS.MESSAGE_QUEUE_SEND(
780         SPTEST.QUEUE_ID( 2 ),
781         BUFFER_POINTER,
782         16,
783         STATUS
784      );
785      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
786   
787      TEXT_IO.PUT_LINE(
788    "TA2 - message_queue_receive - receive from queue 1 - 10 second timeout"
789      );
790      RTEMS.MESSAGE_QUEUE_RECEIVE(
791         SPTEST.QUEUE_ID( 1 ),
792         BUFFER_POINTER,
793         RTEMS.DEFAULT_OPTIONS,
794         10 * TEST_SUPPORT.TICKS_PER_SECOND,
795         MESSAGE_SIZE,
796         STATUS
797      );
798      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
799      TEXT_IO.PUT( "TA2 - buffer received: " );
800      SPTEST.PUT_BUFFER( BUFFER );
801      TEXT_IO.NEW_LINE;
802
803      TEXT_IO.PUT_LINE(
804         "TA2 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
805      );
806      RTEMS.MESSAGE_QUEUE_RECEIVE(
807         SPTEST.QUEUE_ID( 3 ),
808         BUFFER_POINTER,
809         RTEMS.DEFAULT_OPTIONS,
810         RTEMS.NO_TIMEOUT,
811         MESSAGE_SIZE,
812         STATUS
813      );
814      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
815      TEXT_IO.PUT( "TA2 - buffer received: " );
816      SPTEST.PUT_BUFFER( BUFFER );
817      TEXT_IO.NEW_LINE;
818
819   end TASK_2;
820
821--PAGE
822--
823--  TASK_3
824--
825
826   procedure TASK_3 (
827      ARGUMENT : in     RTEMS.TASK_ARGUMENT
828   ) is
829      BUFFER         : SPTEST.BUFFER;
830      BUFFER_POINTER : RTEMS.ADDRESS;
831      COUNT          : RTEMS.UNSIGNED32;
832      MESSAGE_SIZE   : RTEMS.UNSIGNED32;
833      STATUS         : RTEMS.STATUS_CODES;
834   begin
835
836      BUFFER_POINTER := BUFFER'ADDRESS;
837
838      TEXT_IO.PUT_LINE(
839         "TA3 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
840      );
841      RTEMS.MESSAGE_QUEUE_RECEIVE(
842         SPTEST.QUEUE_ID( 2 ),
843         BUFFER_POINTER,
844         RTEMS.DEFAULT_OPTIONS,
845         RTEMS.NO_TIMEOUT,
846         MESSAGE_SIZE,
847         STATUS
848      );
849      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
850      TEXT_IO.PUT( "TA3 - buffer received: " );
851      SPTEST.PUT_BUFFER( BUFFER );
852      TEXT_IO.NEW_LINE;
853
854      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
855      TEXT_IO.PUT_LINE( "TA3 - message_queue_broadcast - BUFFER 3 TO Q 1" );
856      RTEMS.MESSAGE_QUEUE_BROADCAST(
857         SPTEST.QUEUE_ID( 1 ),
858         BUFFER_POINTER,
859         16,
860         COUNT,
861         STATUS
862      );
863      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
864      TEXT_IO.PUT( "TA3 - number of tasks awakened = " );
865      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
866      TEXT_IO.NEW_LINE;
867     
868      TEXT_IO.PUT_LINE(
869         "TA3 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
870      );
871      RTEMS.MESSAGE_QUEUE_RECEIVE(
872         SPTEST.QUEUE_ID( 3 ),
873         BUFFER_POINTER,
874         RTEMS.DEFAULT_OPTIONS,
875         RTEMS.NO_TIMEOUT,
876         MESSAGE_SIZE,
877         STATUS
878      );
879      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
880      TEXT_IO.PUT( "TA3 - buffer received: " );
881      SPTEST.PUT_BUFFER( BUFFER );
882      TEXT_IO.NEW_LINE;
883
884      TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
885      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
886      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
887
888   end TASK_3;
889
890end SPTEST;
Note: See TracBrowser for help on using the repository browser.