source: rtems/testsuites/ada/sptests/sp03/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: 4.1 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 3 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;
24with RTEMS.CLOCK;
25
26package body SPTEST is
27
28--
29--  INIT
30--
31
32   procedure INIT (
33      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
34   ) is
35      pragma Unreferenced(ARGUMENT);
36      STATUS : RTEMS.STATUS_CODES;
37   begin
38
39      TEXT_IO.NEW_LINE( 2 );
40      TEST_SUPPORT.ADA_TEST_BEGIN;
41
42      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
43      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
44
45      RTEMS.TASKS.CREATE(
46         SPTEST.TASK_NAME( 1 ),
47         1,
48         RTEMS.MINIMUM_STACK_SIZE,
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         RTEMS.MINIMUM_STACK_SIZE,
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.START(
68         SPTEST.TASK_ID( 1 ),
69         SPTEST.TASK_1'ACCESS,
70         0,
71         STATUS
72      );
73      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
74
75      RTEMS.TASKS.START(
76         SPTEST.TASK_ID( 2 ),
77         SPTEST.TASK_2'ACCESS,
78         0,
79         STATUS
80      );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
82
83      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
85
86   end INIT;
87
88--
89--  TASK_1
90--
91
92   procedure TASK_1 (
93      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
94   ) is
95      pragma Unreferenced(ARGUMENT);
96      TIME   : RTEMS.TIME_OF_DAY;
97      STATUS : RTEMS.STATUS_CODES;
98   begin
99
100      TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
101
102      RTEMS.CLOCK.SET( TIME, STATUS );
103      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
104
105      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
106      TEST_SUPPORT.PRINT_TIME( "sets clock: ", TIME, "" );
107      TEXT_IO.NEW_LINE;
108
109      loop
110
111         RTEMS.CLOCK.GET_TOD( TIME, STATUS );
112         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
113
114         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
115         TEST_SUPPORT.PRINT_TIME( "going to sleep: ", TIME, "" );
116         TEXT_IO.NEW_LINE;
117
118         TIME.SECOND := TIME.SECOND + 5;
119         TIME.MINUTE := TIME.MINUTE + (TIME.SECOND / 60 );
120         TIME.SECOND := TIME.SECOND mod 60;
121         TIME.HOUR   := TIME.HOUR + (TIME.MINUTE / 60 );
122         TIME.MINUTE := TIME.MINUTE mod 60;
123         TIME.HOUR   := TIME.HOUR mod 24;
124
125         RTEMS.TASKS.WAKE_WHEN( TIME, STATUS );
126         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
127         
128         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
129         TEST_SUPPORT.PRINT_TIME( "awakened: ", TIME, "" );
130         TEXT_IO.NEW_LINE;
131
132      end loop;
133   
134   end TASK_1;
135
136--
137--  TASK_2
138--
139
140   procedure TASK_2 (
141      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
142   ) is
143      pragma Unreferenced(ARGUMENT);
144      TIME   : RTEMS.TIME_OF_DAY;
145      STATUS : RTEMS.STATUS_CODES;
146   begin
147
148      loop
149
150         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
151         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
152         
153         RTEMS.CLOCK.GET_TOD( TIME, STATUS );
154         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
155
156         if TIME.SECOND >= 17 then
157            TEST_SUPPORT.ADA_TEST_END;
158            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
159         end if;
160
161         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 2 ), FALSE );
162         TEST_SUPPORT.PRINT_TIME( " ", TIME, "" );
163         TEXT_IO.NEW_LINE;
164
165      end loop;
166
167   end TASK_2;
168
169end SPTEST;
Note: See TracBrowser for help on using the repository browser.