WITH REPORT;
PROCEDURE C54A42F IS
USE REPORT ;
BEGIN
TEST( "C54A42F" , "TEST THAT A CASE_STATEMENT CORRECTLY HANDLES" &
" SEVERAL SMALL, NON-CONTIGUOUS ENUMERATION" &
" RANGES COVERED BY A SINGLE 'OTHERS' " &
" ALTERNATIVE" );
DECLARE
TYPE DAY IS (SUN , MON , TUE , WED , THU , FRI , SAT );
DYNVAR2 : DAY := MON ;
STATVAR : DAY := TUE ;
STATCON : CONSTANT DAY := WED ;
DYNVAR : DAY := THU ;
DYNCON : CONSTANT DAY := DAY'VAL( IDENT_INT(5) );
BEGIN
IF EQUAL(1,289) THEN
DYNVAR := SUN ;
DYNVAR2 := SUN ;
END IF;
CASE SUN IS WHEN THU => FAILED("WRONG ALTERNATIVE F1");
WHEN SUN => NULL ;
WHEN SAT => FAILED("WRONG ALTERNATIVE F3");
WHEN TUE..WED => FAILED("WRONG ALTERNATIVE F4");
WHEN OTHERS => FAILED("WRONG ALTERNATIVE F5");
END CASE;
CASE DYNVAR2 IS WHEN THU => FAILED("WRONG ALTERNATIVE G1");
WHEN SUN => FAILED("WRONG ALTERNATIVE G2");
WHEN SAT => FAILED("WRONG ALTERNATIVE G3");
WHEN TUE..WED => FAILED("WRONG ALTERNATIVE G4");
WHEN OTHERS => NULL ;
END CASE;
CASE STATVAR IS WHEN THU => FAILED("WRONG ALTERNATIVE H1");
WHEN SUN => FAILED("WRONG ALTERNATIVE H2");
WHEN SAT => FAILED("WRONG ALTERNATIVE H3");
WHEN TUE..WED => NULL ;
WHEN OTHERS => FAILED("WRONG ALTERNATIVE H5");
END CASE;
CASE STATCON IS WHEN THU => FAILED("WRONG ALTERNATIVE I1");
WHEN SUN => FAILED("WRONG ALTERNATIVE I2");
WHEN SAT => FAILED("WRONG ALTERNATIVE I3");
WHEN TUE..WED => NULL ;
WHEN OTHERS => FAILED("WRONG ALTERNATIVE I5");
END CASE;
CASE DYNVAR IS WHEN THU => NULL ;
WHEN SUN => FAILED("WRONG ALTERNATIVE J2");
WHEN SAT => FAILED("WRONG ALTERNATIVE J3");
WHEN TUE..WED => FAILED("WRONG ALTERNATIVE J4");
WHEN OTHERS => FAILED("WRONG ALTERNATIVE J5");
END CASE;
CASE DYNCON IS WHEN THU => FAILED("WRONG ALTERNATIVE K1");
WHEN SUN => FAILED("WRONG ALTERNATIVE K2");
WHEN SAT => FAILED("WRONG ALTERNATIVE K3");
WHEN TUE..WED => FAILED("WRONG ALTERNATIVE K4");
WHEN OTHERS => NULL ;
END CASE;
CASE DAY'SUCC( DYNCON ) IS WHEN THU => FAILED("WRONG ALTERNATIVE L1");
WHEN SUN => FAILED("WRONG ALTERNATIVE L2");
WHEN SAT => NULL ;
WHEN TUE..WED => FAILED("WRONG ALTERNATIVE L4");
WHEN OTHERS => FAILED("WRONG ALTERNATIVE L5");
END CASE;
END ;
RESULT ;
END C54A42F ;