2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / ada / acats / tests / c3 / c36205l.ada
blob9a1126e34389c3b6c245425f7ffd57f90c00dc5e
1 -- C36205L.ADA
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.
16 -- DISCLAIMER
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 -- FOR GENERIC PROCEDURES, CHECK THAT ATTRIBUTES GIVE THE
27 -- CORRECT VALUES FOR UNCONSTRAINED FORMAL PARAMETERS.
28 -- BASIC CHECKS OF ARRAY OBJECTS AND WHOLE ARRAYS PASSED AS
29 -- PARAMETERS TO GENERIC PROCEDURES
31 -- HISTORY
32 -- EDWARD V. BERARD, 9 AUGUST 1990
33 -- DAS 8 OCT 1990 ADDED OUT MODE PARAMETER TO GENERIC
34 -- PROCEDURE TEST_PROCEDURE AND FORMAL
35 -- GENERIC PARAMETER COMPONENT_VALUE.
37 WITH REPORT ;
39 PROCEDURE C36205L IS
41 SHORT_START : CONSTANT := -100 ;
42 SHORT_END : CONSTANT := 100 ;
43 TYPE SHORT_RANGE IS RANGE SHORT_START .. SHORT_END ;
44 SHORT_LENGTH : CONSTANT NATURAL := (SHORT_END - SHORT_START + 1) ;
46 MEDIUM_START : CONSTANT := 1 ;
47 MEDIUM_END : CONSTANT := 100 ;
48 TYPE MEDIUM_RANGE IS RANGE MEDIUM_START .. MEDIUM_END ;
49 MEDIUM_LENGTH : CONSTANT NATURAL := (MEDIUM_END - MEDIUM_START
50 + 1) ;
52 TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
53 SEP, OCT, NOV, DEC) ;
54 TYPE DAY_TYPE IS RANGE 1 .. 31 ;
55 TYPE YEAR_TYPE IS RANGE 1904 .. 2050 ;
56 TYPE DATE IS RECORD
57 MONTH : MONTH_TYPE ;
58 DAY : DAY_TYPE ;
59 YEAR : YEAR_TYPE ;
60 END RECORD ;
62 TODAY : DATE := (MONTH => AUG,
63 DAY => 9,
64 YEAR => 1990) ;
66 SUBTYPE SHORT_STRING IS STRING (1 ..5) ;
68 DEFAULT_STRING : SHORT_STRING := "ABCDE" ;
70 TYPE FIRST_TEMPLATE IS ARRAY (SHORT_RANGE RANGE <>,
71 MEDIUM_RANGE RANGE <>) OF DATE ;
73 TYPE SECOND_TEMPLATE IS ARRAY (MONTH_TYPE RANGE <>,
74 DAY_TYPE RANGE <>) OF SHORT_STRING ;
76 TYPE THIRD_TEMPLATE IS ARRAY (CHARACTER RANGE <>,
77 BOOLEAN RANGE <>) OF DAY_TYPE ;
79 FIRST_ARRAY : FIRST_TEMPLATE (-10 .. 10, 27 .. 35)
80 := (-10 .. 10 =>
81 (27 .. 35 => TODAY)) ;
82 SECOND_ARRAY : SECOND_TEMPLATE (JAN .. JUN, 1 .. 25)
83 := (JAN .. JUN =>
84 (1 .. 25 => DEFAULT_STRING)) ;
85 THIRD_ARRAY : THIRD_TEMPLATE ('A' .. 'Z', FALSE .. TRUE)
86 := ('A' .. 'Z' =>
87 (FALSE .. TRUE => DAY_TYPE (9))) ;
89 FOURTH_ARRAY : FIRST_TEMPLATE (0 .. 27, 75 .. 100)
90 := (0 .. 27 =>
91 (75 .. 100 => TODAY)) ;
92 FIFTH_ARRAY : SECOND_TEMPLATE (JUL .. OCT, 6 .. 10)
93 := (JUL .. OCT =>
94 (6 .. 10 => DEFAULT_STRING)) ;
95 SIXTH_ARRAY : THIRD_TEMPLATE ('X' .. 'Z', TRUE .. TRUE)
96 := ('X' .. 'Z' =>
97 (TRUE .. TRUE => DAY_TYPE (31))) ;
99 GENERIC
101 TYPE FIRST_INDEX IS (<>) ;
102 TYPE SECOND_INDEX IS (<>) ;
103 TYPE COMPONENT_TYPE IS PRIVATE ;
104 TYPE UNCONSTRAINED_ARRAY IS ARRAY (FIRST_INDEX RANGE <>,
105 SECOND_INDEX RANGE <>) OF COMPONENT_TYPE ;
106 COMPONENT_VALUE: IN COMPONENT_TYPE;
108 PROCEDURE TEST_PROCEDURE (FIRST : IN UNCONSTRAINED_ARRAY ;
109 FFIFS : IN FIRST_INDEX ;
110 FFILS : IN FIRST_INDEX ;
111 FSIFS : IN SECOND_INDEX ;
112 FSILS : IN SECOND_INDEX ;
113 FFLEN : IN NATURAL ;
114 FSLEN : IN NATURAL ;
115 FFIRT : IN FIRST_INDEX ;
116 FSIRT : IN SECOND_INDEX ;
117 SECOND : OUT UNCONSTRAINED_ARRAY ;
118 SFIFS : IN FIRST_INDEX ;
119 SFILS : IN FIRST_INDEX ;
120 SSIFS : IN SECOND_INDEX ;
121 SSILS : IN SECOND_INDEX ;
122 SFLEN : IN NATURAL ;
123 SSLEN : IN NATURAL ;
124 SFIRT : IN FIRST_INDEX ;
125 SSIRT : IN SECOND_INDEX ;
126 REMARKS : IN STRING) ;
128 PROCEDURE TEST_PROCEDURE (FIRST : IN UNCONSTRAINED_ARRAY ;
129 FFIFS : IN FIRST_INDEX ;
130 FFILS : IN FIRST_INDEX ;
131 FSIFS : IN SECOND_INDEX ;
132 FSILS : IN SECOND_INDEX ;
133 FFLEN : IN NATURAL ;
134 FSLEN : IN NATURAL ;
135 FFIRT : IN FIRST_INDEX ;
136 FSIRT : IN SECOND_INDEX ;
137 SECOND : OUT UNCONSTRAINED_ARRAY ;
138 SFIFS : IN FIRST_INDEX ;
139 SFILS : IN FIRST_INDEX ;
140 SSIFS : IN SECOND_INDEX ;
141 SSILS : IN SECOND_INDEX ;
142 SFLEN : IN NATURAL ;
143 SSLEN : IN NATURAL ;
144 SFIRT : IN FIRST_INDEX ;
145 SSIRT : IN SECOND_INDEX ;
146 REMARKS : IN STRING) IS
148 BEGIN -- TEST_PROCEDURE
150 IF (FIRST'FIRST /= FFIFS) OR
151 (FIRST'FIRST (1) /= FFIFS) OR
152 (FIRST'FIRST (2) /= FSIFS) OR
153 (SECOND'FIRST /= SFIFS) OR
154 (SECOND'FIRST (1) /= SFIFS) OR
155 (SECOND'FIRST (2) /= SSIFS) THEN
156 REPORT.FAILED ("PROBLEMS WITH 'FIRST. " & REMARKS) ;
157 END IF ;
159 IF (FIRST'LAST /= FFILS) OR
160 (FIRST'LAST (1) /= FFILS) OR
161 (FIRST'LAST (2) /= FSILS) OR
162 (SECOND'LAST /= SFILS) OR
163 (SECOND'LAST (1) /= SFILS) OR
164 (SECOND'LAST (2) /= SSILS) THEN
165 REPORT.FAILED ("PROBLEMS WITH 'LAST. " & REMARKS) ;
166 END IF ;
168 IF (FIRST'LENGTH /= FFLEN) OR
169 (FIRST'LENGTH (1) /= FFLEN) OR
170 (FIRST'LENGTH (2) /= FSLEN) OR
171 (SECOND'LENGTH /= SFLEN) OR
172 (SECOND'LENGTH (1) /= SFLEN) OR
173 (SECOND'LENGTH (2) /= SSLEN) THEN
174 REPORT.FAILED ("PROBLEMS WITH 'LENGTH. " & REMARKS) ;
175 END IF ;
177 IF (FFIRT NOT IN FIRST'RANGE (1)) OR
178 (FFIRT NOT IN FIRST'RANGE) OR
179 (SFIRT NOT IN SECOND'RANGE (1)) OR
180 (SFIRT NOT IN SECOND'RANGE) OR
181 (FSIRT NOT IN FIRST'RANGE (2)) OR
182 (SSIRT NOT IN SECOND'RANGE (2)) THEN
183 REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE " &
184 "ATTRIBUTE. " & REMARKS) ;
185 END IF ;
187 -- ASSIGN VALUES TO THE ARRAY PARAMETER OF MODE OUT
188 FOR I IN SECOND'RANGE(1) LOOP
189 FOR J IN SECOND'RANGE(2) LOOP
190 SECOND(I, J) := COMPONENT_VALUE;
191 END LOOP;
192 END LOOP;
194 END TEST_PROCEDURE ;
196 PROCEDURE FIRST_TEST_PROCEDURE IS NEW TEST_PROCEDURE (
197 FIRST_INDEX => SHORT_RANGE,
198 SECOND_INDEX => MEDIUM_RANGE,
199 COMPONENT_TYPE => DATE,
200 UNCONSTRAINED_ARRAY => FIRST_TEMPLATE,
201 COMPONENT_VALUE => TODAY) ;
203 PROCEDURE SECOND_TEST_PROCEDURE IS NEW TEST_PROCEDURE (
204 FIRST_INDEX => MONTH_TYPE,
205 SECOND_INDEX => DAY_TYPE,
206 COMPONENT_TYPE => SHORT_STRING,
207 UNCONSTRAINED_ARRAY => SECOND_TEMPLATE,
208 COMPONENT_VALUE => DEFAULT_STRING) ;
210 PROCEDURE THIRD_TEST_PROCEDURE IS NEW TEST_PROCEDURE (
211 FIRST_INDEX => CHARACTER,
212 SECOND_INDEX => BOOLEAN,
213 COMPONENT_TYPE => DAY_TYPE,
214 UNCONSTRAINED_ARRAY => THIRD_TEMPLATE,
215 COMPONENT_VALUE => DAY_TYPE'FIRST) ;
218 BEGIN -- C36205L
220 REPORT.TEST ( "C36205L","FOR GENERIC PROCEDURES, CHECK THAT " &
221 "ATTRIBUTES GIVE THE CORRECT VALUES FOR " &
222 "UNCONSTRAINED FORMAL PARAMETERS. BASIC " &
223 "CHECKS OF ARRAY OBJECTS AND WHOLE ARRAYS " &
224 "PASSED AS PARAMETERS TO GENERIC PROCEDURES");
226 FIRST_TEST_PROCEDURE (FIRST => FIRST_ARRAY,
227 FFIFS => -10,
228 FFILS => 10,
229 FSIFS => 27,
230 FSILS => 35,
231 FFLEN => 21,
232 FSLEN => 9,
233 FFIRT => 0,
234 FSIRT => 29,
235 SECOND => FOURTH_ARRAY,
236 SFIFS => 0,
237 SFILS => 27,
238 SSIFS => 75,
239 SSILS => 100,
240 SFLEN => 28,
241 SSLEN => 26,
242 SFIRT => 5,
243 SSIRT => 100,
244 REMARKS => "FIRST_TEST_PROCEDURE") ;
246 SECOND_TEST_PROCEDURE (FIRST => SECOND_ARRAY,
247 FFIFS => JAN,
248 FFILS => JUN,
249 FSIFS => 1,
250 FSILS => 25,
251 FFLEN => 6,
252 FSLEN => 25,
253 FFIRT => MAR,
254 FSIRT => 17,
255 SECOND => FIFTH_ARRAY,
256 SFIFS => JUL,
257 SFILS => OCT,
258 SSIFS => 6,
259 SSILS => 10,
260 SFLEN => 4,
261 SSLEN => 5,
262 SFIRT => JUL,
263 SSIRT => 6,
264 REMARKS => "SECOND_TEST_PROCEDURE") ;
266 THIRD_TEST_PROCEDURE (FIRST => THIRD_ARRAY,
267 FFIFS => 'A',
268 FFILS => 'Z',
269 FSIFS => FALSE,
270 FSILS => TRUE,
271 FFLEN => 26,
272 FSLEN => 2,
273 FFIRT => 'T',
274 FSIRT => TRUE,
275 SECOND => SIXTH_ARRAY,
276 SFIFS => 'X',
277 SFILS => 'Z',
278 SSIFS => TRUE,
279 SSILS => TRUE,
280 SFLEN => 3,
281 SSLEN => 1,
282 SFIRT => 'Z',
283 SSIRT => TRUE,
284 REMARKS => "THIRD_TEST_PROCEDURE") ;
286 REPORT.RESULT ;
288 END C36205L ;