WITH REPORT; USE REPORT;
PROCEDURE C87B19A IS
TYPE COLOR IS (YELLOW, RED, BLUE, GREEN, BROWN);
TYPE SCHOOL IS (YALE, HARVARD, PRINCETON, BROWN, STANFORD);
TYPE COOK IS (BROIL, BAKE, BROWN, TOAST, FRY);
TYPE MIXED IS (GREEN, BROWN, YALE, BAKE, BLUE, FRY);
RATING : INTEGER := 0;
FUNCTION OK RETURN BOOLEAN IS
BEGIN
RATING := RATING + 1;
RETURN FALSE;
END OK;
FUNCTION ERR RETURN BOOLEAN IS
BEGIN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF DISCRIMINANT");
RETURN FALSE;
END ERR;
BEGIN
TEST ("C87B19A","OVERLOADED EXPRESSIONS AND RANGE BOUNDS" &
" OF VARIANT CHOICES");
DECLARE
TYPE REC (X : MIXED := BROWN) IS
RECORD
CASE X IS
WHEN GREEN .. BROWN => NULL;
WHEN BLUE => NULL;
WHEN FRY => NULL;
WHEN YALE => NULL;
WHEN OTHERS => NULL;
END CASE;
END RECORD;
R1 : REC (X => FRY);
R2 : REC (X => BLUE);
R3 : REC (X => BAKE);
R4 : REC (X => YALE);
R5 : REC (X => BROWN);
R6 : REC (X => GREEN);
BEGIN
IF MIXED'POS(R1.X) /= 5 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R1");
END IF;
IF MIXED'POS(R2.X) /= 4 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R2");
END IF;
IF MIXED'POS(R3.X) /= 3 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R3");
END IF;
IF MIXED'POS(R4.X) /= 2 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R4");
END IF;
IF MIXED'POS(R5.X) /= 1 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R5");
END IF;
IF MIXED'POS(R6.X) /= 0 THEN
FAILED ("VARIANT CHOICES MUST MATCH TYPE OF " &
"DISCRIMINANT-R6");
END IF;
END;
RESULT;
END C87B19A;