1-- C67005B.ADA
2
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25-- CHECK THAT IF EQUALITY IS REDEFINED FOR A SCALAR TYPE, CASE
26-- STATEMENTS STILL USE THE PREDEFINED EQUALITY OPERATION.
27
28-- JBG 9/28/83
29
30WITH REPORT; USE REPORT;
31PROCEDURE C67005B IS
32
33     GENERIC
34          TYPE LP IS LIMITED PRIVATE;
35          WITH FUNCTION EQUAL (L, R : LP) RETURN BOOLEAN;
36     PACKAGE EQUALITY_OPERATOR IS
37          FUNCTION "=" (L, R : LP) RETURN BOOLEAN;
38     END EQUALITY_OPERATOR;
39
40     PACKAGE BODY EQUALITY_OPERATOR IS
41          FUNCTION "=" (L, R : LP) RETURN BOOLEAN IS
42          BEGIN
43               RETURN EQUAL(L, R);
44          END "=";
45     END EQUALITY_OPERATOR;
46
47BEGIN
48     TEST ("C67005B", "CHECK THAT REDEFINING EQUALITY FOR A " &
49                      "SCALAR TYPE DOES NOT AFFECT CASE STATEMENTS");
50
51     DECLARE
52          TYPE MY IS NEW INTEGER;
53          CHECK : MY;
54
55          VAR : INTEGER RANGE 1..3 := 3;
56
57          PACKAGE INTEGER_EQUALS IS
58               FUNCTION EQUAL (L, R : INTEGER) RETURN BOOLEAN;
59               PACKAGE INTEGER_EQUAL IS NEW EQUALITY_OPERATOR
60                         (INTEGER, EQUAL);
61          END INTEGER_EQUALS;
62
63          FUNCTION "=" (L, R : INTEGER) RETURN BOOLEAN RENAMES
64                       INTEGER_EQUALS.INTEGER_EQUAL."=";
65
66          PACKAGE BODY INTEGER_EQUALS IS
67               FUNCTION EQUAL (L, R : INTEGER) RETURN BOOLEAN IS
68               BEGIN
69                    RETURN FALSE;
70               END EQUAL;
71          END INTEGER_EQUALS;
72
73     BEGIN
74
75          IF VAR = 3 THEN
76               FAILED ("DID NOT USE REDEFINED '=' - 1");
77          END IF;
78
79          IF VAR /= 3 THEN
80               NULL;
81          ELSE
82               FAILED ("DID NOT USE REDEFINED '/=' - 1");
83          END IF;
84
85          IF VAR = IDENT_INT(3) THEN
86               FAILED ("DID NOT USE REDEFINED '=' - 2");
87          END IF;
88
89          IF VAR /= IDENT_INT(3) THEN
90               NULL;
91          ELSE
92               FAILED ("DID NOT USE REDEFINED '/=' - 2");
93          END IF;
94
95          CHECK := MY(IDENT_INT(0));
96          IF CHECK /= 0 THEN
97               FAILED ("USING WRONG EQUALITY FOR DERIVED TYPE");
98          END IF;
99
100          CASE VAR IS
101               WHEN 1..3 => CHECK := MY(IDENT_INT(1));
102               WHEN OTHERS => NULL;
103          END CASE;
104
105          IF CHECK /= 1 THEN
106               FAILED ("DID NOT USE PREDEFINED EQUALS IN CASE - 1");
107          END IF;
108
109          CASE IDENT_INT(VAR) IS
110               WHEN 1 => CHECK := 4;
111               WHEN 2 => CHECK := 5;
112               WHEN 3 => CHECK := 6;
113               WHEN OTHERS => CHECK := 7;
114          END CASE;
115
116          IF CHECK /= 6 THEN
117               FAILED ("DID NOT USE PREDEFINED EQUALS IN CASE - 2");
118          END IF;
119
120     END;
121
122     RESULT;
123
124END C67005B;
125