WITH REPORT; USE REPORT;
PROCEDURE C95085A IS
SUBTYPE DIGIT IS INTEGER RANGE 0..9;
D : DIGIT;
I : INTEGER;
M1 : CONSTANT INTEGER := IDENT_INT (-1);
COUNT : INTEGER := 0;
CALLED : BOOLEAN;
SUBTYPE SI IS INTEGER RANGE M1 .. 10;
TASK T1 IS
ENTRY E1 (PIN : IN DIGIT; WHO : STRING); END T1;
TASK BODY T1 IS
BEGIN
LOOP
BEGIN
SELECT
ACCEPT E1 (PIN : IN DIGIT;
WHO : STRING) DO FAILED ("EXCEPTION NOT RAISED BEFORE " &
"CALL - E1 " & WHO);
END E1;
OR
TERMINATE;
END SELECT;
EXCEPTION
WHEN OTHERS =>
FAILED ("EXCEPTION RAISED IN E1");
END;
END LOOP;
END T1;
TASK T2 IS
ENTRY E2 (PINOUT : IN OUT DIGIT; WHO : STRING); END T2;
TASK BODY T2 IS
BEGIN
LOOP
BEGIN
SELECT
ACCEPT E2 (PINOUT : IN OUT DIGIT;
WHO : STRING) DO FAILED ("EXCEPTION NOT RAISED BEFORE " &
"CALL - E2 " & WHO);
END E2;
OR
TERMINATE;
END SELECT;
EXCEPTION
WHEN OTHERS =>
FAILED ("EXCEPTION RAISED IN E2");
END;
END LOOP;
END T2;
TASK T3 IS
ENTRY E3 (POUT : OUT SI; WHO : STRING); END T3;
TASK BODY T3 IS
BEGIN
LOOP
BEGIN
SELECT
ACCEPT E3 (POUT : OUT SI;
WHO : STRING) DO CALLED := TRUE;
IF WHO = "10" THEN
POUT := IDENT_INT (10); ELSE
POUT := -1;
END IF;
END E3;
OR
TERMINATE;
END SELECT;
EXCEPTION
WHEN OTHERS =>
FAILED ("EXCEPTION RAISED IN E3");
END;
END LOOP;
END T3;
TASK T4 IS
ENTRY E4 (PINOUT : IN OUT INTEGER; WHO : STRING); END T4;
TASK BODY T4 IS
BEGIN
LOOP
BEGIN
SELECT
ACCEPT E4 (PINOUT : IN OUT INTEGER;
WHO : STRING) DO CALLED := TRUE;
IF WHO = "10" THEN
PINOUT := 10; ELSE
PINOUT := IDENT_INT (-1);
END IF;
END E4;
OR
TERMINATE;
END SELECT;
EXCEPTION
WHEN OTHERS =>
FAILED ("EXCEPTION RAISED IN E4");
END;
END LOOP;
END T4;
BEGIN
TEST ("C95085A", "CHECK THAT CONSTRAINT_ERROR IS RAISED " &
"FOR OUT OF RANGE SCALAR ARGUMENTS");
BEGIN T1.E1 (10, "10");
FAILED ("CONSTRAINT_ERROR NOT RAISED FOR E1 (10)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E1 (10)");
END;
BEGIN T1.E1 (IDENT_INT (-1), "-1");
FAILED ("CONSTRAINT_ERROR NOT RAISED FOR E1 (" &
"IDENT_INT (-1))");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E1 (" &
"IDENT_INT (-1))");
END;
BEGIN I := IDENT_INT (10);
T2.E2 (I, "10");
FAILED ("CONSTRAINT_ERROR NOT RAISED FOR E2 (10)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E2 (10)");
END;
BEGIN I := IDENT_INT (-1);
T2.E2 (I, "-1");
FAILED ("CONSTRAINT_ERROR NOT RAISED FOR E2 (-1)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E2 (-1)");
END;
BEGIN CALLED := FALSE;
D := IDENT_INT (1);
T3.E3 (D, "10");
FAILED ("CONSTRAINT_ERROR NOT RAISED ON RETURN FROM " &
"E3 (10)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
IF NOT CALLED THEN
FAILED ("EXCEPTION RAISED BEFORE CALL " &
"E3 (10)");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E3 (10)");
END;
BEGIN CALLED := FALSE;
D := IDENT_INT (1);
T3.E3 (D, "-1");
FAILED ("CONSTRAINT_ERROR NOT RAISED ON RETURN FROM " &
"E3 (-1)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
IF NOT CALLED THEN
FAILED ("EXCEPTION RAISED BEFORE CALL " &
"E3 (-1)");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E3 (-1)");
END;
BEGIN CALLED := FALSE;
D := 9;
T4.E4 (D, "10");
FAILED ("CONSTRAINT_ERROR NOT RAISED ON RETURN FROM " &
"E4 (10)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
IF NOT CALLED THEN
FAILED ("EXCEPTION RAISED BEFORE CALL " &
"E4 (10)");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E4 (10)");
END;
BEGIN CALLED := FALSE;
D := 0;
T4.E4 (D, "-1");
FAILED ("CONSTRAINT_ERROR NOT RAISED ON RETURN FROM " &
"E4 (-1)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
COUNT := COUNT + 1;
IF NOT CALLED THEN
FAILED ("EXCEPTION RAISED BEFORE CALL " &
"E4 (-1)");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED FOR E4 (-1)");
END;
IF COUNT /= 8 THEN
FAILED ("INCORRECT NUMBER OF CONSTRAINT_ERRORS RAISED");
END IF;
RESULT;
END C95085A;