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.
25 -- CHECK THAT ENUMERATION, RECORD, ACCESS, PRIVATE, AND TASK VALUES CAN
26 -- BE CONVERTED IF THE OPERAND AND TARGET TYPES ARE RELATED BY
31 WITH REPORT
; USE REPORT
;
35 TEST
( "C46051A", "CHECK THAT ENUMERATION, RECORD, ACCESS, " &
36 "PRIVATE, AND TASK VALUES CAN BE CONVERTED " &
37 "IF THE OPERAND AND TARGET TYPES ARE " &
38 "RELATED BY DERIVATION" );
41 TYPE ENUM
IS (A
, AB
, ABC
, ABCD
);
44 TYPE ENUM1
IS NEW ENUM
;
45 E1
: ENUM1
:= ENUM1
'VAL (IDENT_INT
(2));
47 TYPE ENUM2
IS NEW ENUM
;
50 TYPE NENUM1
IS NEW ENUM1
;
51 NE
: NENUM1
:= NENUM1
'VAL (IDENT_INT
(2));
54 FAILED
( "INCORRECT CONVERSION OF 'ENUM (E)'" );
57 IF ENUM
(E1
) /= E
THEN
58 FAILED
( "INCORRECT CONVERSION OF 'ENUM (E1)'" );
61 IF ENUM1
(E2
) /= E1
THEN
62 FAILED
( "INCORRECT CONVERSION OF 'ENUM1 (E2)'" );
65 IF ENUM2
(NE
) /= E2
THEN
66 FAILED
( "INCORRECT CONVERSION OF 'ENUM2 (NE)'" );
69 IF NENUM1
(E
) /= NE
THEN
70 FAILED
( "INCORRECT CONVERSION OF 'NENUM (E)'" );
74 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
75 "ENUMERATION TYPES" );
92 TYPE NREC1
IS NEW REC1
;
96 FAILED
( "INCORRECT CONVERSION OF 'REC (R)'" );
100 FAILED
( "INCORRECT CONVERSION OF 'REC (R1)'" );
103 IF REC1
(R2
) /= R1
THEN
104 FAILED
( "INCORRECT CONVERSION OF 'REC1 (R2)'" );
107 IF REC2
(NR
) /= R2
THEN
108 FAILED
( "INCORRECT CONVERSION OF 'REC2 (NR)'" );
111 IF NREC1
(R
) /= NR
THEN
112 FAILED
( "INCORRECT CONVERSION OF 'NREC (R)'" );
116 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
121 TYPE REC
(D
: INTEGER) IS
126 SUBTYPE CREC
IS REC
(3);
129 TYPE CREC1
IS NEW REC
(3);
132 TYPE CREC2
IS NEW REC
(3);
135 TYPE NCREC1
IS NEW CREC1
;
138 IF CREC
(R
) /= R
THEN
139 FAILED
( "INCORRECT CONVERSION OF 'CREC (R)'" );
142 IF CREC
(R1
) /= R
THEN
143 FAILED
( "INCORRECT CONVERSION OF 'CREC (R1)'" );
146 IF CREC1
(R2
) /= R1
THEN
147 FAILED
( "INCORRECT CONVERSION OF 'CREC1 (R2)'" );
150 IF CREC2
(NR
) /= R2
THEN
151 FAILED
( "INCORRECT CONVERSION OF 'CREC2 (NR)'" );
154 IF NCREC1
(R
) /= NR
THEN
155 FAILED
( "INCORRECT CONVERSION OF 'NCREC (R)'" );
159 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
160 "RECORD TYPES WITH DISCRIMINANTS" );
169 TYPE ACCREC
IS ACCESS REC
;
172 TYPE ACCREC1
IS NEW ACCREC
;
175 TYPE ACCREC2
IS NEW ACCREC
;
178 TYPE NACCREC1
IS NEW ACCREC1
;
181 FUNCTION F
(A
: ACCREC
) RETURN INTEGER IS
183 RETURN IDENT_INT
(0);
186 FUNCTION F
(A
: ACCREC1
) RETURN INTEGER IS
188 RETURN IDENT_INT
(1);
191 FUNCTION F
(A
: ACCREC2
) RETURN INTEGER IS
193 RETURN IDENT_INT
(2);
196 FUNCTION F
(A
: NACCREC1
) RETURN INTEGER IS
198 RETURN IDENT_INT
(3);
202 IF F
(ACCREC
(AR
)) /= 0 THEN
203 FAILED
( "INCORRECT CONVERSION OF 'ACCREC (AR)'" );
206 IF F
(ACCREC
(AR1
)) /= 0 THEN
207 FAILED
( "INCORRECT CONVERSION OF 'ACCREC (AR1)'" );
210 IF F
(ACCREC1
(AR2
)) /= 1 THEN
211 FAILED
( "INCORRECT CONVERSION OF 'ACCREC1 (AR2)'" );
214 IF F
(ACCREC2
(NAR
)) /= 2 THEN
215 FAILED
( "INCORRECT CONVERSION OF 'ACCREC2 (NAR)'" );
218 IF F
(NACCREC1
(AR
)) /= 3 THEN
219 FAILED
( "INCORRECT CONVERSION OF 'NACCREC (AR)'" );
223 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
228 TYPE REC
(D
: INTEGER) IS
233 TYPE ACCR
IS ACCESS REC
;
235 SUBTYPE CACCR
IS ACCR
(3);
238 TYPE CACCR1
IS NEW ACCR
(3);
241 TYPE CACCR2
IS NEW ACCR
(3);
244 TYPE NCACCR1
IS NEW CACCR1
;
247 FUNCTION F
(A
: CACCR
) RETURN INTEGER IS
249 RETURN IDENT_INT
(0);
252 FUNCTION F
(A
: CACCR1
) RETURN INTEGER IS
254 RETURN IDENT_INT
(1);
257 FUNCTION F
(A
: CACCR2
) RETURN INTEGER IS
259 RETURN IDENT_INT
(2);
262 FUNCTION F
(A
: NCACCR1
) RETURN INTEGER IS
264 RETURN IDENT_INT
(3);
268 IF F
(CACCR
(AR
)) /= 0 THEN
269 FAILED
( "INCORRECT CONVERSION OF 'CACCR (AR)'" );
272 IF F
(CACCR
(AR1
)) /= 0 THEN
273 FAILED
( "INCORRECT CONVERSION OF 'CACCR (AR1)'" );
276 IF F
(CACCR1
(AR2
)) /= 1 THEN
277 FAILED
( "INCORRECT CONVERSION OF 'CACCR1 (AR2)'" );
280 IF F
(CACCR2
(NAR
)) /= 2 THEN
281 FAILED
( "INCORRECT CONVERSION OF 'CACCR2 (NAR)'" );
284 IF F
(NCACCR1
(AR
)) /= 3 THEN
285 FAILED
( "INCORRECT CONVERSION OF 'NCACCR (AR)'" );
289 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
290 "CONSTRAINED ACCESS TYPES" );
295 TYPE PRIV
IS PRIVATE;
308 TYPE PRIV1
IS NEW PRIV
;
311 TYPE PRIV2
IS NEW PRIV
;
318 TYPE NPRIV1
IS NEW PRIV1
;
324 IF PRIV
(R
) /= R
THEN
325 FAILED
( "INCORRECT CONVERSION OF 'PRIV (R)'" );
328 IF PRIV
(R1
) /= R
THEN
329 FAILED
( "INCORRECT CONVERSION OF 'PRIV (R1)'" );
332 IF PRIV1
(R2
) /= R1
THEN
333 FAILED
( "INCORRECT CONVERSION OF 'PRIV1 (R2)'" );
336 IF PRIV2
(NR
) /= R2
THEN
337 FAILED
( "INCORRECT CONVERSION OF 'PRIV2 (NR)'" );
340 IF NPRIV1
(R
) /= NR
THEN
341 FAILED
( "INCORRECT CONVERSION OF 'NPRIV (R)'" );
345 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &
359 TYPE NTK1
IS NEW TK1
;
367 FUNCTION F
(T
: TK
) RETURN INTEGER IS
369 RETURN IDENT_INT
(0);
372 FUNCTION F
(T
: TK1
) RETURN INTEGER IS
374 RETURN IDENT_INT
(1);
377 FUNCTION F
(T
: TK2
) RETURN INTEGER IS
379 RETURN IDENT_INT
(2);
382 FUNCTION F
(T
: NTK1
) RETURN INTEGER IS
384 RETURN IDENT_INT
(3);
388 IF F
(TK
(T
)) /= 0 THEN
389 FAILED
( "INCORRECT CONVERSION OF 'TK (T))'" );
392 IF F
(TK
(T1
)) /= 0 THEN
393 FAILED
( "INCORRECT CONVERSION OF 'TK (T1))'" );
396 IF F
(TK1
(T2
)) /= 1 THEN
397 FAILED
( "INCORRECT CONVERSION OF 'TK1 (T2))'" );
400 IF F
(TK2
(NT
)) /= 2 THEN
401 FAILED
( "INCORRECT CONVERSION OF 'TK2 (NT))'" );
404 IF F
(NTK1
(T
)) /= 3 THEN
405 FAILED
( "INCORRECT CONVERSION OF 'NTK (T))'" );
409 FAILED
( "EXCEPTION RAISED DURING CONVERSION OF " &