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 -- FOR DERIVED ONE-DIMENSIONAL ARRAY TYPES WHOSE COMPONENT TYPE IS A
29 -- CHECK THAT ALL VALUES OF THE PARENT (BASE) TYPE ARE PRESENT
30 -- FOR THE DERIVED (BASE) TYPE WHEN THE DERIVED TYPE DEFINITION
33 -- CHECK THAT ANY CONSTRAINT IMPOSED ON THE PARENT SUBTYPE IS
34 -- ALSO IMPOSED ON THE DERIVED SUBTYPE.
37 -- JRK 08/19/87 CREATED ORIGINAL TEST.
38 -- VCL 07/01/88 ADDED EXCEPTION HANDLERS TO CATCH INCORRECT TYPE
39 -- CONVERSIONS TO DERIVED SUBTYPES.
41 WITH REPORT
; USE REPORT
;
47 TYPE LP
IS LIMITED PRIVATE;
49 FUNCTION CREATE
(X
: INTEGER) RETURN LP
;
51 FUNCTION VALUE
(X
: LP
) RETURN INTEGER;
53 FUNCTION EQUAL
(X
, Y
: LP
) RETURN BOOLEAN;
55 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
);
65 TYPE LP
IS NEW INTEGER;
67 C1
: CONSTANT LP
:= 1;
68 C2
: CONSTANT LP
:= 2;
69 C3
: CONSTANT LP
:= 3;
70 C4
: CONSTANT LP
:= 4;
71 C5
: CONSTANT LP
:= 5;
77 SUBTYPE COMPONENT
IS LP
;
81 FIRST
: CONSTANT := 0;
82 LAST
: CONSTANT := 100;
84 SUBTYPE INDEX
IS INTEGER RANGE FIRST
.. LAST
;
86 TYPE PARENT
IS ARRAY (INDEX
RANGE <>) OF COMPONENT
;
88 FUNCTION CREATE
( F
, L
: INDEX
;
90 DUMMY
: PARENT
-- TO RESOLVE OVERLOADING.
93 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN;
95 FUNCTION AGGR
(X
, Y
: COMPONENT
) RETURN PARENT
;
97 FUNCTION AGGR
(W
, X
, Y
, Z
: COMPONENT
) RETURN PARENT
;
103 TYPE T
IS NEW PARENT
(IDENT_INT
(5) .. IDENT_INT
(7));
105 SUBTYPE SUBPARENT
IS PARENT
(5 .. 7);
107 TYPE S
IS NEW SUBPARENT
;
112 PACKAGE BODY PKG_L
IS
114 FUNCTION CREATE
(X
: INTEGER) RETURN LP
IS
116 RETURN LP
(IDENT_INT
(X
));
119 FUNCTION VALUE
(X
: LP
) RETURN INTEGER IS
124 FUNCTION EQUAL
(X
, Y
: LP
) RETURN BOOLEAN IS
129 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
) IS
136 PACKAGE BODY PKG_P
IS
150 ASSIGN
(B
, CREATE
(VALUE
(B
) + 1));
155 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN IS
157 IF X
'LENGTH /= Y
'LENGTH THEN
159 ELSE FOR I
IN X
'RANGE LOOP
161 Y
(I
- X
'FIRST + Y
'FIRST)) THEN
169 FUNCTION AGGR
(X
, Y
: COMPONENT
) RETURN PARENT
IS
170 RESULT
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 1);
172 ASSIGN
(RESULT
(INDEX
'FIRST ), X
);
173 ASSIGN
(RESULT
(INDEX
'FIRST + 1), Y
);
177 FUNCTION AGGR
(W
, X
, Y
, Z
: COMPONENT
) RETURN PARENT
IS
178 RESULT
: PARENT
(INDEX
'FIRST .. INDEX
'FIRST + 3);
180 ASSIGN
(RESULT
(INDEX
'FIRST ), W
);
181 ASSIGN
(RESULT
(INDEX
'FIRST + 1), X
);
182 ASSIGN
(RESULT
(INDEX
'FIRST + 2), Y
);
183 ASSIGN
(RESULT
(INDEX
'FIRST + 3), Z
);
189 PROCEDURE ASSIGN
(X
: IN OUT T
; Y
: T
) IS
191 FOR I
IN X
'RANGE LOOP
192 ASSIGN
(X
(I
), Y
(I
));
196 PROCEDURE ASSIGN
(X
: IN OUT S
; Y
: S
) IS
198 FOR I
IN X
'RANGE LOOP
199 ASSIGN
(X
(I
), Y
(I
));
204 TEST
("C34005R", "CHECK THAT ALL VALUES OF THE PARENT (BASE) " &
205 "TYPE ARE PRESENT FOR THE DERIVED (BASE) TYPE " &
206 "WHEN THE DERIVED TYPE DEFINITION IS " &
207 "CONSTRAINED. ALSO CHECK THAT ANY CONSTRAINT " &
208 "IMPOSED ON THE PARENT SUBTYPE IS ALSO IMPOSED " &
209 "ON THE DERIVED SUBTYPE. CHECK FOR DERIVED " &
210 "ONE-DIMENSIONAL ARRAY TYPES WHOSE COMPONENT " &
211 "TYPE IS A LIMITED TYPE");
213 ASSIGN
(X
(IDENT_INT
(5)), CREATE
(2));
214 ASSIGN
(X
(IDENT_INT
(6)), CREATE
(3));
215 ASSIGN
(X
(IDENT_INT
(7)), CREATE
(4));
221 -- CHECK THAT BASE TYPE VALUES NOT IN THE SUBTYPE ARE PRESENT.
224 IF NOT EQUAL
(CREATE
(2, 3, C4
, X
), AGGR
(C4
, C5
)) THEN
225 FAILED
("CANNOT CREATE BASE TYPE VALUES OUTSIDE " &
230 FAILED
("EXCEPTION RAISED WHILE CHECKING BASE TYPE " &
231 "VALUES OUTSIDE OF THE SUBTYPE T");
235 IF NOT EQUAL
(CREATE
(2, 3, C4
, Y
), AGGR
(C4
, C5
)) THEN
236 FAILED
("CANNOT CREATE BASE TYPE VALUES OUTSIDE " &
241 FAILED
("EXCEPTION RAISED WHILE CHECKING BASE TYPE " &
242 "VALUES OUTSIDE OF THE SUBTYPE S");
246 IF NOT EQUAL
(X
(IDENT_INT
(6)..IDENT_INT
(7)),
248 FAILED
("INCORRECT SLICE OF X (VALUE)");
252 FAILED
("EXCEPTION RAISED WHILE CHECKING SLICE OF X");
256 IF NOT EQUAL
(AGGR
(C3
, C4
),
257 Y
(IDENT_INT
(6)..IDENT_INT
(7))) THEN
258 FAILED
("INCORRECT SLICE OF Y (VALUE)");
262 FAILED
("EXCEPTION RAISED WHILE CHECKING SLICE OF Y");
265 -- CHECK THE DERIVED SUBTYPE CONSTRAINT.
267 IF T
'FIRST /= 5 OR T
'LAST /= 7 OR
268 S
'FIRST /= 5 OR S
'LAST /= 7 THEN
269 FAILED
("INCORRECT 'FIRST OR 'LAST");
273 ASSIGN
(X
, CREATE
(5, 7, C1
, X
));
274 ASSIGN
(Y
, CREATE
(5, 7, C1
, Y
));
275 IF NOT EQUAL
(PARENT
(X
), PARENT
(Y
)) THEN -- USE X AND Y.
276 FAILED
("INCORRECT CONVERSION TO PARENT");
280 FAILED
("EXCEPTION RAISED BY OK ASSIGN CALL");
284 ASSIGN
(X
, AGGR
(C1
, C2
));
285 FAILED
("CONSTRAINT_ERROR NOT RAISED -- " &
286 "ASSIGN (X, AGGR (C1, C2))");
287 IF EQUAL
(X
, AGGR
(C1
, C2
)) THEN -- USE X.
288 COMMENT
("X ALTERED -- ASSIGN (X, AGGR (C1, C2))");
291 WHEN CONSTRAINT_ERROR
=>
294 FAILED
("WRONG EXCEPTION RAISED -- " &
295 "ASSIGN (X, AGGR (C1, C2))");
299 ASSIGN
(X
, AGGR
(C1
, C2
, C3
, C4
));
300 FAILED
("CONSTRAINT_ERROR NOT RAISED -- " &
301 "ASSIGN (X, AGGR (C1, C2, C3, C4))");
302 IF EQUAL
(X
, AGGR
(C1
, C2
, C3
, C4
)) THEN -- USE X.
303 COMMENT
("X ALTERED -- " &
304 "ASSIGN (X, AGGR (C1, C2, C3, C4))");
307 WHEN CONSTRAINT_ERROR
=>
310 FAILED
("WRONG EXCEPTION RAISED -- " &
311 "ASSIGN (X, AGGR (C1, C2, C3, C4))");
315 ASSIGN
(Y
, AGGR
(C1
, C2
));
316 FAILED
("CONSTRAINT_ERROR NOT RAISED -- " &
317 "ASSIGN (Y, AGGR (C1, C2))");
318 IF EQUAL
(Y
, AGGR
(C1
, C2
)) THEN -- USE Y.
319 COMMENT
("Y ALTERED -- ASSIGN (Y, AGGR (C1, C2))");
322 WHEN CONSTRAINT_ERROR
=>
325 FAILED
("WRONG EXCEPTION RAISED -- " &
326 "ASSIGN (Y, AGGR (C1, C2))");
330 ASSIGN
(Y
, AGGR
(C1
, C2
, C3
, C4
));
331 FAILED
("CONSTRAINT_ERROR NOT RAISED -- " &
332 "ASSIGN (Y, AGGR (C1, C2, C3, C4))");
333 IF EQUAL
(Y
, AGGR
(C1
, C2
, C3
, C4
)) THEN -- USE Y.
334 COMMENT
("Y ALTERED -- " &
335 "ASSIGN (Y, AGGR (C1, C2, C3, C4))");
338 WHEN CONSTRAINT_ERROR
=>
341 FAILED
("WRONG EXCEPTION RAISED -- " &
342 "ASSIGN (Y, AGGR (C1, C2, C3, C4))");