3 -- Grant of Unlimited Rights
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
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.
26 -- CHECK THAT A VARIABLE CREATED BY A GENERIC 'IN OUT' FORMAL
27 -- PARAMETER CAN BE RENAMED AND HAS THE CORRECT VALUE, AND
28 -- THAT THE NEW NAME CAN BE USED IN AN ASSIGNMENT STATEMENT AND
29 -- PASSED ON AS AN ACTUAL SUBPROGRAM OR ENTRY 'IN OUT' OR 'OUT'
30 -- PARAMETER, AND AS AN ACTUAL GENERIC 'IN OUT' PARAMETER,
31 -- AND THAT WHEN THE VALUE OF THE RENAMED VARIABLE IS CHANGED,
32 -- THE NEW VALUE IS REFLECTED BY THE VALUE OF THE NEW NAME.
35 -- JET 03/15/88 CREATED ORIGINAL TEST.
37 WITH REPORT
; USE REPORT
;
40 TYPE ARRAY1
IS ARRAY (POSITIVE RANGE <>) OF INTEGER;
41 TYPE RECORD1
(D
: INTEGER) IS
43 FIELD1
: INTEGER := 1;
45 TYPE POINTER1
IS ACCESS INTEGER;
48 TYPE PRIVY
IS PRIVATE;
49 ZERO
: CONSTANT PRIVY
;
52 THREE
: CONSTANT PRIVY
;
53 FOUR
: CONSTANT PRIVY
;
54 FIVE
: CONSTANT PRIVY
;
55 FUNCTION IDENT
(I
: PRIVY
) RETURN PRIVY
;
56 FUNCTION NEXT
(I
: PRIVY
) RETURN PRIVY
;
58 TYPE PRIVY
IS RANGE 0..127;
59 ZERO
: CONSTANT PRIVY
:= 0;
60 ONE
: CONSTANT PRIVY
:= 1;
61 TWO
: CONSTANT PRIVY
:= 2;
62 THREE
: CONSTANT PRIVY
:= 3;
63 FOUR
: CONSTANT PRIVY
:= 4;
64 FIVE
: CONSTANT PRIVY
:= 5;
68 ENTRY ASSIGN
(J
: IN INTEGER);
69 ENTRY VALU
(J
: OUT INTEGER);
75 DA1
: ARRAY1
(1..3) := (OTHERS => 0);
76 DR1
: RECORD1
(1) := (D
=> 1, FIELD1
=> 0);
77 DP1
: POINTER1
:= NEW INTEGER'(0);
78 DV1 : PACK1.PRIVY := PACK1.ZERO;
87 GP1 : IN OUT POINTER1;
88 GV1 : IN OUT PACK1.PRIVY;
93 FUNCTION IDENT (P : POINTER1) RETURN POINTER1 IS
102 PACKAGE BODY PACK1 IS
103 FUNCTION IDENT (I : PRIVY) RETURN PRIVY IS
112 FUNCTION NEXT
(I
: PRIVY
) RETURN PRIVY
IS
118 PACKAGE BODY GENERIC1
IS
119 XGI1
: INTEGER RENAMES GI1
;
120 XGA1
: ARRAY1
RENAMES GA1
;
121 XGR1
: RECORD1
RENAMES GR1
;
122 XGP1
: POINTER1
RENAMES GP1
;
123 XGV1
: PACK1
.PRIVY
RENAMES GV1
;
124 XGT1
: TASK1
RENAMES GT1
;
127 ENTRY ENTRY1
(TI1
: OUT INTEGER; TA1
: OUT ARRAY1
;
128 TR1
: OUT RECORD1
; TP1
: IN OUT POINTER1
;
129 TV1
: IN OUT PACK1
.PRIVY
;
136 GGI1
: IN OUT INTEGER;
137 GGA1
: IN OUT ARRAY1
;
138 GGR1
: IN OUT RECORD1
;
139 GGP1
: IN OUT POINTER1
;
140 GGV1
: IN OUT PACK1
.PRIVY
;
145 PACKAGE BODY GENERIC2
IS
148 GGA1
:= (GGA1
(1)+1, GGA1
(2)+1, GGA1
(3)+1);
149 GGR1
:= (D
=> 1, FIELD1
=> GGR1
.FIELD1
+ 1);
150 GGP1
:= NEW INTEGER'(GGP1.ALL + 1);
151 GGV1 := PACK1.NEXT(GGV1);
157 ACCEPT ENTRY1 (TI1 : OUT INTEGER; TA1 : OUT ARRAY1;
158 TR1 : OUT RECORD1; TP1 : IN OUT POINTER1;
159 TV1 : IN OUT PACK1.PRIVY;
163 TA1 := (GA1(1)+1, GA1(2)+1, GA1(3)+1);
164 TR1 := (D => 1, FIELD1 => GR1.FIELD1 + 1);
165 TP1 := NEW INTEGER'(TP1
.ALL + 1);
166 TV1
:= PACK1
.NEXT
(TV1
);
171 PROCEDURE PROC1
(PI1
: IN OUT INTEGER; PA1
: IN OUT ARRAY1
;
172 PR1
: IN OUT RECORD1
; PP1
: OUT POINTER1
;
173 PV1
: OUT PACK1
.PRIVY
; PT1
: IN OUT TASK1
) IS
176 PA1
:= (PA1
(1)+1, PA1
(2)+1, PA1
(3)+1);
177 PR1
:= (D
=> 1, FIELD1
=> PR1
.FIELD1
+ 1);
178 PP1
:= NEW INTEGER'(GP1.ALL + 1);
179 PV1 := PACK1.NEXT(GV1);
183 PACKAGE GENPACK2 IS NEW GENERIC2
184 (XGI1, XGA1, XGR1, XGP1, XGV1, XGT1);
187 IF XGI1 /= IDENT_INT(1) THEN
188 FAILED ("INCORRECT VALUE OF XGI1 (1)");
191 IF XGA1 /= (IDENT_INT(1),IDENT_INT(1),IDENT_INT(1)) THEN
192 FAILED ("INCORRECT VALUE OF XGA1 (1)");
195 IF XGR1 /= (D => 1, FIELD1 => IDENT_INT(1)) THEN
196 FAILED ("INCORRECT VALUE OF XGR1 (1)");
199 IF XGP1 /= IDENT(GP1) OR XGP1.ALL /= IDENT_INT(1) THEN
200 FAILED ("INCORRECT VALUE OF XGP1 (1)");
203 IF PACK1."/=" (XGV1, PACK1.IDENT(PACK1.ONE)) THEN
204 FAILED ("INCORRECT VALUE OF XGV1 (1)");
208 IF I /= IDENT_INT(1) THEN
209 FAILED ("INCORRECT RETURN VALUE OF XGT1.VALU (1)");
212 PROC1(XGI1, XGA1, XGR1, XGP1, XGV1, XGT1);
214 IF XGI1 /= IDENT_INT(2) THEN
215 FAILED ("INCORRECT VALUE OF XGI1 (2)");
218 IF XGA1 /= (IDENT_INT(2),IDENT_INT(2),IDENT_INT(2)) THEN
219 FAILED ("INCORRECT VALUE OF XGA1 (2)");
222 IF XGR1 /= (D => 1, FIELD1 => IDENT_INT(2)) THEN
223 FAILED ("INCORRECT VALUE OF XGR1 (2)");
226 IF XGP1 /= IDENT(GP1) OR XGP1.ALL /= IDENT_INT(2) THEN
227 FAILED ("INCORRECT VALUE OF XGP1 (2)");
230 IF PACK1."/=" (XGV1, PACK1.IDENT(PACK1.TWO)) THEN
231 FAILED ("INCORRECT VALUE OF XGV1 (2)");
235 IF I /= IDENT_INT(2) THEN
236 FAILED ("INCORRECT RETURN VALUE OF XGT1.VALU (2)");
239 G_CHK_TASK.ENTRY1(XGI1, XGA1, XGR1, XGP1, XGV1, XGT1);
241 IF XGI1 /= IDENT_INT(3) THEN
242 FAILED ("INCORRECT VALUE OF XGI1 (3)");
245 IF XGA1 /= (IDENT_INT(3),IDENT_INT(3),IDENT_INT(3)) THEN
246 FAILED ("INCORRECT VALUE OF XGA1 (3)");
249 IF XGR1 /= (D => 1, FIELD1 => IDENT_INT(3)) THEN
250 FAILED ("INCORRECT VALUE OF XGR1 (3)");
253 IF XGP1 /= IDENT(GP1) OR XGP1.ALL /= IDENT_INT(3) THEN
254 FAILED ("INCORRECT VALUE OF XGP1 (3)");
257 IF PACK1."/=" (XGV1, PACK1.IDENT(PACK1.THREE)) THEN
258 FAILED ("INCORRECT VALUE OF XGV1 (3)");
262 IF I /= IDENT_INT(3) THEN
263 FAILED ("INCORRECT RETURN VALUE OF XGT1.VALU (3)");
267 XGA1 := (XGA1(1)+1, XGA1(2)+1, XGA1(3)+1);
268 XGR1 := (D => 1, FIELD1 => XGR1.FIELD1 + 1);
269 XGP1 := NEW INTEGER'(XGP1
.ALL + 1);
270 XGV1
:= PACK1
.NEXT
(XGV1
);
273 IF XGI1
/= IDENT_INT
(4) THEN
274 FAILED
("INCORRECT VALUE OF XGI1 (4)");
277 IF XGA1
/= (IDENT_INT
(4),IDENT_INT
(4),IDENT_INT
(4)) THEN
278 FAILED
("INCORRECT VALUE OF XGA1 (4)");
281 IF XGR1
/= (D
=> 1, FIELD1
=> IDENT_INT
(4)) THEN
282 FAILED
("INCORRECT VALUE OF XGR1 (4)");
285 IF XGP1
/= IDENT
(GP1
) OR XGP1
.ALL /= IDENT_INT
(4) THEN
286 FAILED
("INCORRECT VALUE OF XGP1 (4)");
289 IF PACK1
."/=" (XGV1
, PACK1
.IDENT
(PACK1
.FOUR
)) THEN
290 FAILED
("INCORRECT VALUE OF XGV1 (4)");
294 IF I
/= IDENT_INT
(4) THEN
295 FAILED
("INCORRECT RETURN VALUE OF XGT1.VALU (4)");
299 GA1
:= (GA1
(1)+1, GA1
(2)+1, GA1
(3)+1);
300 GR1
:= (D
=> 1, FIELD1
=> GR1
.FIELD1
+ 1);
301 GP1
:= NEW INTEGER'(GP1.ALL + 1);
302 GV1 := PACK1.NEXT(GV1);
305 IF XGI1 /= IDENT_INT(5) THEN
306 FAILED ("INCORRECT VALUE OF XGI1 (5)");
309 IF XGA1 /= (IDENT_INT(5),IDENT_INT(5),IDENT_INT(5)) THEN
310 FAILED ("INCORRECT VALUE OF XGA1 (5)");
313 IF XGR1 /= (D => 1, FIELD1 => IDENT_INT(5)) THEN
314 FAILED ("INCORRECT VALUE OF XGR1 (5)");
317 IF XGP1 /= IDENT(GP1) OR XGP1.ALL /= IDENT_INT(5) THEN
318 FAILED ("INCORRECT VALUE OF XGP1 (5)");
321 IF PACK1."/=" (XGV1, PACK1.IDENT(PACK1.FIVE)) THEN
322 FAILED ("INCORRECT VALUE OF XGV1 (5)");
326 IF I /= IDENT_INT(5) THEN
327 FAILED ("INCORRECT RETURN VALUE OF XGT1.VALU (5)");
332 TASK_VALUE : INTEGER := 0;
333 ACCEPTING_ENTRIES : BOOLEAN := TRUE;
335 WHILE ACCEPTING_ENTRIES LOOP
337 ACCEPT ASSIGN (J : IN INTEGER) DO
341 ACCEPT VALU (J : OUT INTEGER) DO
346 TASK_VALUE := TASK_VALUE + 1;
350 ACCEPTING_ENTRIES := FALSE;
357 TEST ("C85005D", "CHECK THAT A VARIABLE CREATED BY A GENERIC " &
358 "'IN OUT' FORMAL PARAMETER CAN BE RENAMED " &
359 "AND HAS THE CORRECT VALUE, AND THAT THE NEW " &
360 "NAME CAN BE USED IN AN ASSIGNMENT STATEMENT " &
361 "AND PASSED ON AS AN ACTUAL SUBPROGRAM OR " &
362 "ENTRY 'IN OUT' OR 'OUT' PARAMETER, AND AS AN " &
363 "ACTUAL GENERIC 'IN OUT' PARAMETER, AND THAT " &
364 "WHEN THE VALUE OF THE RENAMED VARIABLE IS " &
365 "CHANGED, THE NEW VALUE IS REFLECTED BY THE " &
366 "VALUE OF THE NEW NAME");
369 PACKAGE GENPACK1 IS NEW
370 GENERIC1 (DI1, DA1, DR1, DP1, DV1, DT1);