1-- C36204A.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 EACH ARRAY ATTRIBUTE YIELDS THE CORRECT VALUES.
26-- BOTH ARRAY OBJECTS AND TYPES ARE CHECKED.
27
28-- DAT 2/12/81
29-- SPS 11/1/82
30-- WMC 03/16/92  CREATED TYPE RANGE CHECK FOR AE_TYPE.
31
32WITH REPORT;
33PROCEDURE C36204A IS
34
35     USE REPORT;
36
37BEGIN
38     TEST ("C36204A", "ARRAY ATTRIBUTES RETURN CORRECT VALUES");
39
40     DECLARE
41          A1 : ARRAY (BOOLEAN,
42                      INTEGER RANGE IDENT_INT(1)..IDENT_INT(10))
43               OF STRING(IDENT_INT(5)..IDENT_INT(7));
44          TYPE NI IS  RANGE -3 .. 3;
45          N : NI := NI(IDENT_INT(2));
46          SUBTYPE SNI IS NI RANGE -N .. N;
47          TYPE AA IS ARRAY (NI, SNI, BOOLEAN)
48               OF NI;
49          A1_1_1 : BOOLEAN := A1'FIRST;
50          A1_1_2 : BOOLEAN := A1'LAST(1);
51          A1_2_1 : INTEGER RANGE A1'RANGE(2) := A1'FIRST(2);  -- 1
52          A1_2_2 : INTEGER RANGE A1'RANGE(2) := A1'LAST(2);   -- 10
53          SUBTYPE AE_TYPE IS INTEGER RANGE A1(TRUE,5)'RANGE;    -- RANGE 5..7
54          A2 : AA;
55          A4 : ARRAY (A1_1_1 .. A1_1_2, A1_2_1 .. A1_2_2) OF
56               STRING (IDENT_INT(1)..IDENT_INT(3));
57
58          I : INTEGER;
59          B : BOOLEAN;
60     BEGIN
61          IF A4'FIRST /= IDENT_BOOL(FALSE)
62             OR A4'LAST /= IDENT_BOOL(TRUE)
63             OR A4'FIRST(2) /= INTEGER'(1)
64             OR A4'LAST(2) /= INTEGER'(10)
65          THEN
66               FAILED ("INCORRECT 'FIRST OR 'LAST  - 1");
67          END IF;
68
69          IF A4'LENGTH /= INTEGER'(2)
70             OR A4'LENGTH /= NI'(2)
71             OR A4'LENGTH(1) /= N
72             OR A4'LENGTH(2) /= A4'LAST(2)
73          THEN
74               FAILED ("INCORRECT 'LENGTH - 1");
75          END IF;
76
77          A4 := (BOOLEAN => (1 .. 10 => "XYZ"));
78          FOR L1 IN A1'RANGE(1) LOOP
79               FOR L2 IN A4'RANGE(2) LOOP
80                    A1(L1,L2) := A4(L1,L2);
81               END LOOP;
82          END LOOP;
83
84          IF AA'FIRST(1) /= NI'(-3)
85             OR AA'LAST(1) /= N + 1
86             OR AA'FIRST(2) /= -N
87             OR AA'LAST(2) /= N
88             OR AA'FIRST(3) /= IDENT_BOOL(FALSE)
89             OR AA'LAST(3) /= IDENT_BOOL(TRUE)
90          THEN
91               FAILED ("INCORRECT 'FIRST OR 'LAST - 2");
92          END IF;
93
94          IF N NOT IN AA'RANGE(2)
95             OR IDENT_BOOL(FALSE) NOT IN AA'RANGE(3)
96             OR N + 1 NOT IN AA'RANGE
97             OR N + 1 IN AA'RANGE(2)
98          THEN
99               FAILED ("INCORRECT 'RANGE - 1");
100          END IF;
101
102          IF AA'LENGTH /= INTEGER'(7)
103             OR AA'LENGTH(2) - 3 /= N
104             OR AA'LENGTH(3) /= 2
105          THEN
106               FAILED ("INCORRECT 'LENGTH - 2");
107          END IF;
108
109          IF A2'FIRST(1) /= NI'(-3)
110             OR A2'LAST(1) /= N + 1
111             OR A2'FIRST(2) /= -N
112             OR A2'LAST(2) /= N
113             OR A2'FIRST(3) /= IDENT_BOOL(FALSE)
114             OR A2'LAST(3) /= IDENT_BOOL(TRUE)
115          THEN
116               FAILED ("INCORRECT 'FIRST OR 'LAST - 3");
117          END IF;
118
119          IF N NOT IN A2'RANGE(2)
120             OR IDENT_BOOL(FALSE) NOT IN A2'RANGE(3)
121             OR N + 1 NOT IN A2'RANGE
122             OR N + 1 IN A2'RANGE(2)
123          THEN
124               FAILED ("INCORRECT 'RANGE - 2");
125          END IF;
126
127          IF A2'LENGTH /= INTEGER'(7)
128             OR A2'LENGTH(2) - 3 /= INTEGER(N)
129             OR A2'LENGTH(3) /= 2
130          THEN
131               FAILED ("INCORRECT 'LENGTH - 3");
132          END IF;
133
134          IF (AE_TYPE'FIRST /= 5) OR (AE_TYPE'LAST /= 7) THEN
135             FAILED ("INCORRECT TYPE RANGE DEFINED FOR AE_TYPE");
136          END IF;
137     EXCEPTION
138          WHEN OTHERS => FAILED  ("EXCEPTION RAISED ?");
139     END;
140
141     RESULT;
142END C36204A;
143