WITH REPORT; USE REPORT;
PROCEDURE C84009A IS
TYPE INT IS NEW INTEGER RANGE -100 .. 100;
PACKAGE PACK IS
FUNCTION "+" (LEFT : INTEGER; RIGHT : INT) RETURN INTEGER;
FUNCTION "-" (LEFT, RIGHT : INT) RETURN INT;
FUNCTION "-" (RIGHT : INT) RETURN INTEGER;
FUNCTION "+" (RIGHT : INT) RETURN INTEGER;
END PACK;
FUNCTION "+" (RIGHT : INT) RETURN INTEGER IS
BEGIN
RETURN INTEGER'(1) + INTEGER(RIGHT);
END "+";
PACKAGE BODY PACK IS
FUNCTION "+" (LEFT : INTEGER; RIGHT : INT) RETURN INTEGER IS
BEGIN
RETURN LEFT + INTEGER(RIGHT);
END "+";
FUNCTION "-" (LEFT, RIGHT : INT) RETURN INT IS
BEGIN
FAILED ("BINARY ""-"" ALREADY VISIBLE FOR TYPE INT");
RETURN LEFT + (-RIGHT);
END "-";
FUNCTION "-" (RIGHT : INT) RETURN INTEGER IS
BEGIN
RETURN INTEGER'(0) - INTEGER(RIGHT);
END "-";
FUNCTION "+" (RIGHT : INT) RETURN INTEGER IS
BEGIN
FAILED ("UNARY ""+"" ALREADY VISIBLE FOR TYPE INT");
RETURN INTEGER'(0) + INTEGER(RIGHT);
END "+";
END PACK;
USE PACK;
BEGIN
TEST ("C84009A", "CHECK THAT A USE CLAUSE MAKES AN IMPLICITLY " &
"OR EXPLICITLY DECLARED OPERATOR DIRECTLY " &
"VISIBLE IF NO HOMOGRAPH OF THE OPERATOR IS " &
"ALREADY DIRECTLY VISIBLE");
IF INTEGER'(10) + INT'(10) /= IDENT_INT(20) THEN
FAILED ("INCORRECT RESULT FROM BINARY ""+""");
END IF;
IF INT'(5) - INT'(3) /= INT'(2) THEN
FAILED ("INCORRECT RESULT FROM BINARY ""-""");
END IF;
IF -INT'(20) /= IDENT_INT(-INTEGER'(20)) THEN
FAILED ("INCORRECT RESULT FROM UNARY ""-""");
END IF;
IF +INT'(20) /= IDENT_INT(+INTEGER'(21)) THEN
FAILED ("INCORRECT RESULT FROM UNARY ""+""");
END IF;
RESULT;
END C84009A;