aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada')
-rw-r--r--gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada319
1 files changed, 319 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada b/gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada
new file mode 100644
index 000000000..fde865c08
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/ada/acats/tests/c6/c67003f.ada
@@ -0,0 +1,319 @@
+-- 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;