1-- C54A13B.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-- OBJECTIVE:
26--     CHECK THAT IF A CASE EXPRESSION IS A GENERIC "IN" OR "IN OUT"
27--     PARAMETER WITH A NON-STATIC SUBTYPE OR ONE OF THESE IN
28--     PARENTHESES, THEN ANY VALUE OF THE EXPRESSION'S BASE TYPE MAY
29--     APPEAR AS A CHOICE.
30
31-- HISTORY:
32--     BCB 07/13/88  CREATED ORIGINAL TEST.
33
34WITH REPORT; USE REPORT;
35
36PROCEDURE C54A13B IS
37
38     L : INTEGER := IDENT_INT(1);
39     R : INTEGER := IDENT_INT(100);
40
41     SUBTYPE INT IS INTEGER RANGE L .. R;
42
43     GENERIC
44          IN_PAR : IN INT;
45          IN_OUT_PAR : IN OUT INT;
46     PROCEDURE GEN_PROC (I : IN OUT INTEGER);
47
48     IN_VAR : INT := IDENT_INT (10);
49     IN_OUT_VAR : INT := IDENT_INT (100);
50     CHECK_VAR : INT := IDENT_INT (1);
51
52     PROCEDURE GEN_PROC (I : IN OUT INTEGER) IS
53     BEGIN
54          CASE IN_PAR IS
55               WHEN 0 => I := I + IDENT_INT (2);
56               WHEN 10 => I := I + IDENT_INT (1);
57               WHEN -3000 => I := I + IDENT_INT (3);
58               WHEN OTHERS => I := I + IDENT_INT (4);
59          END CASE;
60
61          CASE IN_OUT_PAR IS
62               WHEN 0 => IN_OUT_PAR := IDENT_INT (0);
63               WHEN 100 => IN_OUT_PAR := IDENT_INT (50);
64               WHEN -3000 => IN_OUT_PAR := IDENT_INT (-3000);
65               WHEN OTHERS => IN_OUT_PAR := IDENT_INT (5);
66          END CASE;
67
68          CASE (IN_PAR) IS
69               WHEN 0 => I := I + IDENT_INT (2);
70               WHEN 10 => I := I + IDENT_INT (1);
71               WHEN -3000 => I := I + IDENT_INT (3);
72               WHEN OTHERS => I := I + IDENT_INT (4);
73          END CASE;
74
75          CASE (IN_OUT_PAR) IS
76               WHEN 0 => IN_OUT_PAR := IDENT_INT (200);
77               WHEN 50 => IN_OUT_PAR := IDENT_INT (25);
78               WHEN -3000 => IN_OUT_PAR := IDENT_INT (300);
79               WHEN OTHERS => IN_OUT_PAR := IDENT_INT (400);
80          END CASE;
81
82     END GEN_PROC;
83
84     PROCEDURE P IS NEW GEN_PROC (IN_VAR, IN_OUT_VAR);
85
86BEGIN
87     TEST ("C54A13B", "CHECK THAT IF A CASE EXPRESSION IS A " &
88                      "GENERIC 'IN' OR 'IN OUT' PARAMETER WITH A " &
89                      "NON-STATIC SUBTYPE OR ONE OF " &
90                      "THESE IN PARENTHESES, THEN ANY VALUE OF " &
91                      "THE EXPRESSION'S BASE TYPE MAY APPEAR AS " &
92                      "A CHOICE");
93
94     P (CHECK_VAR);
95
96     IF NOT EQUAL (CHECK_VAR, IDENT_INT(3)) THEN
97          FAILED ("INCORRECT CHOICES MADE FOR IN PARAMETER IN CASE");
98     END IF;
99
100     IF NOT EQUAL (IN_OUT_VAR, IDENT_INT(25)) THEN
101          FAILED ("INCORRECT CHOICESMADE FOR IN OUT PARAMETER IN CASE");
102     END IF;
103
104     RESULT;
105END C54A13B;
106