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 THE REQUIRED PREDEFINED OPERATIONS ARE DECLARED
27 -- (IMPLICITLY) FOR DERIVED MULTI-DIMENSIONAL ARRAY TYPES WHOSE
28 -- COMPONENT TYPE IS A LIMITED TYPE. THIS TEST IS PART 2 OF 2
29 -- TESTS WHICH COVER THE OBJECTIVE. THE FIRST PART IS IN TEST
33 -- BCB 04/12/90 CREATED ORIGINAL TEST FROM SPLIT OF C34005S.ADA.
34 -- RLB 10/03/02 REMOVED ILLEGAL (BY AI-246) TYPE CONVERSIONS AND
37 WITH SYSTEM
; USE SYSTEM
;
38 WITH REPORT
; USE REPORT
;
44 TYPE LP
IS LIMITED PRIVATE;
46 FUNCTION CREATE
(X
: INTEGER) RETURN LP
;
48 FUNCTION VALUE
(X
: LP
) RETURN INTEGER;
50 FUNCTION EQUAL
(X
, Y
: LP
) RETURN BOOLEAN;
52 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
);
71 TYPE LP
IS NEW INTEGER;
73 C1
: CONSTANT LP
:= 1;
74 C2
: CONSTANT LP
:= 2;
75 C3
: CONSTANT LP
:= 3;
76 C4
: CONSTANT LP
:= 4;
77 C5
: CONSTANT LP
:= 5;
78 C6
: CONSTANT LP
:= 6;
79 C7
: CONSTANT LP
:= 7;
80 C8
: CONSTANT LP
:= 8;
81 C9
: CONSTANT LP
:= 9;
82 C10
: CONSTANT LP
:= 10;
83 C11
: CONSTANT LP
:= 11;
84 C12
: CONSTANT LP
:= 12;
85 C13
: CONSTANT LP
:= 13;
86 C14
: CONSTANT LP
:= 14;
92 SUBTYPE COMPONENT
IS LP
;
96 FIRST
: CONSTANT := 0;
97 LAST
: CONSTANT := 10;
99 SUBTYPE INDEX
IS INTEGER RANGE FIRST
.. LAST
;
101 TYPE PARENT
IS ARRAY (INDEX
RANGE <>, INDEX
RANGE <>) OF
104 FUNCTION CREATE
( F1
, L1
: INDEX
;
107 DUMMY
: PARENT
-- TO RESOLVE OVERLOADING.
110 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN;
112 FUNCTION AGGR
(A
, B
, C
, D
: COMPONENT
) RETURN PARENT
;
114 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
: COMPONENT
) RETURN PARENT
;
116 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
, G
, H
: COMPONENT
)
119 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
, G
, H
, I
: COMPONENT
)
126 TYPE T
IS NEW PARENT
(IDENT_INT
(4) .. IDENT_INT
(5),
127 IDENT_INT
(6) .. IDENT_INT
(8));
130 W
: PARENT
(4 .. 5, 6 .. 8);
132 B
: BOOLEAN := FALSE;
135 PROCEDURE A
(X
: ADDRESS
) IS
137 B
:= IDENT_BOOL
(TRUE);
140 FUNCTION V
RETURN T
IS
143 FOR I
IN RESULT
'RANGE LOOP
144 FOR J
IN RESULT
'RANGE(2) LOOP
145 ASSIGN
(RESULT
(I
, J
), C
);
151 PACKAGE BODY PKG_L
IS
153 FUNCTION CREATE
(X
: INTEGER) RETURN LP
IS
155 RETURN LP
(IDENT_INT
(X
));
158 FUNCTION VALUE
(X
: LP
) RETURN INTEGER IS
163 FUNCTION EQUAL
(X
, Y
: LP
) RETURN BOOLEAN IS
168 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
) IS
175 PACKAGE BODY PKG_P
IS
184 A
: PARENT
(F1
.. L1
, F2
.. L2
);
188 FOR I
IN F1
.. L1
LOOP
189 FOR J
IN F2
.. L2
LOOP
190 ASSIGN
(A
(I
, J
), B
);
191 ASSIGN
(B
, CREATE
(VALUE
(B
) + 1));
197 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN IS
199 IF X
'LENGTH /= Y
'LENGTH OR
200 X
'LENGTH(2) /= Y
'LENGTH(2) THEN
202 ELSE FOR I
IN X
'RANGE LOOP
203 FOR J
IN X
'RANGE(2) LOOP
204 IF NOT EQUAL
(X
(I
, J
),
205 Y
(I
- X
'FIRST + Y
'FIRST,
216 FUNCTION AGGR
(A
, B
, C
, D
: COMPONENT
) RETURN PARENT
IS
217 X
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 1,
218 INDEX
'FIRST .. INDEX
'FIRST + 1);
220 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST ), A
);
221 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 1), B
);
222 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST ), C
);
223 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 1), D
);
227 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
: COMPONENT
) RETURN PARENT
IS
228 X
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 1,
229 INDEX
'FIRST .. INDEX
'FIRST + 2);
231 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST ), A
);
232 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 1), B
);
233 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 2), C
);
234 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST ), D
);
235 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 1), E
);
236 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 2), F
);
240 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
, G
, H
: COMPONENT
)
242 X
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 3,
243 INDEX
'FIRST .. INDEX
'FIRST + 1);
245 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST ), A
);
246 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 1), B
);
247 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST ), C
);
248 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 1), D
);
249 ASSIGN
(X
(INDEX
'FIRST + 2, INDEX
'FIRST ), E
);
250 ASSIGN
(X
(INDEX
'FIRST + 2, INDEX
'FIRST + 1), F
);
251 ASSIGN
(X
(INDEX
'FIRST + 3, INDEX
'FIRST ), G
);
252 ASSIGN
(X
(INDEX
'FIRST + 3, INDEX
'FIRST + 1), H
);
256 FUNCTION AGGR
(A
, B
, C
, D
, E
, F
, G
, H
, I
: COMPONENT
)
258 X
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 2,
259 INDEX
'FIRST .. INDEX
'FIRST + 2);
261 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST ), A
);
262 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 1), B
);
263 ASSIGN
(X
(INDEX
'FIRST , INDEX
'FIRST + 2), C
);
264 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST ), D
);
265 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 1), E
);
266 ASSIGN
(X
(INDEX
'FIRST + 1, INDEX
'FIRST + 2), F
);
267 ASSIGN
(X
(INDEX
'FIRST + 2, INDEX
'FIRST ), G
);
268 ASSIGN
(X
(INDEX
'FIRST + 2, INDEX
'FIRST + 1), H
);
269 ASSIGN
(X
(INDEX
'FIRST + 2, INDEX
'FIRST + 2), I
);
276 TEST
("C34005V", "CHECK THAT THE REQUIRED PREDEFINED OPERATIONS " &
277 "ARE DECLARED (IMPLICITLY) FOR DERIVED " &
278 "MULTI-DIMENSIONAL ARRAY TYPES WHOSE COMPONENT " &
279 "TYPE IS A LIMITED TYPE. THIS TEST IS PART 2 " &
280 "OF 2 TESTS WHICH COVER THE OBJECTIVE. THE " &
281 "FIRST PART IS IN TEST C34005S");
283 ASSIGN
(X
(IDENT_INT
(4), IDENT_INT
(6)), CREATE
(1));
284 ASSIGN
(X
(IDENT_INT
(4), IDENT_INT
(7)), CREATE
(2));
285 ASSIGN
(X
(IDENT_INT
(4), IDENT_INT
(8)), CREATE
(3));
286 ASSIGN
(X
(IDENT_INT
(5), IDENT_INT
(6)), CREATE
(4));
287 ASSIGN
(X
(IDENT_INT
(5), IDENT_INT
(7)), CREATE
(5));
288 ASSIGN
(X
(IDENT_INT
(5), IDENT_INT
(8)), CREATE
(6));
290 ASSIGN
(W
(4, 6), CREATE
(1));
291 ASSIGN
(W
(4, 7), CREATE
(2));
292 ASSIGN
(W
(4, 8), CREATE
(3));
293 ASSIGN
(W
(5, 6), CREATE
(4));
294 ASSIGN
(W
(5, 7), CREATE
(5));
295 ASSIGN
(W
(5, 8), CREATE
(6));
297 ASSIGN
(C
, CREATE
(2));
299 IF NOT EQUAL
(T
'(X), AGGR (C1, C2, C3, C4, C5, C6)) THEN
300 FAILED ("INCORRECT QUALIFICATION");
303 IF NOT EQUAL (T (X), AGGR (C1, C2, C3, C4, C5, C6)) THEN
304 FAILED ("INCORRECT SELF CONVERSION");
307 IF NOT EQUAL (T (W), AGGR (C1, C2, C3, C4, C5, C6)) THEN
308 FAILED ("INCORRECT CONVERSION FROM PARENT");
312 IF NOT EQUAL (PARENT (X), AGGR (C1, C2, C3, C4, C5, C6)) OR
313 NOT EQUAL (PARENT (CREATE (6, 9, 2, 3, C4, X)),
314 AGGR (C4, C5, C6, C7, C8, C9, C10, C11)) THEN
315 FAILED ("INCORRECT CONVERSION TO PARENT");
318 WHEN CONSTRAINT_ERROR =>
319 FAILED ("CONSTRAINT_ERROR WHEN PREPARING TO CONVERT " &
322 FAILED ("EXCEPTION WHEN PREPARING TO CONVERT " &
326 IF NOT (X IN T) OR AGGR (C1, C2, C3, C4) IN T THEN
327 FAILED ("INCORRECT ""IN""");
331 NOT (AGGR (C1, C2, C3, C4, C5, C6, C7, C8, C9) NOT IN T) THEN
332 FAILED ("INCORRECT ""NOT IN""");