WITH REPORT;
PROCEDURE C52005D IS
USE REPORT;
BEGIN
TEST ("C52005D", "CHECK THAT CONSTRAINT_ERROR EXCEPTION IS RAISED "
& "ON DYNAMIC OUT OF RANGE INTEGER, BOOLEAN, CHARACTER, " &
"AND ENUMERATION ASSIGNMENTS");
DECLARE
I1 : INTEGER RANGE 0..10 := 5;
BEGIN
I1 := IDENT_INT(11);
FAILED ("EXCEPTION NOT RAISED FOR OUT OF RANGE INT ASSNMT");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF I1 /= 5 THEN
FAILED ("VALUE ALTERED BEFORE INT RANGE EXCEPTION");
END IF;
END;
DECLARE
I2 : INTEGER RANGE 0..10 := 5;
BEGIN
I2 := IDENT_INT(10);
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("EXCEPTION RAISED ON LEGAL INTEGER ASSIGNMENT");
END;
DECLARE
B1 : BOOLEAN RANGE TRUE..TRUE := TRUE;
BEGIN
B1 := IDENT_BOOL(FALSE);
FAILED ("EXCEPTION NOT RAISED FOR OUT OF RANGE BOOL ASSNMT");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF B1 /= TRUE THEN
FAILED ("VALUE ALTERED BEFORE BOOLEAN RANGE EXCEPTION");
END IF;
END;
DECLARE
B2 : BOOLEAN := TRUE;
BEGIN
B2 := IDENT_BOOL(FALSE);
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("EXCEPTION RAISED ON LEGAL BOOLEAN ASSNMNT");
END;
DECLARE
C1 : CHARACTER RANGE 'B'..'Z' := 'M';
BEGIN
C1 := IDENT_CHAR('A');
FAILED ("EXCEPTION NOT RAISED FOR OUT OF RANGE CHAR ASSNMNT");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF C1 /= 'M' THEN
FAILED ("VALUE ALTERED BEFORE CHARACTER RANGE " &
"EXCEPTION");
END IF;
END;
DECLARE
C2 : CHARACTER RANGE 'B'..'Z' := 'M';
BEGIN
C2 := IDENT_CHAR('B');
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("EXCEPTION RAISED OF LEGAL CHARACTER ASSNMNT");
END;
DECLARE
TYPE DAY IS (SUN, MON, TUE, WED, THU, FRI, SAT);
ALLDAYS : DAY := TUE;
WORKDAY : DAY RANGE MON..FRI := TUE;
BEGIN
IF EQUAL(3,3) THEN
ALLDAYS := SUN;
END IF;
WORKDAY := ALLDAYS;
FAILED ("EXCEPTION NOT RAISED FOR OUT OF RANGE ENUM. " &
"ASSIGNMENT");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF WORKDAY /= TUE THEN
FAILED ("VALUE ALTERED BEFORE ENUM. RANGE EXCEPTION");
END IF;
END;
DECLARE
TYPE DAY IS (SUN, MON, TUE, WED, THU, FRI, SAT);
ALLDAYS : DAY := TUE;
WORKDAY : DAY RANGE MON..FRI := TUE;
BEGIN
IF EQUAL(3,3) THEN
ALLDAYS := FRI;
END IF;
WORKDAY := ALLDAYS;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("EXCEPTION RAISED ON LEGAL ENUM. ASSNMNT");
END;
RESULT;
END C52005D;