annotate gcc/testsuite/ada/acats/tests/cxb/cxb5002.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 -- CXB5002.A
kono
parents:
diff changeset
2 --
kono
parents:
diff changeset
3 -- Grant of Unlimited Rights
kono
parents:
diff changeset
4 --
kono
parents:
diff changeset
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
kono
parents:
diff changeset
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
kono
parents:
diff changeset
7 -- unlimited rights in the software and documentation contained herein.
kono
parents:
diff changeset
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
kono
parents:
diff changeset
9 -- this public release, the Government intends to confer upon all
kono
parents:
diff changeset
10 -- recipients unlimited rights equal to those held by the Government.
kono
parents:
diff changeset
11 -- These rights include rights to use, duplicate, release or disclose the
kono
parents:
diff changeset
12 -- released technical data and computer software in whole or in part, in
kono
parents:
diff changeset
13 -- any manner and for any purpose whatsoever, and to have or permit others
kono
parents:
diff changeset
14 -- to do so.
kono
parents:
diff changeset
15 --
kono
parents:
diff changeset
16 -- DISCLAIMER
kono
parents:
diff changeset
17 --
kono
parents:
diff changeset
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
kono
parents:
diff changeset
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
kono
parents:
diff changeset
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
kono
parents:
diff changeset
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
kono
parents:
diff changeset
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
kono
parents:
diff changeset
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
kono
parents:
diff changeset
24 --*
kono
parents:
diff changeset
25 --
kono
parents:
diff changeset
26 -- OBJECTIVE:
kono
parents:
diff changeset
27 -- Check that the Function To_Fortran with a Character parameter will
kono
parents:
diff changeset
28 -- return the corresponding Fortran Character_Set value.
kono
parents:
diff changeset
29 --
kono
parents:
diff changeset
30 -- Check that the Function To_Ada with a Character_Set parameter will
kono
parents:
diff changeset
31 -- return the corresponding Ada Character value.
kono
parents:
diff changeset
32 --
kono
parents:
diff changeset
33 -- Check that the Function To_Fortran with a String parameter will
kono
parents:
diff changeset
34 -- return the corresponding Fortran_Character value.
kono
parents:
diff changeset
35 --
kono
parents:
diff changeset
36 -- Check that the Function To_Ada with a Fortran_Character parameter
kono
parents:
diff changeset
37 -- will return the corresponding Ada String value.
kono
parents:
diff changeset
38 --
kono
parents:
diff changeset
39 -- TEST DESCRIPTION:
kono
parents:
diff changeset
40 -- This test checks that the functions To_Fortran and To_Ada produce
kono
parents:
diff changeset
41 -- the correct results, based on a variety of parameter input values.
kono
parents:
diff changeset
42 --
kono
parents:
diff changeset
43 -- In the first series of subtests, the results of the function
kono
parents:
diff changeset
44 -- To_Fortran are compared against expected Character_Set type results.
kono
parents:
diff changeset
45 -- In the second series of subtests, the results of the function To_Ada
kono
parents:
diff changeset
46 -- are compared against expected String type results, and the length of
kono
parents:
diff changeset
47 -- the String result is also verified against the Fortran_Character type
kono
parents:
diff changeset
48 -- parameter.
kono
parents:
diff changeset
49 --
kono
parents:
diff changeset
50 -- This test uses Fixed, Bounded, and Unbounded_Strings in combination
kono
parents:
diff changeset
51 -- with the functions under validation.
kono
parents:
diff changeset
52 --
kono
parents:
diff changeset
53 -- This test assumes that the following characters are all included
kono
parents:
diff changeset
54 -- in the implementation defined type Interfaces.Fortran.Character_Set:
kono
parents:
diff changeset
55 -- ' ', 'a'..'z', 'A'..'Z', '1'..'9', '-', '_', '$', '#', and '*'.
kono
parents:
diff changeset
56 --
kono
parents:
diff changeset
57 -- APPLICABILITY CRITERIA:
kono
parents:
diff changeset
58 -- This test is applicable to all implementations that provide
kono
parents:
diff changeset
59 -- package Interfaces.Fortran. If an implementation provides
kono
parents:
diff changeset
60 -- package Interfaces.Fortran, this test must compile, execute, and
kono
parents:
diff changeset
61 -- report "PASSED".
kono
parents:
diff changeset
62 --
kono
parents:
diff changeset
63 -- This test does not apply to an implementation in which the Fortran
kono
parents:
diff changeset
64 -- character set ranges are not contiguous (e.g., EBCDIC).
kono
parents:
diff changeset
65 --
kono
parents:
diff changeset
66 --
kono
parents:
diff changeset
67 --
kono
parents:
diff changeset
68 -- CHANGE HISTORY:
kono
parents:
diff changeset
69 -- 11 Mar 96 SAIC Initial release for 2.1.
kono
parents:
diff changeset
70 -- 10 Jun 96 SAIC Incorporated reviewer comments for ACVC 2.1.
kono
parents:
diff changeset
71 -- 27 Oct 96 SAIC Incorporated reviewer comments.
kono
parents:
diff changeset
72 --
kono
parents:
diff changeset
73 --!
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 with Ada.Characters.Latin_1;
kono
parents:
diff changeset
76 with Ada.Exceptions;
kono
parents:
diff changeset
77 with Ada.Strings.Bounded;
kono
parents:
diff changeset
78 with Ada.Strings.Unbounded;
kono
parents:
diff changeset
79 with Ada.Unchecked_Conversion;
kono
parents:
diff changeset
80 with Interfaces.Fortran; -- N/A => ERROR
kono
parents:
diff changeset
81 with Report;
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 procedure CXB5002 is
kono
parents:
diff changeset
84 begin
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 Report.Test ("CXB5002", "Check that functions To_Fortran and To_Ada " &
kono
parents:
diff changeset
87 "produce correct results");
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 Test_Block:
kono
parents:
diff changeset
90 declare
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 package ACL renames Ada.Characters.Latin_1;
kono
parents:
diff changeset
93 package Bnd is new Ada.Strings.Bounded.Generic_Bounded_Length(10);
kono
parents:
diff changeset
94 package Unb renames Ada.Strings.Unbounded;
kono
parents:
diff changeset
95
kono
parents:
diff changeset
96 use Bnd, Unb;
kono
parents:
diff changeset
97 use Interfaces.Fortran;
kono
parents:
diff changeset
98 use Ada.Exceptions;
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 Null_Fortran_Character : constant Fortran_Character := "";
kono
parents:
diff changeset
101 Fortran_Character_1 : Fortran_Character(1..1) := " ";
kono
parents:
diff changeset
102 Fortran_Character_5 : Fortran_Character(1..5) := " ";
kono
parents:
diff changeset
103 Fortran_Character_10 : Fortran_Character(1..10) := " ";
kono
parents:
diff changeset
104 Fortran_Character_20 : Fortran_Character(1..20) :=
kono
parents:
diff changeset
105 " ";
kono
parents:
diff changeset
106 TC_Fortran_Character_1 : Fortran_Character(1..1) := "A";
kono
parents:
diff changeset
107 TC_Fortran_Character_5 : Fortran_Character(1..5) := "ab*de";
kono
parents:
diff changeset
108 TC_Fortran_Character_10 : Fortran_Character(1..10) := "$1a2b3C4D5";
kono
parents:
diff changeset
109 TC_Fortran_Character_20 : Fortran_Character(1..20) :=
kono
parents:
diff changeset
110 "1234-ABCD_6789#fghij";
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 Bnd_String : Bnd.Bounded_String :=
kono
parents:
diff changeset
113 Bnd.To_Bounded_String(" ");
kono
parents:
diff changeset
114 TC_Bnd_String : Bounded_String :=
kono
parents:
diff changeset
115 To_Bounded_String("$1a2b3C4D5");
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117 Unb_String : Unb.Unbounded_String :=
kono
parents:
diff changeset
118 Unb.To_Unbounded_String(" ");
kono
parents:
diff changeset
119 TC_Unb_String : Unbounded_String :=
kono
parents:
diff changeset
120 To_Unbounded_String("ab*de");
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 String_1 : String(1..1) := " ";
kono
parents:
diff changeset
123 String_5 : String(1..5) := " ";
kono
parents:
diff changeset
124 String_10 : String(1..10) := " ";
kono
parents:
diff changeset
125 String_20 : String(1..20) := " ";
kono
parents:
diff changeset
126 TC_String_1 : String(1..1) := "A";
kono
parents:
diff changeset
127 TC_String_20 : String(1..20) := "1234-ABCD_6789#fghij";
kono
parents:
diff changeset
128 Null_String : constant String := "";
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 Null_Character : constant Character := ACL.Nul;
kono
parents:
diff changeset
131 Character_A : constant Character := Character'Val(65);
kono
parents:
diff changeset
132 Character_Z : constant Character := Character'Val(90);
kono
parents:
diff changeset
133 TC_Character : Character := Character'First;
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 Null_Character_Set : Character_Set := To_Fortran(ACL.Nul);
kono
parents:
diff changeset
136 TC_Character_Set,
kono
parents:
diff changeset
137 TC_Low_Character_Set,
kono
parents:
diff changeset
138 TC_High_Character_Set : Character_Set := Character_Set'First;
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 -- The following procedure checks the results of function To_Ada.
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 procedure Check_Length (Str : in String;
kono
parents:
diff changeset
144 Ftn : in Fortran_Character;
kono
parents:
diff changeset
145 Num : in Natural) is
kono
parents:
diff changeset
146 begin
kono
parents:
diff changeset
147 if Str'Length /= Ftn'Length or
kono
parents:
diff changeset
148 Str'Length /= Num
kono
parents:
diff changeset
149 then
kono
parents:
diff changeset
150 Report.Failed("Incorrect result from Function To_Ada " &
kono
parents:
diff changeset
151 "with string length " & Integer'Image(Num));
kono
parents:
diff changeset
152 end if;
kono
parents:
diff changeset
153 end Check_Length;
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 -- To facilitate the conversion of Character-Character_Set data, the
kono
parents:
diff changeset
156 -- following functions have been instantiated.
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 function Character_to_Character_Set is
kono
parents:
diff changeset
159 new Ada.Unchecked_Conversion(Character, Character_Set);
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 function Character_Set_to_Character is
kono
parents:
diff changeset
162 new Ada.Unchecked_Conversion(Character_Set, Character);
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 begin
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 -- Check that the Function To_Fortran with a Character parameter
kono
parents:
diff changeset
167 -- will return the corresponding Fortran Character_Set value.
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 for TC_Character in ACL.LC_A..ACL.LC_Z loop
kono
parents:
diff changeset
170 if To_Fortran(Item => TC_Character) /=
kono
parents:
diff changeset
171 Character_to_Character_Set(TC_Character)
kono
parents:
diff changeset
172 then
kono
parents:
diff changeset
173 Report.Failed("Incorrect result from To_Fortran with lower " &
kono
parents:
diff changeset
174 "case alphabetic character input");
kono
parents:
diff changeset
175 end if;
kono
parents:
diff changeset
176 end loop;
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 for TC_Character in Character_A..Character_Z loop
kono
parents:
diff changeset
179 if To_Fortran(TC_Character) /=
kono
parents:
diff changeset
180 Character_to_Character_Set(TC_Character)
kono
parents:
diff changeset
181 then
kono
parents:
diff changeset
182 Report.Failed("Incorrect result from To_Fortran with upper " &
kono
parents:
diff changeset
183 "case alphabetic character input");
kono
parents:
diff changeset
184 end if;
kono
parents:
diff changeset
185 end loop;
kono
parents:
diff changeset
186
kono
parents:
diff changeset
187 if To_Fortran(Null_Character) /=
kono
parents:
diff changeset
188 Character_to_Character_Set(Null_Character)
kono
parents:
diff changeset
189 then
kono
parents:
diff changeset
190 Report.Failed
kono
parents:
diff changeset
191 ("Incorrect result from To_Fortran with null character input");
kono
parents:
diff changeset
192 end if;
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 -- Check that the Function To_Ada with a Character_Set parameter
kono
parents:
diff changeset
196 -- will return the corresponding Ada Character value.
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198 TC_Low_Character_Set := Character_to_Character_Set('a');
kono
parents:
diff changeset
199 TC_High_Character_Set := Character_to_Character_Set('z');
kono
parents:
diff changeset
200 for TC_Character_Set in TC_Low_Character_Set..TC_High_Character_Set loop
kono
parents:
diff changeset
201 if To_Ada(Item => TC_Character_Set) /=
kono
parents:
diff changeset
202 Character_Set_to_Character(TC_Character_Set)
kono
parents:
diff changeset
203 then
kono
parents:
diff changeset
204 Report.Failed("Incorrect result from To_Ada with lower case " &
kono
parents:
diff changeset
205 "alphabetic Character_Set input");
kono
parents:
diff changeset
206 end if;
kono
parents:
diff changeset
207 end loop;
kono
parents:
diff changeset
208
kono
parents:
diff changeset
209 TC_Low_Character_Set := Character_to_Character_Set('A');
kono
parents:
diff changeset
210 TC_High_Character_Set := Character_to_Character_Set('Z');
kono
parents:
diff changeset
211 for TC_Character_Set in TC_Low_Character_Set..TC_High_Character_Set loop
kono
parents:
diff changeset
212 if To_Ada(TC_Character_Set) /=
kono
parents:
diff changeset
213 Character_Set_to_Character(TC_Character_Set)
kono
parents:
diff changeset
214 then
kono
parents:
diff changeset
215 Report.Failed("Incorrect result from To_Ada with upper case " &
kono
parents:
diff changeset
216 "alphabetic Character_Set input");
kono
parents:
diff changeset
217 end if;
kono
parents:
diff changeset
218 end loop;
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 if To_Ada(Character_to_Character_Set(Null_Character)) /=
kono
parents:
diff changeset
221 Null_Character
kono
parents:
diff changeset
222 then
kono
parents:
diff changeset
223 Report.Failed("Incorrect result from To_Ada with a null " &
kono
parents:
diff changeset
224 "Character_Set input");
kono
parents:
diff changeset
225 end if;
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 -- Check that the Function To_Fortran with a String parameter
kono
parents:
diff changeset
229 -- will return the corresponding Fortran_Character value.
kono
parents:
diff changeset
230 -- Note: The type Fortran_Character is a character array type that
kono
parents:
diff changeset
231 -- corresponds to Ada type String.
kono
parents:
diff changeset
232
kono
parents:
diff changeset
233 Fortran_Character_1 := To_Fortran(Item => TC_String_1);
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235 if Fortran_Character_1 /= TC_Fortran_Character_1 then
kono
parents:
diff changeset
236 Report.Failed("Incorrect result from procedure To_Fortran - 1");
kono
parents:
diff changeset
237 end if;
kono
parents:
diff changeset
238
kono
parents:
diff changeset
239 Fortran_Character_5 := To_Fortran(To_String(TC_Unb_String));
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 if Fortran_Character_5 /= TC_Fortran_Character_5 then
kono
parents:
diff changeset
242 Report.Failed("Incorrect result from procedure To_Fortran - 2");
kono
parents:
diff changeset
243 end if;
kono
parents:
diff changeset
244
kono
parents:
diff changeset
245 Fortran_Character_10 := To_Fortran(To_String(TC_Bnd_String));
kono
parents:
diff changeset
246
kono
parents:
diff changeset
247 if Fortran_Character_10 /= TC_Fortran_Character_10 then
kono
parents:
diff changeset
248 Report.Failed("Incorrect result from procedure To_Fortran - 3");
kono
parents:
diff changeset
249 end if;
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 Fortran_Character_20 := To_Fortran(Item => TC_String_20);
kono
parents:
diff changeset
252
kono
parents:
diff changeset
253 if Fortran_Character_20 /= TC_Fortran_Character_20 then
kono
parents:
diff changeset
254 Report.Failed("Incorrect result from procedure To_Fortran - 4");
kono
parents:
diff changeset
255 end if;
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 if To_Fortran(Null_String) /= Null_Fortran_Character then
kono
parents:
diff changeset
258 Report.Failed("Incorrect result from procedure To_Fortran - 5");
kono
parents:
diff changeset
259 end if;
kono
parents:
diff changeset
260
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262 -- Check that the Function To_Ada with a Fortran_Character parameter
kono
parents:
diff changeset
263 -- will return the corresponding Ada String value.
kono
parents:
diff changeset
264
kono
parents:
diff changeset
265 String_1 := To_Ada(TC_Fortran_Character_1);
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 if String_1 /= TC_String_1 then
kono
parents:
diff changeset
268 Report.Failed("Incorrect value returned from function To_Ada - 1");
kono
parents:
diff changeset
269 end if;
kono
parents:
diff changeset
270
kono
parents:
diff changeset
271 Check_Length(To_Ada(TC_Fortran_Character_1),
kono
parents:
diff changeset
272 TC_Fortran_Character_1,
kono
parents:
diff changeset
273 Num => 1);
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275
kono
parents:
diff changeset
276 Unb_String := Unb.To_Unbounded_String(To_Ada(TC_Fortran_Character_5));
kono
parents:
diff changeset
277
kono
parents:
diff changeset
278 if Unb_String /= TC_Unb_String then
kono
parents:
diff changeset
279 Report.Failed("Incorrect value returned from function To_Ada - 2");
kono
parents:
diff changeset
280 end if;
kono
parents:
diff changeset
281
kono
parents:
diff changeset
282 Check_Length(To_Ada(TC_Fortran_Character_5),
kono
parents:
diff changeset
283 TC_Fortran_Character_5,
kono
parents:
diff changeset
284 Num => 5);
kono
parents:
diff changeset
285
kono
parents:
diff changeset
286
kono
parents:
diff changeset
287 Bnd_String := Bnd.To_Bounded_String
kono
parents:
diff changeset
288 (To_Ada(TC_Fortran_Character_10));
kono
parents:
diff changeset
289
kono
parents:
diff changeset
290 if Bnd_String /= TC_Bnd_String then
kono
parents:
diff changeset
291 Report.Failed("Incorrect value returned from function To_Ada - 3");
kono
parents:
diff changeset
292 end if;
kono
parents:
diff changeset
293
kono
parents:
diff changeset
294 Check_Length(To_Ada(TC_Fortran_Character_10),
kono
parents:
diff changeset
295 TC_Fortran_Character_10,
kono
parents:
diff changeset
296 Num => 10);
kono
parents:
diff changeset
297
kono
parents:
diff changeset
298
kono
parents:
diff changeset
299 String_20 := To_Ada(TC_Fortran_Character_20);
kono
parents:
diff changeset
300
kono
parents:
diff changeset
301 if String_20 /= TC_String_20 then
kono
parents:
diff changeset
302 Report.Failed("Incorrect value returned from function To_Ada - 4");
kono
parents:
diff changeset
303 end if;
kono
parents:
diff changeset
304
kono
parents:
diff changeset
305 Check_Length(To_Ada(TC_Fortran_Character_20),
kono
parents:
diff changeset
306 TC_Fortran_Character_20,
kono
parents:
diff changeset
307 Num => 20);
kono
parents:
diff changeset
308
kono
parents:
diff changeset
309 if To_Ada(Null_Character_Set) /= Null_Character then
kono
parents:
diff changeset
310 Report.Failed("Incorrect value returned from function To_Ada - 5");
kono
parents:
diff changeset
311 end if;
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313
kono
parents:
diff changeset
314 -- Check the two functions when used in combination.
kono
parents:
diff changeset
315
kono
parents:
diff changeset
316 if To_Ada(Item => To_Fortran("This is a test")) /=
kono
parents:
diff changeset
317 "This is a test" or
kono
parents:
diff changeset
318 To_Ada(To_Fortran("1234567890abcdeFGHIJ")) /=
kono
parents:
diff changeset
319 Report.Ident_Str("1234567890abcdeFGHIJ")
kono
parents:
diff changeset
320 then
kono
parents:
diff changeset
321 Report.Failed("Incorrect result returned when using the " &
kono
parents:
diff changeset
322 "functions To_Ada and To_Fortran in combination");
kono
parents:
diff changeset
323 end if;
kono
parents:
diff changeset
324
kono
parents:
diff changeset
325
kono
parents:
diff changeset
326 exception
kono
parents:
diff changeset
327 when The_Error : others =>
kono
parents:
diff changeset
328 Report.Failed("The following exception was raised in the " &
kono
parents:
diff changeset
329 "Test_Block: " & Exception_Name(The_Error));
kono
parents:
diff changeset
330 end Test_Block;
kono
parents:
diff changeset
331
kono
parents:
diff changeset
332 Report.Result;
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334 end CXB5002;