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 CONSTRAINT_ERROR IS RAISED IF A VALUE FOR A
27 -- NON-DISCRIMINANT SCALAR COMPONENT OF AN AGGREGATE IS NOT
28 -- WITHIN THE RANGE OF THE COMPONENT'S SUBTYPE.
31 -- BCB 01/22/88 CREATED ORIGINAL TEST.
32 -- RJW 06/27/90 CORRECTED CONSTRAINTS OF TYPE DFIX.
33 -- LDC 09/25/90 ADDED A BLOCK IN THE EXCEPTION HANDLER SO IT CAN
34 -- NOT OPTIMIZE IT AWAY, ALSO INITIALIZED EACH
35 -- OBJECT TO VALID DATA BEFORE DOING THE INVALID,
36 -- MADE 'IDENT_XXX' FUNCTIONS SO THE COMPILER CAN
37 -- NOT JUST EVALUATE THE ASSIGNMENT AND PUT IN CODE
38 -- FOR A CONSTRAINT ERROR IN IS PLACE.
39 -- JRL 06/07/96 Changed value in aggregate in subtest 4 to value
40 -- guaranteed to be in the base range of the type FIX.
43 WITH REPORT
; USE REPORT
;
47 TYPE INT
IS RANGE 1 .. 8;
48 SUBTYPE SINT
IS INT
RANGE 2 .. 7;
50 TYPE ENUM
IS (VINCE
, JOHN
, TOM
, PHIL
, ROSA
, JODIE
, BRIAN
, DAVE
);
51 SUBTYPE SENUM
IS ENUM
RANGE JOHN
.. BRIAN
;
53 TYPE FL
IS DIGITS 5 RANGE 0.0 .. 10.0;
54 SUBTYPE SFL
IS FL
RANGE 1.0 .. 9.0;
56 TYPE FIX
IS DELTA 0.25 RANGE 0.0 .. 8.0;
57 SUBTYPE SFIX
IS FIX
RANGE 1.0 .. 7.0;
59 TYPE DINT
IS NEW INTEGER RANGE 1 .. 8;
60 SUBTYPE SDINT
IS DINT
RANGE 2 .. 7;
62 TYPE DENUM
IS NEW ENUM
RANGE VINCE
.. DAVE
;
63 SUBTYPE SDENUM
IS DENUM
RANGE JOHN
.. BRIAN
;
65 TYPE DFL
IS NEW FLOAT RANGE 0.0 .. 10.0;
66 SUBTYPE SDFL
IS DFL
RANGE 1.0 .. 9.0;
68 TYPE DFIX
IS NEW FIX
RANGE 0.5 .. 7.5;
69 SUBTYPE SDFIX
IS DFIX
RANGE 1.0 .. 7.0;
72 E1
, E2
, E3
, E4
, E5
: SENUM
;
76 E1
, E2
, E3
, E4
, E5
: SFIX
;
80 E1
, E2
, E3
, E4
, E5
: SDENUM
;
84 E1
, E2
, E3
, E4
, E5
: SDFIX
;
87 ARRAY_OBJ
: ARRAY(1..2) OF INTEGER;
89 A
: ARRAY(1..5) OF SINT
;
91 C
: ARRAY(1..5) OF SFL
;
93 E
: ARRAY(1..5) OF SDINT
;
95 G
: ARRAY(1..5) OF SDFL
;
99 TYPE GENERAL_PURPOSE
IS PRIVATE;
100 FUNCTION GENEQUAL
(ONE
, TWO
: GENERAL_PURPOSE
) RETURN BOOLEAN;
102 FUNCTION GENEQUAL
(ONE
, TWO
: GENERAL_PURPOSE
) RETURN BOOLEAN IS
111 FUNCTION EQUAL
IS NEW GENEQUAL
(SENUM
);
112 FUNCTION EQUAL
IS NEW GENEQUAL
(SFL
);
113 FUNCTION EQUAL
IS NEW GENEQUAL
(SFIX
);
114 FUNCTION EQUAL
IS NEW GENEQUAL
(SDENUM
);
115 FUNCTION EQUAL
IS NEW GENEQUAL
(SDFL
);
116 FUNCTION EQUAL
IS NEW GENEQUAL
(SDFIX
);
119 TYPE GENERAL_PURPOSE
IS PRIVATE;
120 WITH FUNCTION EQUAL_GENERAL
(ONE
, TWO
: GENERAL_PURPOSE
)
122 FUNCTION GEN_IDENT
(X
: GENERAL_PURPOSE
) RETURN GENERAL_PURPOSE
;
123 FUNCTION GEN_IDENT
(X
: GENERAL_PURPOSE
) RETURN GENERAL_PURPOSE
IS
125 IF EQUAL_GENERAL
(X
, X
) THEN -- ALWAYS EQUAL.
126 RETURN X
; -- ALWAYS EXECUTED.
132 FUNCTION IDENT_FL
IS NEW GEN_IDENT
(FL
, EQUAL
);
133 FUNCTION IDENT_FIX
IS NEW GEN_IDENT
(FIX
, EQUAL
);
134 FUNCTION IDENT_DFL
IS NEW GEN_IDENT
(DFL
, EQUAL
);
135 FUNCTION IDENT_DFIX
IS NEW GEN_IDENT
(DFIX
, EQUAL
);
138 TEST
("C43004A", "CHECK THAT CONSTRAINT_ERROR IS RAISED IF A " &
139 "VALUE FOR A NON-DISCRIMINANT SCALAR COMPONENT " &
140 "OF AN AGGREGATE IS NOT WITHIN THE RANGE OF " &
141 "THE COMPONENT'S SUBTYPE");
146 A
:= (2,3,4,5,6); -- OK
148 IF EQUAL
(INTEGER (A
(IDENT_INT
(1))),
149 INTEGER (A
(IDENT_INT
(2)))) THEN
150 COMMENT
("DON'T OPTIMIZE A");
153 A
:= (SINT
(IDENT_INT
(1)),2,3,4,7);
154 -- CONSTRAINT_ERROR BY AGGREGATE
155 -- WITH INTEGER COMPONENTS.
156 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 1");
157 IF EQUAL
(INTEGER (A
(IDENT_INT
(1))),
158 INTEGER (A
(IDENT_INT
(1)))) THEN
159 COMMENT
("DON'T OPTIMIZE A");
162 WHEN CONSTRAINT_ERROR
=>
163 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
164 ARRAY_OBJ
(IDENT_INT
(2))) THEN
165 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
168 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
173 B
:= (JOHN
,TOM
,PHIL
,ROSA
,JOHN
); -- OK
175 IF EQUAL
(B
.E1
, B
.E2
) THEN
176 COMMENT
("DON'T OPTIMIZE B");
179 B
:= (ENUM
'VAL(IDENT_INT
(ENUM
'POS(DAVE
))), TOM
, PHIL
,
181 -- CONSTRAINT_ERROR BY AGGREGATE
182 -- WITH COMPONENTS OF AN
184 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 2");
185 IF NOT EQUAL
(B
.E1
, B
.E1
) THEN
186 COMMENT
("DON'T OPTIMIZE B");
189 WHEN CONSTRAINT_ERROR
=>
190 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
191 ARRAY_OBJ
(IDENT_INT
(2))) THEN
192 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
195 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
199 C
:= (2.0,3.0,4.0,5.0,6.0); -- OK
200 IF EQUAL
(C
(IDENT_INT
(1)), C
(IDENT_INT
(2))) THEN
201 COMMENT
("DON'T OPTIMIZE C");
204 C
:= (IDENT_FL
(1.0),2.0,3.0,4.0,IDENT_FL
(10.0));
205 -- CONSTRAINT_ERROR BY AGGREGATE
206 -- WITH FLOATING POINT COMPONENTS.
207 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 3");
208 IF NOT EQUAL
(C
(IDENT_INT
(1)), C
(IDENT_INT
(1))) THEN
209 COMMENT
("DON'T OPTIMIZE C");
212 WHEN CONSTRAINT_ERROR
=>
213 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
214 ARRAY_OBJ
(IDENT_INT
(2))) THEN
215 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
218 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
223 D
:= (2.2,3.3,4.4,5.5,6.6); -- OK
224 IF EQUAL
(D
.E1
, D
.E5
) THEN
225 COMMENT
("DON'T OPTIMIZE D");
228 D
:= (IDENT_FIX
(1.0),2.1,3.3,4.4,IDENT_FIX
(7.75));
229 -- CONSTRAINT_ERROR BY AGGREGATE
230 -- WITH FIXED POINT COMPONENTS.
231 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 4");
232 IF NOT EQUAL
(D
.E5
, D
.E5
) THEN
233 COMMENT
("DON'T OPTIMIZE D");
236 WHEN CONSTRAINT_ERROR
=>
237 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
238 ARRAY_OBJ
(IDENT_INT
(2))) THEN
239 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
242 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
247 E
:= (2,3,4,5,6); -- OK
248 IF EQUAL
(INTEGER (E
(IDENT_INT
(1))),
249 INTEGER (E
(IDENT_INT
(2)))) THEN
250 COMMENT
("DON'T OPTIMIZE E");
253 E
:= (SDINT
(IDENT_INT
(1)),2,3,4,7);
254 -- CONSTRAINT_ERROR BY AGGREGATE
255 -- WITH DERIVED INTEGER COMPONENTS.
256 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 5");
257 IF NOT EQUAL
(INTEGER (E
(IDENT_INT
(1))),
258 INTEGER (E
(IDENT_INT
(1)))) THEN
259 COMMENT
("DON'T OPTIMIZE E");
262 WHEN CONSTRAINT_ERROR
=>
263 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
264 ARRAY_OBJ
(IDENT_INT
(2))) THEN
265 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
268 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
273 F
:= (JOHN
,TOM
,PHIL
,ROSA
,JOHN
); -- OK
274 IF EQUAL
(F
.E1
, F
.E2
) THEN
275 COMMENT
("DON'T OPTIMIZE F");
278 F
:= (DENUM
'VAL(IDENT_INT
(DENUM
'POS(VINCE
))), TOM
, PHIL
,
280 -- CONSTRAINT_ERROR BY AGGREGATE
281 -- WITH COMPONENTS OF A DERIVED
283 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 6");
284 IF NOT EQUAL
(F
.E1
, F
.E1
) THEN
285 COMMENT
("DON'T OPTIMIZE F");
288 WHEN CONSTRAINT_ERROR
=>
289 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
290 ARRAY_OBJ
(IDENT_INT
(2))) THEN
291 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
294 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
299 G
:= (2.0,3.0,4.0,5.0,6.0); -- OK
300 IF EQUAL
(G
(IDENT_INT
(1)), G
(IDENT_INT
(2))) THEN
301 COMMENT
("DON'T OPTIMIZE G");
304 G
:= (IDENT_DFL
(1.0),2.0,3.0,4.0,IDENT_DFL
(10.0));
305 -- CONSTRAINT_ERROR BY AGGREGATE
306 -- WITH DERIVED FLOATING POINT
308 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 7");
309 IF NOT EQUAL
(G
(IDENT_INT
(1)), G
(IDENT_INT
(1))) THEN
310 COMMENT
("DON'T OPTIMIZE G");
313 WHEN CONSTRAINT_ERROR
=>
314 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
315 ARRAY_OBJ
(IDENT_INT
(2))) THEN
316 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
319 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &
324 H
:= (2.2,3.3,4.4,5.5,6.6); -- OK
325 IF EQUAL
(H
.E1
, H
.E2
) THEN
326 COMMENT
("DON'T OPTIMIZE H");
329 H
:= (IDENT_DFIX
(2.0),2.5,3.5,4.3,IDENT_DFIX
(7.4));
330 -- CONSTRAINT_ERROR BY AGGREGATE
331 -- WITH DERIVED FIXED POINT
333 FAILED
("CONSTRAINT_ERROR WAS NOT RAISED - 8");
334 IF EQUAL
(H
.E1
, H
.E5
) THEN
335 COMMENT
("DON'T OPTIMIZE H");
338 WHEN CONSTRAINT_ERROR
=>
339 IF EQUAL
(ARRAY_OBJ
(IDENT_INT
(1)),
340 ARRAY_OBJ
(IDENT_INT
(2))) THEN
341 COMMENT
("DON'T OPTIMIZE EXCEPTION HANDLER");
344 FAILED
("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &