blob: 9468e8f76d4582c3dac0088f4aceae054258ab09 [file] [log] [blame]
-- C46051A.ADA
-- Grant of Unlimited Rights
--
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
-- unlimited rights in the software and documentation contained herein.
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
-- this public release, the Government intends to confer upon all
-- recipients unlimited rights equal to those held by the Government.
-- These rights include rights to use, duplicate, release or disclose the
-- released technical data and computer software in whole or in part, in
-- any manner and for any purpose whatsoever, and to have or permit others
-- to do so.
--
-- DISCLAIMER
--
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
-- PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- CHECK THAT ENUMERATION, RECORD, ACCESS, PRIVATE, AND TASK VALUES CAN
-- BE CONVERTED IF THE OPERAND AND TARGET TYPES ARE RELATED BY
-- DERIVATION.
-- R.WILLIAMS 9/8/86
WITH REPORT; USE REPORT;
PROCEDURE C46051A IS
BEGIN
TEST ( "C46051A", "CHECK THAT ENUMERATION, RECORD, ACCESS, " &
"PRIVATE, AND TASK VALUES CAN BE CONVERTED " &
"IF THE OPERAND AND TARGET TYPES ARE " &
"RELATED BY DERIVATION" );
DECLARE
TYPE ENUM IS (A, AB, ABC, ABCD);
E : ENUM := ABC;
TYPE ENUM1 IS NEW ENUM;
E1 : ENUM1 := ENUM1'VAL (IDENT_INT (2));
TYPE ENUM2 IS NEW ENUM;
E2 : ENUM2 := ABC;
TYPE NENUM1 IS NEW ENUM1;
NE : NENUM1 := NENUM1'VAL (IDENT_INT (2));
BEGIN
IF ENUM (E) /= E THEN
FAILED ( "INCORRECT CONVERSION OF 'ENUM (E)'" );
END IF;
IF ENUM (E1) /= E THEN
FAILED ( "INCORRECT CONVERSION OF 'ENUM (E1)'" );
END IF;
IF ENUM1 (E2) /= E1 THEN
FAILED ( "INCORRECT CONVERSION OF 'ENUM1 (E2)'" );
END IF;
IF ENUM2 (NE) /= E2 THEN
FAILED ( "INCORRECT CONVERSION OF 'ENUM2 (NE)'" );
END IF;
IF NENUM1 (E) /= NE THEN
FAILED ( "INCORRECT CONVERSION OF 'NENUM (E)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"ENUMERATION TYPES" );
END;
DECLARE
TYPE REC IS
RECORD
NULL;
END RECORD;
R : REC;
TYPE REC1 IS NEW REC;
R1 : REC1;
TYPE REC2 IS NEW REC;
R2 : REC2;
TYPE NREC1 IS NEW REC1;
NR : NREC1;
BEGIN
IF REC (R) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'REC (R)'" );
END IF;
IF REC (R1) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'REC (R1)'" );
END IF;
IF REC1 (R2) /= R1 THEN
FAILED ( "INCORRECT CONVERSION OF 'REC1 (R2)'" );
END IF;
IF REC2 (NR) /= R2 THEN
FAILED ( "INCORRECT CONVERSION OF 'REC2 (NR)'" );
END IF;
IF NREC1 (R) /= NR THEN
FAILED ( "INCORRECT CONVERSION OF 'NREC (R)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"RECORD TYPES" );
END;
DECLARE
TYPE REC (D : INTEGER) IS
RECORD
NULL;
END RECORD;
SUBTYPE CREC IS REC (3);
R : CREC;
TYPE CREC1 IS NEW REC (3);
R1 : CREC1;
TYPE CREC2 IS NEW REC (3);
R2 : CREC2;
TYPE NCREC1 IS NEW CREC1;
NR : NCREC1;
BEGIN
IF CREC (R) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'CREC (R)'" );
END IF;
IF CREC (R1) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'CREC (R1)'" );
END IF;
IF CREC1 (R2) /= R1 THEN
FAILED ( "INCORRECT CONVERSION OF 'CREC1 (R2)'" );
END IF;
IF CREC2 (NR) /= R2 THEN
FAILED ( "INCORRECT CONVERSION OF 'CREC2 (NR)'" );
END IF;
IF NCREC1 (R) /= NR THEN
FAILED ( "INCORRECT CONVERSION OF 'NCREC (R)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"RECORD TYPES WITH DISCRIMINANTS" );
END;
DECLARE
TYPE REC IS
RECORD
NULL;
END RECORD;
TYPE ACCREC IS ACCESS REC;
AR : ACCREC;
TYPE ACCREC1 IS NEW ACCREC;
AR1 : ACCREC1;
TYPE ACCREC2 IS NEW ACCREC;
AR2 : ACCREC2;
TYPE NACCREC1 IS NEW ACCREC1;
NAR : NACCREC1;
FUNCTION F (A : ACCREC) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (0);
END F;
FUNCTION F (A : ACCREC1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (1);
END F;
FUNCTION F (A : ACCREC2) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (2);
END F;
FUNCTION F (A : NACCREC1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (3);
END F;
BEGIN
IF F (ACCREC (AR)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'ACCREC (AR)'" );
END IF;
IF F (ACCREC (AR1)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'ACCREC (AR1)'" );
END IF;
IF F (ACCREC1 (AR2)) /= 1 THEN
FAILED ( "INCORRECT CONVERSION OF 'ACCREC1 (AR2)'" );
END IF;
IF F (ACCREC2 (NAR)) /= 2 THEN
FAILED ( "INCORRECT CONVERSION OF 'ACCREC2 (NAR)'" );
END IF;
IF F (NACCREC1 (AR)) /= 3 THEN
FAILED ( "INCORRECT CONVERSION OF 'NACCREC (AR)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"ACCESS TYPES" );
END;
DECLARE
TYPE REC (D : INTEGER) IS
RECORD
NULL;
END RECORD;
TYPE ACCR IS ACCESS REC;
SUBTYPE CACCR IS ACCR (3);
AR : CACCR;
TYPE CACCR1 IS NEW ACCR (3);
AR1 : CACCR1;
TYPE CACCR2 IS NEW ACCR (3);
AR2 : CACCR2;
TYPE NCACCR1 IS NEW CACCR1;
NAR : NCACCR1;
FUNCTION F (A : CACCR) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (0);
END F;
FUNCTION F (A : CACCR1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (1);
END F;
FUNCTION F (A : CACCR2) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (2);
END F;
FUNCTION F (A : NCACCR1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (3);
END F;
BEGIN
IF F (CACCR (AR)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'CACCR (AR)'" );
END IF;
IF F (CACCR (AR1)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'CACCR (AR1)'" );
END IF;
IF F (CACCR1 (AR2)) /= 1 THEN
FAILED ( "INCORRECT CONVERSION OF 'CACCR1 (AR2)'" );
END IF;
IF F (CACCR2 (NAR)) /= 2 THEN
FAILED ( "INCORRECT CONVERSION OF 'CACCR2 (NAR)'" );
END IF;
IF F (NCACCR1 (AR)) /= 3 THEN
FAILED ( "INCORRECT CONVERSION OF 'NCACCR (AR)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"CONSTRAINED ACCESS TYPES" );
END;
DECLARE
PACKAGE PKG1 IS
TYPE PRIV IS PRIVATE;
PRIVATE
TYPE PRIV IS
RECORD
NULL;
END RECORD;
END PKG1;
USE PKG1;
PACKAGE PKG2 IS
R : PRIV;
TYPE PRIV1 IS NEW PRIV;
R1 : PRIV1;
TYPE PRIV2 IS NEW PRIV;
R2 : PRIV2;
END PKG2;
USE PKG2;
PACKAGE PKG3 IS
TYPE NPRIV1 IS NEW PRIV1;
NR : NPRIV1;
END PKG3;
USE PKG3;
BEGIN
IF PRIV (R) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'PRIV (R)'" );
END IF;
IF PRIV (R1) /= R THEN
FAILED ( "INCORRECT CONVERSION OF 'PRIV (R1)'" );
END IF;
IF PRIV1 (R2) /= R1 THEN
FAILED ( "INCORRECT CONVERSION OF 'PRIV1 (R2)'" );
END IF;
IF PRIV2 (NR) /= R2 THEN
FAILED ( "INCORRECT CONVERSION OF 'PRIV2 (NR)'" );
END IF;
IF NPRIV1 (R) /= NR THEN
FAILED ( "INCORRECT CONVERSION OF 'NPRIV (R)'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"PRIVATE TYPES" );
END;
DECLARE
TASK TYPE TK;
T : TK;
TYPE TK1 IS NEW TK;
T1 : TK1;
TYPE TK2 IS NEW TK;
T2 : TK2;
TYPE NTK1 IS NEW TK1;
NT : NTK1;
TASK BODY TK IS
BEGIN
NULL;
END;
FUNCTION F (T : TK) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (0);
END F;
FUNCTION F (T : TK1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (1);
END F;
FUNCTION F (T : TK2) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (2);
END F;
FUNCTION F (T : NTK1) RETURN INTEGER IS
BEGIN
RETURN IDENT_INT (3);
END F;
BEGIN
IF F (TK (T)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'TK (T))'" );
END IF;
IF F (TK (T1)) /= 0 THEN
FAILED ( "INCORRECT CONVERSION OF 'TK (T1))'" );
END IF;
IF F (TK1 (T2)) /= 1 THEN
FAILED ( "INCORRECT CONVERSION OF 'TK1 (T2))'" );
END IF;
IF F (TK2 (NT)) /= 2 THEN
FAILED ( "INCORRECT CONVERSION OF 'TK2 (NT))'" );
END IF;
IF F (NTK1 (T)) /= 3 THEN
FAILED ( "INCORRECT CONVERSION OF 'NTK (T))'" );
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
"TASK TYPES" );
END;
RESULT;
END C46051A;