WITH REPORT; USE REPORT;
PROCEDURE C49025A IS
TYPE ENUM IS (RED,BLUE,GREEN,BLACK);
TYPE FIX IS DELTA 0.125 RANGE 0.0 .. 20.0;
TYPE FLT IS DIGITS 3 RANGE 0.0 .. 25.0;
TYPE INT IS RANGE 1 .. 100;
TYPE TINT1 IS RANGE 1 .. ENUM'POS(BLUE);
TYPE TFLT IS DIGITS FIX'AFT RANGE 0.0 .. 10.0;
TYPE TFIX2 IS DELTA FIX'DELTA RANGE 0.0 .. 5.0;
TYPE TFLT1 IS DIGITS FLT'DIGITS;
TYPE ITN IS RANGE 0 .. INT'FIRST;
TYPE TINT2 IS RANGE 1 .. FIX'FORE;
TYPE TFLT3 IS DIGITS 3 RANGE 5.0 .. FLT'LAST;
CON3 : CONSTANT := FLT'MACHINE_EMAX;
TYPE TINT3 IS RANGE FLT'MACHINE_EMIN .. 1;
CON4 : CONSTANT := FLT'MACHINE_MANTISSA;
TYPE TINT4 IS RANGE 1 .. FLT'MACHINE_RADIX;
CON6 : CONSTANT := INT'SIZE;
TYPE TFIX5 IS DELTA 0.125 RANGE 0.0 .. FIX'SMALL;
TYPE TINT6 IS RANGE 1 .. ENUM'WIDTH;
OBJ1 : INTEGER := 1;
CAS_OBJ : BOOLEAN := TRUE;
BEGIN
TEST("C49025A","CHECK THAT CERTAIN ATTRIBUTES CAN "&
"BE USED IN STATIC EXPRESSIONS.");
CASE CAS_OBJ IS
WHEN (ENUM'PRED(BLUE) = ENUM'(RED)) =>
OBJ1 := 2;
WHEN OTHERS =>
FAILED("INCORRECT VALUE RETURNED FOR ATTRIBUTE 1");
END CASE;
CAS_OBJ := TRUE;
CASE CAS_OBJ IS
WHEN (ENUM'SUCC(RED) = ENUM'(BLUE)) =>
OBJ1 := 3;
WHEN OTHERS =>
FAILED("INCORRECT VALUE RETURNED FOR ATTRIBUTE 2");
END CASE;
CAS_OBJ := TRUE;
CASE CAS_OBJ IS
WHEN (ENUM'VAL(3) = ENUM'(BLACK)) =>
OBJ1 := 4;
WHEN OTHERS =>
FAILED("INCORRECT VALUE RETURNED FOR ATTRIBUTE 3");
END CASE;
CAS_OBJ := TRUE;
CASE CAS_OBJ IS
WHEN (TRUE OR FLT'MACHINE_OVERFLOWS) =>
OBJ1 := 5;
WHEN OTHERS =>
FAILED("INCORRECT VALUE RETURNED FOR ATTRIBUTE 4");
END CASE;
CAS_OBJ := FALSE;
CASE CAS_OBJ IS
WHEN (FALSE AND FIX'MACHINE_ROUNDS) =>
OBJ1 := 6;
WHEN OTHERS =>
FAILED("INCORRECT VALUE RETURNED FOR ATTRIBUTE 5");
END CASE;
RESULT;
END C49025A;