source: rtems/c/src/ada-tests/mptests/mp08/mptest.adb @ 23848bbd

4.104.114.95
Last change on this file since 23848bbd was 23848bbd, checked in by Joel Sherrill <joel.sherrill@…>, on Oct 1, 2007 at 10:58:09 PM

2007-10-01 Joel Sherrill <joel.sherrill@…>

  • mptests/mp01/mptest.adb, mptests/mp01/mptest.ads, mptests/mp01/node1/Makefile.am, mptests/mp02/mptest.adb, mptests/mp02/mptest.ads, mptests/mp03/mptest.adb, mptests/mp03/mptest.ads, mptests/mp04/mptest.adb, mptests/mp04/mptest.ads, mptests/mp05/mptest.adb, mptests/mp05/mptest.ads, mptests/mp06/mptest.adb, mptests/mp06/mptest.ads, mptests/mp07/mptest.adb, mptests/mp07/mptest.ads, mptests/mp08/mptest.adb, mptests/mp08/mptest.ads, mptests/mp09/mptest.adb, mptests/mp09/mptest.ads, mptests/mp10/mptest.adb, mptests/mp10/mptest.ads, mptests/mp11/mptest.adb, mptests/mp11/mptest.ads, mptests/mp12/mptest.adb, mptests/mp12/mptest.ads, mptests/mp13/mptest.adb, mptests/mp13/mptest.ads, mptests/mp14/mptest.adb, mptests/mp14/mptest.ads, support/init.c, support/test_support.adb, support/test_support.ads: Most of single processor Ada tests now build. Some run.
  • Property mode set to 100644
File size: 4.7 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 8 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
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;
28
29package body MPTEST is
30
31--PAGE
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASK_ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT( "*** TEST 8 -- 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.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
54
55      if TEST_SUPPORT.NODE = 1 then
56
57         TEXT_IO.PUT_LINE( "Creating Semaphore(Global)" );
58
59         RTEMS.SEMAPHORE_CREATE(
60            MPTEST.SEMAPHORE_NAME( 1 ),
61            1,
62            RTEMS.GLOBAL,
63            MPTEST.SEMAPHORE_ID( 1 ),
64            STATUS
65         );
66         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
67
68      end if;
69
70      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
71      RTEMS.TASK_CREATE( 
72         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ), 
73         TEST_SUPPORT.NODE, 
74         2048, 
75         RTEMS.TIMESLICE,
76         RTEMS.GLOBAL,
77         MPTEST.TASK_ID( 1 ),
78         STATUS
79      );
80      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
81
82      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
83      RTEMS.TASK_START(
84         MPTEST.TASK_ID( 1 ),
85         MPTEST.TEST_TASK'ACCESS,
86         0,
87         STATUS
88      );
89      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
90
91      TEXT_IO.PUT_LINE( "Deleting initialization task" );
92      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
93      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
94
95   end INIT;
96
97--PAGE
98--
99--  TEST_TASK
100--
101
102   procedure TEST_TASK (
103      ARGUMENT : in     RTEMS.TASK_ARGUMENT
104   ) is
105      DOTS                     : RTEMS.UNSIGNED32;
106      COUNT                    : RTEMS.UNSIGNED32;
107      STATUS                   : RTEMS.STATUS_CODES;
108   begin
109
110      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
111      loop
112
113         RTEMS.SEMAPHORE_IDENT( 
114            MPTEST.SEMAPHORE_NAME( 1 ),
115            RTEMS.SEARCH_ALL_NODES,
116            MPTEST.SEMAPHORE_ID( 1 ),
117            STATUS
118         );
119
120         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
121
122      end loop;
123
124      if TEST_SUPPORT.NODE = 2 then
125
126         RTEMS.SEMAPHORE_DELETE(
127            MPTEST.SEMAPHORE_ID( 1 ),
128            STATUS
129         );
130         TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
131            STATUS, 
132            RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
133            "SEMAPHORE_DELETE" 
134         );
135
136         TEXT_IO.PUT_LINE(
137            "semaphore_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
138         );
139
140      end if;
141
142      COUNT := 0;
143
144      loop
145
146         TEST_SUPPORT.PUT_DOT( "p" );
147
148         RTEMS.SEMAPHORE_OBTAIN(
149            MPTEST.SEMAPHORE_ID( 1 ),
150            RTEMS.DEFAULT_OPTIONS,
151            RTEMS.NO_TIMEOUT,
152            STATUS
153         );
154
155         if not RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
156
157            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
158               STATUS, 
159               RTEMS.OBJECT_WAS_DELETED,
160               "SEMAPHORE_OBTAIN" 
161            );
162
163            TEXT_IO.NEW_LINE;
164
165            TEXT_IO.PUT_LINE( "Global semaphore deleted" );
166
167            TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
168
169            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
170
171         end if;
172
173         COUNT := COUNT + 1;
174
175         if TEST_SUPPORT.NODE = 1 and then
176            COUNT >= 1000 then
177
178            RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
179            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
180
181            TEXT_IO.NEW_LINE;
182
183            TEXT_IO.PUT_LINE( "Deleting global semaphore" );
184
185            RTEMS.SEMAPHORE_DELETE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
186            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE" );
187
188            TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
189
190            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
191
192         end if;
193
194         TEST_SUPPORT.PUT_DOT( "v" );
195
196         RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
197
198         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
199
200      end loop;
201
202   end TEST_TASK;
203
204end MPTEST;
Note: See TracBrowser for help on using the repository browser.