source: rtems/testsuites/ada/sptests/sp05/sptest.adb @ 76bd25e

5
Last change on this file since 76bd25e 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: 5.8 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 5 of the RTEMS
7--  Single Processor 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 TEST_SUPPORT;
23with TEXT_IO;
24
25package body SPTEST is
26
27--
28--  INIT
29--
30
31   procedure INIT (
32      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
33   ) is
34      pragma Unreferenced(ARGUMENT);
35      STATUS : RTEMS.STATUS_CODES;
36   begin
37
38      TEXT_IO.NEW_LINE( 2 );
39      TEST_SUPPORT.ADA_TEST_BEGIN;
40
41      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
42      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
43      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
44
45      RTEMS.TASKS.CREATE(
46         SPTEST.TASK_NAME( 1 ),
47         1,
48         2048,
49         RTEMS.DEFAULT_MODES,
50         RTEMS.DEFAULT_ATTRIBUTES,
51         SPTEST.TASK_ID( 1 ),
52         STATUS
53      );
54      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
55
56      RTEMS.TASKS.CREATE(
57         SPTEST.TASK_NAME( 2 ),
58         1,
59         2048,
60         RTEMS.DEFAULT_MODES,
61         RTEMS.DEFAULT_ATTRIBUTES,
62         SPTEST.TASK_ID( 2 ),
63         STATUS
64      );
65      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
66
67      RTEMS.TASKS.CREATE(
68         SPTEST.TASK_NAME( 3 ),
69         1,
70         2048,
71         RTEMS.DEFAULT_MODES,
72         RTEMS.DEFAULT_ATTRIBUTES,
73         SPTEST.TASK_ID( 3 ),
74         STATUS
75      );
76      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
77
78      RTEMS.TASKS.START(
79         SPTEST.TASK_ID( 1 ),
80         SPTEST.TASK_1'ACCESS,
81         0,
82         STATUS
83      );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
85
86      RTEMS.TASKS.START(
87         SPTEST.TASK_ID( 2 ),
88         SPTEST.TASK_2'ACCESS,
89         0,
90         STATUS
91      );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
93
94      RTEMS.TASKS.START(
95         SPTEST.TASK_ID( 3 ),
96         SPTEST.TASK_3'ACCESS,
97         0,
98         STATUS
99      );
100      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
101
102      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
103      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
104
105   end INIT;
106
107--
108--  TASK_1
109--
110
111   procedure TASK_1 (
112      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
113   ) is
114      pragma Unreferenced(ARGUMENT);
115      TID2   : RTEMS.ID;
116      TID3   : RTEMS.ID;
117      STATUS : RTEMS.STATUS_CODES;
118   begin
119
120      RTEMS.TASKS.IDENT(
121         SPTEST.TASK_NAME( 2 ),
122         1,
123         TID2,
124         STATUS
125      );
126      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
127   
128      RTEMS.TASKS.IDENT(
129         SPTEST.TASK_NAME( 3 ),
130         1,
131         TID3,
132         STATUS
133      );
134      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
135   
136      for PASS in 1 .. 3
137      loop
138
139         TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
140         RTEMS.TASKS.WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
141         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA1" );
142         
143         TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA3" );
144         RTEMS.TASKS.SUSPEND( TID3, STATUS );
145         if PASS = 1 then
146           TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
147              STATUS,
148              RTEMS.ALREADY_SUSPENDED,
149              "TASK_SUSPEND OF TA3"
150           );
151         else
152           TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
153         end if;
154         
155         TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA2" );
156         RTEMS.TASKS.RESUME( TID2, STATUS );
157         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
158         
159         TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
160         RTEMS.TASKS.WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
161         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
162         
163         TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
164         RTEMS.TASKS.SUSPEND( TID2, STATUS );
165         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
166         
167         TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA3" );
168         RTEMS.TASKS.RESUME( TID3, STATUS );
169         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
170         
171      end loop;
172
173      TEST_SUPPORT.ADA_TEST_END;
174      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
175
176   end TASK_1;
177
178--
179--  TASK_2
180--
181
182   procedure TASK_2 (
183      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
184   ) is
185      pragma Unreferenced(ARGUMENT);
186      STATUS : RTEMS.STATUS_CODES;
187   begin
188
189      TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend self" );
190      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
191      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
192
193      loop
194         TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 second" );
195         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
196         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA2" );
197      end loop;
198         
199   end TASK_2;
200
201--
202--  TASK_3
203--
204
205   procedure TASK_3 (
206      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
207   ) is
208      pragma Unreferenced(ARGUMENT);
209      STATUS : RTEMS.STATUS_CODES;
210   begin
211
212      TEXT_IO.PUT_LINE( "TA3 - task_suspend - suspend self" );
213      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
214      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
215
216      loop
217         TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 1 second" );
218         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
219         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA3" );
220      end loop;
221         
222   end TASK_3;
223
224end SPTEST;
Note: See TracBrowser for help on using the repository browser.