-- C67003F.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 THE PREDEFINED OPERATORS FOR THE PREDEFINED TYPES CAN BE -- REDEFINED. -- CHECK THAT THE REDEFINED OPERATOR IS INVOKED WHEN INFIX OR PREFIX -- NOTATION IS USED. -- HISTORY: -- WMC 03/21/92 TEST CREATED FROM CONSOLIDATION OF C67003[A-E].ADA WITH REPORT; PROCEDURE C67003F IS USE REPORT; BEGIN TEST ("C67003F", "CHECK THAT REDEFINITION OF " & "OPERATORS FOR PREDEFINED TYPES WORKS"); DECLARE -- INTEGER OPERATORS. -- INTEGER INFIX OPERATORS. FUNCTION "*" (X, Y : INTEGER) RETURN INTEGER IS BEGIN IF X /= Y THEN RETURN 1; ELSE RETURN 0; END IF; END "*"; FUNCTION "+" (X, Y : INTEGER) RETURN INTEGER IS BEGIN IF X /= Y THEN RETURN 2; ELSE RETURN 0; END IF; END "+"; FUNCTION "REM" (X, Y : INTEGER) RETURN INTEGER IS BEGIN IF X /= Y THEN RETURN 3; ELSE RETURN 0; END IF; END "REM"; -- INTEGER PREFIX OPERATORS. FUNCTION "+" (X : INTEGER) RETURN INTEGER IS BEGIN IF X /= 0 THEN RETURN 4; ELSE RETURN 0; END IF; END "+"; FUNCTION "ABS" (X : INTEGER) RETURN INTEGER IS BEGIN IF X /= 0 THEN RETURN 5; ELSE RETURN 0; END IF; END "ABS"; -- INTEGER RELATIONAL OPERATOR. FUNCTION "<" (X, Y : INTEGER) RETURN BOOLEAN IS BEGIN RETURN X = Y; END "<"; BEGIN IF IDENT_INT (3) * IDENT_INT (5) /= 1 THEN FAILED ("REDEFINITION OF INTEGER ""*"" IS DEFECTIVE"); END IF; IF IDENT_INT (1) + IDENT_INT (30) /= 2 THEN FAILED ("REDEFINITION OF INTEGER ""+"" IS DEFECTIVE"); END IF; IF IDENT_INT (7) REM IDENT_INT (8) /= 3 THEN FAILED ("REDEFINITION OF ""REM"" IS DEFECTIVE"); END IF; IF + (IDENT_INT (10)) /= 4 THEN FAILED ("REDEFINITION OF INTEGER UNARY ""+"" IS DEFECTIVE"); END IF; IF ABS (IDENT_INT (2)) /= 5 THEN FAILED ("REDEFINITION OF INTEGER ""ABS"" IS DEFECTIVE"); END IF; IF IDENT_INT (7) < IDENT_INT (8) THEN FAILED ("REDEFINITION OF INTEGER ""<"" IS DEFECTIVE"); END IF; END; DECLARE -- FLOAT OPERATORS. -- NOTE THAT ALL LITERAL VALUES USED SHOULD BE -- REPRESENTABLE EXACTLY. FUNCTION IDENT_FLOAT (X : FLOAT) RETURN FLOAT IS I : INTEGER := INTEGER (X); BEGIN IF EQUAL (I, I) THEN -- ALWAYS EQUAL. RETURN X; END IF; RETURN 0.0; END IDENT_FLOAT; -- FLOAT INFIX OPERATORS. FUNCTION "-" (X, Y : FLOAT) RETURN FLOAT IS BEGIN IF X /= Y THEN RETURN 1.0; ELSE RETURN 0.0; END IF; END "-"; FUNCTION "/" (X, Y : FLOAT) RETURN FLOAT IS BEGIN IF X /= Y THEN RETURN 2.0; ELSE RETURN 0.0; END IF; END "/"; FUNCTION "**" (X : FLOAT; Y : INTEGER) RETURN FLOAT IS BEGIN IF INTEGER (X) /= Y THEN RETURN 3.0; ELSE RETURN 0.0; END IF; END "**"; -- FLOAT PREFIX OPERATOR. FUNCTION "-" (X : FLOAT) RETURN FLOAT IS BEGIN IF X /= 0.0 THEN RETURN 4.0; ELSE RETURN 0.0; END IF; END "-"; -- FLOAT RELATIONAL OPERATOR. FUNCTION "<=" (X, Y : FLOAT) RETURN BOOLEAN IS BEGIN RETURN X = Y; END "<="; BEGIN IF IDENT_FLOAT (50.0) - IDENT_FLOAT (100.0) /= 1.0 THEN FAILED ("REDEFINITION OF FLOAT ""-"" IS DEFECTIVE"); END IF; IF IDENT_FLOAT (5.0) / IDENT_FLOAT (1.0) /= 2.0 THEN FAILED ("REDEFINITION OF FLOAT ""/"" IS DEFECTIVE"); END IF; IF IDENT_FLOAT (3.0) ** IDENT_INT (2) /= 3.0 THEN FAILED ("REDEFINITION OF FLOAT ""**"" IS DEFECTIVE"); END IF; IF -(IDENT_FLOAT (5.0)) /= 4.0 THEN FAILED ("REDEFINITION OF FLOAT UNARY ""-"" IS DEFECTIVE"); END IF; IF IDENT_FLOAT (1.0) <= IDENT_FLOAT (5.0) THEN FAILED ("REDEFINITION OF FLOAT ""<="" IS DEFECTIVE"); END IF; END; DECLARE -- BOOLEAN OPERATORS. -- BOOLEAN LOGICAL OPERATORS. FUNCTION "AND" (X, Y : BOOLEAN) RETURN BOOLEAN IS BEGIN IF X AND THEN Y THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END "AND"; FUNCTION "XOR" (X, Y : BOOLEAN) RETURN BOOLEAN IS BEGIN RETURN X = Y; END "XOR"; -- BOOLEAN RELATIONAL OPERATOR. FUNCTION ">" (X, Y : BOOLEAN) RETURN BOOLEAN IS BEGIN RETURN X = Y; END ">"; BEGIN IF IDENT_BOOL (TRUE) AND IDENT_BOOL (TRUE) THEN FAILED ("REDEFINITION OF ""AND"" IS DEFECTIVE"); END IF; IF IDENT_BOOL (TRUE) XOR IDENT_BOOL (FALSE) THEN FAILED ("REDEFINITION OF ""XOR"" IS DEFECTIVE"); END IF; IF IDENT_BOOL (TRUE) > IDENT_BOOL (FALSE) THEN FAILED ("REDEFINITION OF BOOLEAN "">"" IS DEFECTIVE"); END IF; END; DECLARE -- STRING OPERATORS. S1 : STRING (1..2) := "A" & IDENT_CHAR ('B'); S2 : STRING (1..2) := "C" & IDENT_CHAR ('D'); FUNCTION "&" (X, Y : STRING) RETURN STRING IS Z : STRING (1 .. X'LENGTH + Y'LENGTH); BEGIN Z (1 .. Y'LENGTH) := Y; Z (Y'LENGTH + 1 .. Z'LAST) := X; RETURN Z; END "&"; FUNCTION "&" (X : CHARACTER; Y : STRING) RETURN STRING IS Z : STRING (1 .. Y'LENGTH + 1); BEGIN Z (1 .. Y'LENGTH) := Y; Z (Z'LAST) := X; RETURN Z; END "&"; -- STRING RELATIONAL OPERATOR. FUNCTION ">=" (X, Y : STRING) RETURN BOOLEAN IS BEGIN RETURN X = Y; END ">="; BEGIN IF S1 & S2 /= "CDAB" THEN FAILED ("BAD REDEFINITION OF ""&"" (S,S)"); END IF; IF IDENT_CHAR ('C') & S1 /= "ABC" THEN FAILED ("BAD REDEFINITION OF ""&"" (C,S)"); END IF; IF S2 >= S1 THEN FAILED ("BAD REDEFINITION OF STRING "">="""); END IF; END; DECLARE -- CHARACTER OPERATORS. -- CHARACTER RELATIONAL OPERATORS. FUNCTION ">" (X, Y : CHARACTER) RETURN BOOLEAN IS BEGIN RETURN X = Y; END ">"; FUNCTION "<=" (X, Y : CHARACTER) RETURN BOOLEAN IS BEGIN RETURN X = Y; END "<="; BEGIN IF IDENT_CHAR ('C') > IDENT_CHAR ('B') THEN FAILED ("REDEFINITION OF CHARACTER "">"" IS DEFECTIVE"); END IF; IF IDENT_CHAR ('A') <= IDENT_CHAR ('E') THEN FAILED ("REDEFINITION OF CHARACTER ""<="" IS DEFECTIVE"); END IF; END; RESULT; END C67003F;