blob: d4a1caf05827b14bd4acbdec78017623f280c115 [file] [log] [blame]
-- C74211A.ADA
-- Grant of Unlimited Rights
--
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
-- unlimited rights in the software and documentation contained herein.
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
-- this public release, the Government intends to confer upon all
-- recipients unlimited rights equal to those held by the Government.
-- These rights include rights to use, duplicate, release or disclose the
-- released technical data and computer software in whole or in part, in
-- any manner and for any purpose whatsoever, and to have or permit others
-- to do so.
--
-- DISCLAIMER
--
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
-- PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- CHECK THAT WITHIN THE PACKAGE SPECIFICATION AND BODY, ANY EXPLICIT
-- DECLARATIONS OF OPERATORS AND SUBPROGRAMS HIDE ANY OPERATIONS WHICH
-- ARE IMPLICITLY DECLARED AT THE POINT OF THE FULL DECLARATION,
-- REGARDLESS OF THE ORDER OF OCCURENCE OF THE DECLARATIONS.
-- CHECK THAT IMPLICITLY DECLARED DERIVED SUBPROGRAMS HIDE IMPLICITLY
-- DECLARED PREDEFINED OPERATORS, REGARDLESS OF THE ORDER OF OCCURENCE
-- OF THE DECLARATIONS.
-- DSJ 4/28/83
-- JBG 9/23/83
-- A) EXPLICIT DECLARATION HIDES LATER IMPLICIT DECL OF PREDEFINED OP.
-- B) " " " LATER " " " DERIVED OP.
-- C) " " " EARLIER " " " PREDEFINED OP.
-- D) " " " EARLIER " " " DERIVED OP.
WITH REPORT;
PROCEDURE C74211A IS
USE REPORT;
BEGIN
TEST ("C74211A", "CHECK THAT HIDING OF IMPLICITLY DECLARED " &
"OPERATORS AND DERIVED SUBPROGRAMS IS DONE " &
"CORRECTLY REGARDLESS OF ORDER OF DECL'S");
DECLARE
PACKAGE P1 IS
TYPE T1 IS RANGE 1 .. 50;
C1 : CONSTANT T1 := T1(IDENT_INT(2));
D1 : CONSTANT T1 := C1 + C1; -- PREDEFINED "+"
FUNCTION "+" (L, R : T1) RETURN T1; -- C) FOR "+".
FUNCTION "-" (L, R : T1) RETURN T1; -- C) FOR "-".
FUNCTION "/" (L, R : T1) RETURN T1;
END P1;
USE P1;
PACKAGE BODY P1 IS
A,B : T1 := 3;
FUNCTION "+" (L, R : T1) RETURN T1 IS
BEGIN
IF L = R THEN
RETURN 1;
ELSE RETURN 2;
END IF;
END "+";
FUNCTION "-" (L, R : T1) RETURN T1 IS
BEGIN
IF L = R THEN
RETURN 3;
ELSE RETURN 4;
END IF;
END "-";
FUNCTION "/" (L, R : T1) RETURN T1 IS
BEGIN
IF L = R THEN
RETURN T1(IDENT_INT(INTEGER(L)));
ELSE
RETURN T1(IDENT_INT(50));
END IF;
END "/";
BEGIN
IF D1 /= 4 THEN
FAILED ("WRONG PREDEFINED OPERATION - '+' ");
END IF;
IF D1 + C1 /= 2 THEN
FAILED ("IMPLICIT '+' NOT HIDDEN BY EXPLICIT '+'");
END IF;
IF A + B /= 1 THEN
FAILED ("IMPLICIT DECLARATION NOT HIDDEN " &
"BY EXPLICIT DECLARATION - '+' ");
END IF;
IF A - B /= 3 THEN
FAILED ("IMPLICIT DECLARATION NOT HIDDEN " &
"BY EXPLICIT DECLARATION - '-' ");
END IF;
IF A * B /= 9 THEN
FAILED ("WRONG PREDEFINED OPERATION - '*' ");
END IF;
IF B / A /= T1(IDENT_INT(3)) THEN
FAILED ("NOT REDEFINED '/' ");
END IF;
END P1;
PACKAGE P2 IS
TYPE T2 IS PRIVATE;
X , Y : CONSTANT T2;
FUNCTION "+" (L, R : T2) RETURN T2; -- B)
FUNCTION "*" (L, R : T2) RETURN T2; -- A)
PRIVATE
TYPE T2 IS NEW T1; -- B) +; A) *
Z : T2 := T2(IDENT_INT(3))/4; -- Z = 50 USING
-- DERIVED /
FUNCTION "/" (L, R : T2) RETURN T2; -- D) FOR /
X , Y : CONSTANT T2 := 3;
END P2;
PACKAGE BODY P2 IS
FUNCTION "+" (L, R : T2) RETURN T2 IS
BEGIN
IF L = R THEN
RETURN T2(IDENT_INT(5));
ELSE RETURN T2(IDENT_INT(6));
END IF;
END "+";
FUNCTION "*" (L, R : T2) RETURN T2 IS
BEGIN
IF L = R THEN
RETURN T2(IDENT_INT(7));
ELSE RETURN T2(IDENT_INT(8));
END IF;
END "*";
FUNCTION "/" (L, R : T2) RETURN T2 IS
BEGIN
IF L = R THEN
RETURN T2(IDENT_INT(9));
ELSE RETURN T2(IDENT_INT(10));
END IF;
END "/";
BEGIN
IF X + Y /= 5 THEN
FAILED ("DERIVED SUBPROGRAM NOT HIDDEN BY " &
"EXPLICIT DECLARATION - '+' ");
END IF;
IF Y - X /= 3 THEN
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " &
"DERIVED SUBPROGRAM - '-' ");
END IF;
IF X * Y /= 7 THEN
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " &
"EXPLICIT DECLARATION - '*' ");
END IF;
IF Y / X /= T2(IDENT_INT(9)) THEN
FAILED ("DERIVED OPERATOR NOT HIDDEN BY " &
"EXPLICIT DECLARATION - '/' ");
END IF;
IF Z /= 50 THEN
FAILED ("DERIVED OPERATOR HIDDEN PREMATURELY " &
" BY REDECLARED OPERATOR");
END IF;
END P2;
BEGIN
NULL;
END;
RESULT;
END C74211A;