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 -- A DISCRIMINANT CONSTRAINT
27 -- DEPENDS ON A DISCRIMINANT, THE DISCRIMINANT VALUE IS CHECKED FOR
28 -- COMPATIBILITY WHEN THE RECORD TYPE IS:
30 -- CASE D: USED WITHOUT A CONSTRAINT ONLY IN AN ALLOCATOR OR OBJECT
31 -- DECLARATION AND THE COMPONENT IS PRESENT IN THE DEFAULT SUBTYPE.
34 -- PWN 05/31/96 Corrected format of call to "TEST"
36 WITH REPORT
; USE REPORT
;
39 SUBTYPE SM
IS INTEGER RANGE 1..10;
41 TYPE REC
(D1
, D2
: SM
) IS
42 RECORD NULL; END RECORD;
45 TEST
("C37215F", "CHECK EVALUATION OF DISCRIMINANT EXPRESSIONS " &
46 "WHEN CONSTRAINT DEPENDS ON DISCRIMINANT, " &
47 "DISCRIMINANTS HAVE DEFAULTS, AND COMPONENT " &
48 "SUBTYPE DETERMINES WHETHER CONSTRAINT SHOULD " &
51 -- CASE D1: COMPONENT IS PRESENT
54 TYPE CONS
(D3
: INTEGER := IDENT_INT
(0)) IS
60 C2
: INTEGER := IDENT_INT
(0);
68 FAILED
("DISCRIMINANT CHECK NOT PERFORMED - 1");
69 IF X
/= (1, (1, 1)) THEN
70 COMMENT
("SHOULDN'T GET HERE");
74 WHEN CONSTRAINT_ERROR
=>
77 FAILED
("UNEXPECTED EXCEPTION - 1");
82 TYPE ACC_CONS
IS ACCESS CONS
;
86 FAILED
("DISCRIMINANT CHECK NOT PERFORMED - 2");
87 IF X
.ALL /= (1, (1, 1)) THEN
88 COMMENT
("IRRELEVANT");
91 WHEN CONSTRAINT_ERROR
=>
94 FAILED
("UNEXPECTED EXCEPTION RAISED - 2A");
98 FAILED
("UNEXPECTED EXCEPTION RAISED - 2B");
103 SUBTYPE SCONS
IS CONS
;
108 FAILED
("DISCRIMINANT CHECK NOT " &
110 IF X
/= (1, (1, 1)) THEN
111 COMMENT
("IRRELEVANT");
115 WHEN CONSTRAINT_ERROR
=>
118 FAILED
("UNEXPECTED EXCEPTION RAISED - 3");
122 FAILED
("CONSTRAINT CHECKED TOO SOON - 3");
127 TYPE ARR
IS ARRAY (1..5) OF CONS
;
132 FAILED
("DISCRIMINANT CHECK NOT " &
134 IF X
/= (1..5 => (1, (1, 1))) THEN
135 COMMENT
("IRRELEVANT");
139 WHEN CONSTRAINT_ERROR
=>
142 FAILED
("UNEXPECTED EXCEPTION RAISED - 4");
146 FAILED
("CONSTRAINT CHECKED TOO SOON - 4");
159 FAILED
("DISCRIMINANT CHECK NOT " &
161 IF X
/= (C1
=> (1, (1, 1))) THEN
162 COMMENT
("IRRELEVANT");
166 WHEN CONSTRAINT_ERROR
=>
169 FAILED
("UNEXPECTED EXCEPTION RAISED - 5");
173 FAILED
("CONSTRAINT CHECKED TOO SOON - 5");
178 TYPE DREC
IS NEW CONS
;
183 FAILED
("DISCRIMINANT CHECK NOT " &
185 IF X
/= (1, (1, 1)) THEN
186 COMMENT
("IRRELEVANT");
190 WHEN CONSTRAINT_ERROR
=>
193 FAILED
("UNEXPECTED EXCEPTION RAISED - 6");
197 FAILED
("CONSTRAINT CHECKED TOO SOON - 6");
202 -- CASE C2 : COMPONENT IS ABSENT
205 TYPE CONS
(D3
: INTEGER := IDENT_INT
(11)) IS
209 C1
: REC
(D3
, IDENT_INT
(1));
211 C2
: INTEGER := IDENT_INT
(5);
220 FAILED
("WRONG VALUE FOR X - 11");
225 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 11");
230 SUBTYPE SCONS
IS CONS
;
236 FAILED
("X VALUE WRONG - 12");
242 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 12");
247 TYPE ARR
IS ARRAY (1..5) OF CONS
;
250 IF X
/= (1..5 => (11, 5)) THEN
251 FAILED
("X VALUE INCORRECT - 13");
256 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 13");
267 IF X
/= (C1
=> (11, 5)) THEN
268 FAILED
("X VALUE IS INCORRECT - 14");
273 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 14");
278 TYPE NREC
IS NEW CONS
;
282 FAILED
("X VALUE INCORRECT - 15");
287 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 15");
292 TYPE ACC_CONS
IS ACCESS CONS
;
293 X
: ACC_CONS
:= NEW CONS
;
295 IF X
.ALL /= (11, 5) THEN
296 FAILED
("X VALUE INCORRECT - 17");
301 FAILED
("NONEXISTENT CONSTRAINT CHECKED - 17");
310 FAILED
("CONSTRAINT CHECK DONE TOO EARLY");