source: rtems/c/src/ada-tests/mptests/mp02/mptest.adb @ 1987020

4.115
Last change on this file since 1987020 was 23848bbd, checked in by Joel Sherrill <joel.sherrill@…>, on 10/01/07 at 22:58:09

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: 5.2 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 2 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 2 -- 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      TEXT_IO.PUT_LINE( "Creating test task (Global)" );
54
55      RTEMS.TASK_CREATE(
56         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ),
57         1,
58         2048,
59         RTEMS.NO_PREEMPT,
60         RTEMS.GLOBAL,
61         MPTEST.TASK_ID( 1 ),
62         STATUS
63      );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
65
66      RTEMS.TASK_START(
67         MPTEST.TASK_ID( 1 ),
68         MPTEST.TEST_TASK'ACCESS,
69         0,
70         STATUS
71      );
72      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
73
74      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
76
77   end INIT;
78
79--PAGE
80--
81--  TEST_TASK
82--
83
84   procedure TEST_TASK (
85      ARGUMENT : in     RTEMS.TASK_ARGUMENT
86   ) is
87      TID         : RTEMS.ID;
88      TEST_TID    : RTEMS.ID;
89      REMOTE_TID  : RTEMS.ID;
90      REMOTE_NODE : RTEMS.UNSIGNED32;
91      NOTE        : RTEMS.UNSIGNED32;
92      STATUS      : RTEMS.STATUS_CODES;
93   begin
94
95      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
96      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
97   
98      if TEST_SUPPORT.NODE = 1 then
99         REMOTE_NODE := 2;
100      else
101         REMOTE_NODE := 1;
102      end if;
103   
104      TEXT_IO.PUT_LINE( "Getting TID of remote task (all nodes)" );
105
106      loop
107
108         RTEMS.TASK_IDENT(
109            MPTEST.TASK_NAME( REMOTE_NODE ),
110            RTEMS.SEARCH_ALL_NODES,
111            REMOTE_TID,
112            STATUS
113         );
114
115         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
116
117      end loop;
118
119      --
120      --  We just got this ID above so looping is not necessary.
121      --
122
123      TEXT_IO.PUT_LINE( "Getting TID of remote task (1 node)" );
124      RTEMS.TASK_IDENT(
125         MPTEST.TASK_NAME( REMOTE_NODE ),
126         REMOTE_NODE,
127         TEST_TID,
128         STATUS
129      );
130      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT" );
131
132      if TEST_TID /= REMOTE_TID then
133         TEXT_IO.PUT_LINE( "task_ident tid's do not match!!" );
134         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
135      end if;
136
137      RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
138      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
139         STATUS,
140         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
141         "task_delete of remote task"
142      );
143      TEXT_IO.PUT_LINE(
144         "task_delete of remote task returned the correct error"
145      );
146         
147      RTEMS.TASK_START( REMOTE_TID, MPTEST.TEST_TASK'ACCESS, 0, STATUS );
148      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
149         STATUS,
150         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
151         "task_start of remote task"
152      );
153      TEXT_IO.PUT_LINE(
154         "task_start of remote task returned the correct error"
155      );
156         
157      RTEMS.TASK_RESTART( REMOTE_TID, 0, STATUS );
158      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
159         STATUS,
160         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
161         "task_restart of remote task"
162      );
163      TEXT_IO.PUT_LINE(
164         "task_restart of remote task returned the correct error"
165      );
166         
167   
168      TEXT_IO.PUT( "Setting notepad " );
169      UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
170      TEXT_IO.PUT( " of the remote task to " );
171      UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
172      TEXT_IO.NEW_LINE;
173      RTEMS.TASK_SET_NOTE(
174         REMOTE_TID,
175         RTEMS.GET_NODE( TID ),
176         RTEMS.GET_NODE( TID ),
177         STATUS
178      );
179      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
180
181      TEXT_IO.PUT_LINE( "Getting a notepad of the remote task" );
182      RTEMS.TASK_GET_NOTE(
183         REMOTE_TID,
184         RTEMS.GET_NODE( TID ),
185         NOTE,
186         STATUS
187      );
188      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
189
190      if NOTE = RTEMS.GET_NODE( TID ) then
191         TEXT_IO.PUT_LINE( "Remote notepad set and read correctly" );
192      else
193         TEXT_IO.PUT(
194            "FAILURE!!! Remote notepad was not set and read correctly ("
195         );
196         UNSIGNED32_IO.PUT( NOTE );
197         TEXT_IO.PUT( ", " );
198         UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ) );
199         TEXT_IO.PUT_LINE( ")" );
200
201      end if;
202
203      RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
204      TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
205
206      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
207
208   end TEST_TASK;
209
210end MPTEST;
Note: See TracBrowser for help on using the repository browser.