WITH REPORT, SYSTEM; USE REPORT;
PROCEDURE C45242B IS
BEGIN
TEST ("C45242B", "NO EXCEPTION IS RAISED WHEN A FLOATING " &
"LITERAL USED IN A COMPARISON OR AS THE " &
"LEFT OPERAND IN A MEMBERSHIP TEST " &
"BELONGS TO THE BASE TYPE BUT IS OUTSIDE " &
"THE RANGE OF THE SUBTYPE");
DECLARE
N : FLOAT := FLOAT (IDENT_INT (1));
SUBTYPE FLOAT_1 IS FLOAT RANGE -1.0 .. N;
NUM : FLOAT_1 := N;
BEGIN
IF EQUAL(3,3) THEN
NUM := FLOAT_1'(0.5);
END IF;
IF 2.0 > NUM THEN
COMMENT ("NO EXCEPTION RAISED FOR PRE-DEFINED FLOAT " &
"COMPARISON");
ELSE
FAILED ("WRONG RESULT FROM PRE-DEFINED FLOAT " &
"COMPARISON");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("CONSTRAINT_ERROR RAISED FOR PRE-DEFINED " &
"FLOAT COMPARISON");
WHEN OTHERS =>
FAILED ("OTHER EXCEPTION RAISED FOR PRE-DEFINED " &
"FLOAT COMPARISON");
END;
DECLARE
N : FLOAT := FLOAT (IDENT_INT (1));
SUBTYPE FLOAT_1 IS FLOAT RANGE -1.0 .. N;
BEGIN
IF 2.0 IN FLOAT_1 THEN
FAILED ("WRONG RESULT FROM PRE-DEFINED FLOAT " &
"MEMBERSHIP");
ELSE
COMMENT ("NO EXCEPTION RAISED FOR PRE-DEFINED FLOAT " &
"MEMBERSHIP");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("CONSTRAINT_ERROR RAISED FOR PRE-DEFINED " &
"FLOAT MEMBERSHIP");
WHEN OTHERS =>
FAILED ("OTHER EXCEPTION RAISED FOR PRE-DEFINED " &
"FLOAT MEMBERSHIP");
END;
DECLARE TYPE FINE_FLOAT IS DIGITS SYSTEM.MAX_DIGITS;
N : FINE_FLOAT := 0.5 * FINE_FLOAT (IDENT_INT (1));
SUBTYPE SUB_FINE IS FINE_FLOAT RANGE -0.5 .. N;
NUM : SUB_FINE := N;
BEGIN
IF EQUAL(3,3) THEN
NUM := 0.25;
END IF;
IF 0.75 > NUM THEN
COMMENT ("NO EXCEPTION RAISED FOR FINE_FLOAT " &
"COMPARISON");
ELSE
FAILED ("WRONG RESULT FROM FINE_FLOAT COMPARISON");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("CONSTRAINT_ERROR RAISED FOR " &
"FINE_FLOAT COMPARISON");
WHEN OTHERS =>
FAILED ("OTHER EXCEPTION RAISED FOR " &
"FINE_FLOAT COMPARISON");
END;
DECLARE TYPE FINE_FLOAT IS DIGITS SYSTEM.MAX_DIGITS;
N : FINE_FLOAT := 0.5 * FINE_FLOAT (IDENT_INT (1));
SUBTYPE SUB_FINE IS FINE_FLOAT RANGE -0.5 .. N;
BEGIN
IF 0.75 IN SUB_FINE THEN
FAILED ("WRONG RESULT FROM FINE_FLOAT MEMBERSHIP");
ELSE
COMMENT ("NO EXCEPTION RAISED FOR FINE_FLOAT " &
"MEMBERSHIP");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
FAILED ("CONSTRAINT_ERROR RAISED FOR " &
"FINE_FLOAT MEMBERSHIP");
WHEN OTHERS =>
FAILED ("OTHER EXCEPTION RAISED FOR " &
"FINE_FLOAT MEMBERSHIP");
END;
RESULT;
END C45242B;