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 RECORD TYPES WITH DISCRIMINANTS AND WITH
28 -- A LIMITED COMPONENT TYPE.
31 -- JRK 08/25/87 CREATED ORIGINAL TEST.
32 -- VCL 06/28/88 MODIFIED THE STATEMENTS INVOLVING THE 'SIZE
33 -- ATTRIBUTE TO REMOVE ANY ASSUMPTIONS ABOUT THE
35 -- PWN 11/30/94 REMOVED 'BASE USE ILLEGAL IN ADA 9X.
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 EQUAL
(X
, Y
: LP
) RETURN BOOLEAN;
50 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
);
57 TYPE LP
IS NEW INTEGER;
59 C4
: CONSTANT LP
:= 4;
60 C5
: CONSTANT LP
:= 5;
66 SUBTYPE COMPONENT
IS LP
;
70 MAX_LEN
: CONSTANT := 10;
72 SUBTYPE LENGTH
IS NATURAL RANGE 0 .. MAX_LEN
;
74 TYPE PARENT
(B
: BOOLEAN := TRUE; L
: LENGTH
:= 3) IS
79 S
: STRING (1 .. L
) := (1 .. L
=> 'A');
86 FUNCTION CREATE
( B
: BOOLEAN;
92 X
: PARENT
-- TO RESOLVE OVERLOADING.
95 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN;
97 FUNCTION AGGR
( B
: BOOLEAN;
104 FUNCTION AGGR
( B
: BOOLEAN;
114 TYPE T
IS NEW PARENT
(IDENT_BOOL
(TRUE), IDENT_INT
(3));
118 B
: BOOLEAN := FALSE;
120 PROCEDURE A
(X
: ADDRESS
) IS
122 B
:= IDENT_BOOL
(TRUE);
125 PACKAGE BODY PKG_L
IS
127 FUNCTION CREATE
(X
: INTEGER) RETURN LP
IS
129 RETURN LP
(IDENT_INT
(X
));
132 FUNCTION EQUAL
(X
, Y
: LP
) RETURN BOOLEAN IS
137 PROCEDURE ASSIGN
(X
: OUT LP
; Y
: LP
) IS
144 PACKAGE BODY PKG_P
IS
169 FUNCTION EQUAL
(X
, Y
: PARENT
) RETURN BOOLEAN IS
171 IF X
.B
/= Y
.B
OR X
.L
/= Y
.L
OR X
.I
/= Y
.I
THEN
176 RETURN X
.S
= Y
.S
AND EQUAL
(X
.C
, Y
.C
);
190 RESULT
: PARENT
(B
, L
);
194 ASSIGN
(RESULT
.C
, C
);
205 RESULT
: PARENT
(B
, L
);
215 TEST
("C34006J", "CHECK THAT THE REQUIRED PREDEFINED OPERATIONS " &
216 "ARE DECLARED (IMPLICITLY) FOR DERIVED " &
217 "RECORD TYPES WITH DISCRIMINANTS AND WITH A " &
218 "LIMITED COMPONENT TYPE");
220 X
.I
:= IDENT_INT
(1);
221 X
.S
:= IDENT_STR
("ABC");
222 ASSIGN
(X
.C
, CREATE
(4));
224 W
.I
:= IDENT_INT
(1);
225 W
.S
:= IDENT_STR
("ABC");
226 ASSIGN
(W
.C
, CREATE
(4));
228 IF NOT EQUAL
(T
'(X), AGGR (TRUE, 3, 1, "ABC", C4)) THEN
229 FAILED ("INCORRECT QUALIFICATION");
232 IF NOT EQUAL (T(X), AGGR (TRUE, 3, 1, "ABC", C4)) THEN
233 FAILED ("INCORRECT SELF CONVERSION");
236 IF NOT EQUAL (T(W), AGGR (TRUE, 3, 1, "ABC", C4)) THEN
237 FAILED ("INCORRECT CONVERSION FROM PARENT");
240 IF NOT EQUAL (PARENT(X), AGGR (TRUE, 3, 1, "ABC", C4)) OR
241 NOT EQUAL (PARENT(CREATE (FALSE, 2, 3, "XX", C5, 6.0, X)),
242 AGGR (FALSE, 2, 3, 6.0)) THEN
243 FAILED ("INCORRECT CONVERSION TO PARENT");
246 IF X.B /= TRUE OR X.L /= 3 OR
247 CREATE (FALSE, 2, 3, "XX", C5, 6.0, X).B /= FALSE OR
248 CREATE (FALSE, 2, 3, "XX", C5, 6.0, X).L /= 2 THEN
249 FAILED ("INCORRECT SELECTION (DISCRIMINANT)");
252 IF X.I /= 1 OR X.S /= "ABC" OR NOT EQUAL (X.C, C4) OR
253 CREATE (FALSE, 2, 3, "XX", C5, 6.0, X).I /= 3 OR
254 CREATE (FALSE, 2, 3, "XX", C5, 6.0, X).F /= 6.0 THEN
255 FAILED ("INCORRECT SELECTION (VALUE)");
258 X.I := IDENT_INT (7);
259 X.S := IDENT_STR ("XYZ");
260 IF NOT EQUAL (X, AGGR (TRUE, 3, 7, "XYZ", C4)) THEN
261 FAILED ("INCORRECT SELECTION (ASSIGNMENT)");
264 X.I := IDENT_INT (1);
265 X.S := IDENT_STR ("ABC");
266 IF NOT (X IN T) OR AGGR (FALSE, 2, 3, 6.0) IN T THEN
267 FAILED ("INCORRECT ""IN""");
270 IF X NOT IN T OR NOT (AGGR (FALSE, 2, 3, 6.0) NOT IN T) THEN
271 FAILED ("INCORRECT ""NOT IN""");
277 FAILED ("INCORRECT 'ADDRESS
");
280 IF NOT X'CONSTRAINED THEN
281 FAILED ("INCORRECT
'CONSTRAINED");
284 IF X.C'FIRST_BIT < 0 THEN
285 FAILED ("INCORRECT 'FIRST_BIT
");
288 IF X.C'LAST_BIT < 0 OR
289 X.C'LAST_BIT - X.C'FIRST_BIT + 1 /= X.C'SIZE THEN
290 FAILED ("INCORRECT
'LAST_BIT");
293 IF X.C'POSITION < 0 THEN
294 FAILED ("INCORRECT 'POSITION
");
297 IF X'SIZE < T'SIZE THEN
298 COMMENT ("X
'SIZE < T
'SIZE");
299 ELSIF X'SIZE = T'SIZE THEN
300 COMMENT ("X
'SIZE = T
'SIZE");
302 COMMENT ("X
'SIZE > T
'SIZE");
308 FAILED ("UNEXPECTED
EXCEPTION RAISED
WHILE CHECKING BASIC
" &