1-- C99004A.ADA
2
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25-- OBJECTIVE:
26--     CHECK THAT THE PREFIX OF 'TERMINATED AND 'CALLABLE CAN BE A
27--     FUNCTION CALL RETURNING AN OBJECT HAVING A TASK TYPE.
28
29--     NOTE: SEE TEST C38202A FOR CHECKS INVOLVING PREFIXES WHICH ARE
30--     ACCESS TYPES DENOTING TASK TYPES OR WHICH ARE FUNCTIONS
31--     RETURNING ACCESS TYPES DENOTING TASK TYPES.
32
33-- HISTORY:
34--     RJW 09/16/86 CREATED ORIGINAL TEST.
35--     DHH 10/15/87 CORRECTED HEADER COMMENTS.
36
37with Impdef;
38WITH REPORT; USE REPORT;
39PROCEDURE C99004A IS
40
41     TYPE ENUM IS (A, B, C, D);
42
43     EARRAY : ARRAY (ENUM) OF STRING (1 .. 17) :=
44                                        (A => "BEFORE ACTIVATION",
45                                         B => "DURING ACTIVATION",
46                                         C => "DURING EXECUTION ",
47                                         D => "AFTER TERMINATION" );
48
49     FUNCTION CHECK (S : STRING; CALL, B1, TERM, B2 : BOOLEAN;
50                     E : ENUM) RETURN BOOLEAN IS
51     BEGIN
52          IF CALL /= B1 THEN
53               FAILED ( "INCORRECT VALUE FOR " & S & "'CALLABLE " &
54                         EARRAY (E) & " OF TASK" );
55          END IF;
56
57          IF TERM /= B2 THEN
58               FAILED ( "INCORRECT VALUE FOR " & S & "'TERMINATED " &
59                         EARRAY (E) & " OF TASK" );
60          END IF;
61
62          RETURN IDENT_BOOL (TRUE);
63     END CHECK;
64
65
66BEGIN
67     TEST ( "C99004A", "CHECK THAT THE PREFIX OF 'TERMINATED AND " &
68                       "'CALLABLE CAN BE A FUNCTION CALL RETURNING " &
69                       "AN OBJECT HAVING A TASK TYPE" );
70
71     DECLARE
72
73          TASK TYPE TT IS
74               ENTRY E;
75          END TT;
76
77          PACKAGE PKG1 IS
78               T1 : TT;
79          END PKG1;
80
81          FUNCTION F RETURN TT IS
82          BEGIN
83               RETURN PKG1.T1;
84          END F;
85
86          PACKAGE PKG2 IS
87               A1 : BOOLEAN := CHECK ("F", F'CALLABLE, TRUE,
88                                      F'TERMINATED, FALSE, A);
89          END PKG2;
90
91          TASK MAIN_TASK IS
92               ENTRY E (INTEGER RANGE 1 .. 2);
93          END MAIN_TASK;
94
95          TASK BODY TT IS
96               B1 : BOOLEAN := CHECK ("F", F'CALLABLE, TRUE,
97                                      F'TERMINATED, FALSE, B);
98               C1 : BOOLEAN;
99          BEGIN
100               C1 := CHECK ("F", F'CALLABLE, TRUE,
101                            F'TERMINATED, FALSE, C);
102               MAIN_TASK.E (1);
103               MAIN_TASK.E (2);
104          END TT;
105
106          PACKAGE BODY PKG1 IS
107          BEGIN
108               NULL;
109          END;
110
111          TASK BODY MAIN_TASK IS
112               D1 : BOOLEAN;
113          BEGIN
114               ACCEPT E (1);
115               ABORT PKG1.T1;
116               DELAY 5.0 * Impdef.One_Long_Second;
117               D1 := CHECK ("F", F'CALLABLE, FALSE,
118                             F'TERMINATED, TRUE, D);
119          END MAIN_TASK;
120
121     BEGIN
122          NULL;
123     END;
124
125     DECLARE
126
127          TASK TYPE TT IS
128               ENTRY E;
129          END TT;
130
131          T2 : TT;
132
133          A2 : BOOLEAN := CHECK ("T2", T2'CALLABLE, TRUE,
134                                  T2'TERMINATED, FALSE, A);
135
136          TASK MAIN_TASK IS
137               ENTRY E (INTEGER RANGE 1 .. 2);
138          END MAIN_TASK;
139
140          TASK BODY TT IS
141               B2 : BOOLEAN := CHECK ("T2", T2'CALLABLE, TRUE,
142                                       T2'TERMINATED, FALSE, B);
143               C2 : BOOLEAN;
144          BEGIN
145               C2 := CHECK ("T2", T2'CALLABLE, TRUE,
146                             T2'TERMINATED, FALSE, C);
147               MAIN_TASK.E (1);
148               MAIN_TASK.E (2);
149          END TT;
150
151          TASK BODY MAIN_TASK IS
152               D2 : BOOLEAN;
153          BEGIN
154               ACCEPT E (1);
155               ABORT T2;
156               DELAY 5.0 * Impdef.One_Long_Second;
157               D2 := CHECK ("T2", T2'CALLABLE, FALSE,
158                             T2'TERMINATED, TRUE, D);
159          END MAIN_TASK;
160
161     BEGIN
162          NULL;
163     END;
164
165     RESULT;
166END C99004A;
167