WITH REPORT; USE REPORT;
PROCEDURE C46052A IS
TYPE ENUM IS (A, AB, ABC, ABCD);
E : ENUM := ENUM'VAL (IDENT_INT (0));
FUNCTION IDENT (E : ENUM) RETURN ENUM IS
BEGIN
RETURN ENUM'VAL (IDENT_INT (ENUM'POS (E)));
END IDENT;
BEGIN
TEST ( "C46052A", "CHECK THAT CONSTRAINT_ERROR IS RAISED FOR " &
"CONVERSION TO AN ENUMERATION TYPE IF THE " &
"VALUE OF THE OPERAND DOES NOT BELONG TO " &
"THE RANGE OF ENUMERATION VALUES FOR THE " &
"TARGET SUBTYPE" );
DECLARE
SUBTYPE SENUM IS ENUM RANGE AB .. ABCD;
BEGIN
E := IDENT (SENUM (E));
FAILED ( "NO EXCEPTION RAISED FOR 'SENUM (E)'" );
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ( "WRONG EXCEPTION RAISED FOR 'SENUM (E)'" );
END;
DECLARE
SUBTYPE NOENUM IS ENUM RANGE ABCD .. AB;
BEGIN
E := IDENT (NOENUM (E));
FAILED ( "NO EXCEPTION RAISED FOR 'NOENUM (E)'" );
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ( "WRONG EXCEPTION RAISED FOR 'NOENUM (E)'" );
END;
DECLARE
SUBTYPE SCHAR IS CHARACTER RANGE 'C' .. 'R';
A : CHARACTER := IDENT_CHAR ('A');
BEGIN
A := IDENT_CHAR (SCHAR (A));
FAILED ( "NO EXCEPTION RAISED FOR 'SCHAR (A)'" );
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ( "WRONG EXCEPTION RAISED FOR 'SCHAR (A)'" );
END;
DECLARE
SUBTYPE FRANGE IS BOOLEAN RANGE FALSE .. FALSE;
T : BOOLEAN := IDENT_BOOL (TRUE);
BEGIN
T := IDENT_BOOL (FRANGE (T));
FAILED ( "NO EXCEPTION RAISED FOR 'FRANGE (T)'" );
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ( "WRONG EXCEPTION RAISED FOR 'FRANGE (T)'" );
END;
RESULT;
END C46052A;