annotate gcc/testsuite/ada/acats/tests/cxf/cxf2a02.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 -- CXF2A02.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 multiplying operators for a decimal fixed point type
kono
parents:
diff changeset
28 -- return values that are integral multiples of the small of the type.
kono
parents:
diff changeset
29 -- Check the case where the operand and result types are the same.
kono
parents:
diff changeset
30 --
kono
parents:
diff changeset
31 -- Check that if the mathematical result is between multiples of the
kono
parents:
diff changeset
32 -- small of the result type, the result is truncated toward zero.
kono
parents:
diff changeset
33 --
kono
parents:
diff changeset
34 -- TEST DESCRIPTION:
kono
parents:
diff changeset
35 -- The test verifies that decimal multiplication and division behave as
kono
parents:
diff changeset
36 -- expected for types with various digits, delta, and Machine_Radix
kono
parents:
diff changeset
37 -- values.
kono
parents:
diff changeset
38 --
kono
parents:
diff changeset
39 -- The iteration, operation, and operand counts in the foundation, and
kono
parents:
diff changeset
40 -- the operations and operand tables in the test, are given values such
kono
parents:
diff changeset
41 -- that, when the operations loop is complete, truncation of inexact
kono
parents:
diff changeset
42 -- results should cause the result returned by the operations loop to be
kono
parents:
diff changeset
43 -- the same as that used to initialize the loop's cumulator variable (in
kono
parents:
diff changeset
44 -- this test, one).
kono
parents:
diff changeset
45 --
kono
parents:
diff changeset
46 -- TEST FILES:
kono
parents:
diff changeset
47 -- This test consists of the following files:
kono
parents:
diff changeset
48 --
kono
parents:
diff changeset
49 -- FXF2A00.A
kono
parents:
diff changeset
50 -- -> CXF2A02.A
kono
parents:
diff changeset
51 --
kono
parents:
diff changeset
52 -- APPLICABILITY CRITERIA:
kono
parents:
diff changeset
53 -- This test is only applicable for a compiler attempting validation
kono
parents:
diff changeset
54 -- for the Information Systems Annex.
kono
parents:
diff changeset
55 --
kono
parents:
diff changeset
56 --
kono
parents:
diff changeset
57 -- CHANGE HISTORY:
kono
parents:
diff changeset
58 -- 13 Mar 96 SAIC Prerelease version for ACVC 2.1.
kono
parents:
diff changeset
59 -- 04 Aug 96 SAIC Updated prologue.
kono
parents:
diff changeset
60 --
kono
parents:
diff changeset
61 --!
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 package CXF2A02_0 is
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 type Micro is delta 10.0**(-5) digits 6; -- range -9.99999 ..
kono
parents:
diff changeset
68 for Micro'Machine_Radix use 2; -- +9.99999
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 function Multiply (Left, Right : Micro) return Micro;
kono
parents:
diff changeset
71 function Divide (Left, Right : Micro) return Micro;
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 type Micro_Optr_Ptr is access function (Left, Right : Micro) return Micro;
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 Micro_Mult : Micro_Optr_Ptr := Multiply'Access;
kono
parents:
diff changeset
77 Micro_Div : Micro_Optr_Ptr := Divide'Access;
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 type Basic is delta 0.01 digits 11; -- range -999,999,999.99 ..
kono
parents:
diff changeset
82 for Basic'Machine_Radix use 10; -- +999,999,999.99
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 function Multiply (Left, Right : Basic) return Basic;
kono
parents:
diff changeset
85 function Divide (Left, Right : Basic) return Basic;
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 type Basic_Optr_Ptr is access function (Left, Right : Basic) return Basic;
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 Basic_Mult : Basic_Optr_Ptr := Multiply'Access;
kono
parents:
diff changeset
91 Basic_Div : Basic_Optr_Ptr := Divide'Access;
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 type Broad is delta 10.0**(-3) digits 10; -- range -9,999,999.999 ..
kono
parents:
diff changeset
96 for Broad'Machine_Radix use 2; -- +9,999,999.999
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 function Multiply (Left, Right : Broad) return Broad;
kono
parents:
diff changeset
99 function Divide (Left, Right : Broad) return Broad;
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101
kono
parents:
diff changeset
102 type Broad_Optr_Ptr is access function (Left, Right : Broad) return Broad;
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 Broad_Mult : Broad_Optr_Ptr := Multiply'Access;
kono
parents:
diff changeset
105 Broad_Div : Broad_Optr_Ptr := Divide'Access;
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 end CXF2A02_0;
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 --==================================================================--
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 package body CXF2A02_0 is
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
118
kono
parents:
diff changeset
119 function Multiply (Left, Right : Micro) return Micro is
kono
parents:
diff changeset
120 begin
kono
parents:
diff changeset
121 return (Left * Right); -- Decimal fixed multiplication.
kono
parents:
diff changeset
122 end Multiply;
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 function Divide (Left, Right : Micro) return Micro is
kono
parents:
diff changeset
125 begin
kono
parents:
diff changeset
126 return (Left / Right); -- Decimal fixed division.
kono
parents:
diff changeset
127 end Divide;
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 function Multiply (Left, Right : Basic) return Basic is
kono
parents:
diff changeset
132 begin
kono
parents:
diff changeset
133 return (Left * Right); -- Decimal fixed multiplication.
kono
parents:
diff changeset
134 end Multiply;
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 function Divide (Left, Right : Basic) return Basic is
kono
parents:
diff changeset
137 begin
kono
parents:
diff changeset
138 return (Left / Right); -- Decimal fixed division.
kono
parents:
diff changeset
139 end Divide;
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 function Multiply (Left, Right : Broad) return Broad is
kono
parents:
diff changeset
144 begin
kono
parents:
diff changeset
145 return (Left * Right); -- Decimal fixed multiplication.
kono
parents:
diff changeset
146 end Multiply;
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 function Divide (Left, Right : Broad) return Broad is
kono
parents:
diff changeset
149 begin
kono
parents:
diff changeset
150 return (Left / Right); -- Decimal fixed division.
kono
parents:
diff changeset
151 end Divide;
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 end CXF2A02_0;
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 --==================================================================--
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 with FXF2A00;
kono
parents:
diff changeset
162 package CXF2A02_0.CXF2A02_1 is
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 type Micro_Ops is array (FXF2A00.Optr_Range) of Micro_Optr_Ptr;
kono
parents:
diff changeset
167 type Micro_Opnds is array (FXF2A00.Opnd_Range) of Micro;
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 Micro_Mult_Operator_Table : Micro_Ops := ( Micro_Mult, Micro_Mult,
kono
parents:
diff changeset
170 Micro_Mult, Micro_Mult,
kono
parents:
diff changeset
171 Micro_Mult, Micro_Mult );
kono
parents:
diff changeset
172
kono
parents:
diff changeset
173 Micro_Div_Operator_Table : Micro_Ops := ( Micro_Div, Micro_Div,
kono
parents:
diff changeset
174 Micro_Div, Micro_Div,
kono
parents:
diff changeset
175 Micro_Div, Micro_Div );
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 Micro_Mult_Operand_Table : Micro_Opnds := ( 2.35119,
kono
parents:
diff changeset
178 0.05892,
kono
parents:
diff changeset
179 9.58122,
kono
parents:
diff changeset
180 0.80613,
kono
parents:
diff changeset
181 0.93462 );
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 Micro_Div_Operand_Table : Micro_Opnds := ( 0.58739,
kono
parents:
diff changeset
184 4.90012,
kono
parents:
diff changeset
185 0.08765,
kono
parents:
diff changeset
186 0.71577,
kono
parents:
diff changeset
187 5.53768 );
kono
parents:
diff changeset
188
kono
parents:
diff changeset
189 function Test_Micro_Ops is new FXF2A00.Operations_Loop
kono
parents:
diff changeset
190 (Decimal_Fixed => Micro,
kono
parents:
diff changeset
191 Operator_Ptr => Micro_Optr_Ptr,
kono
parents:
diff changeset
192 Operator_Table => Micro_Ops,
kono
parents:
diff changeset
193 Operand_Table => Micro_Opnds);
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 type Basic_Ops is array (FXF2A00.Optr_Range) of Basic_Optr_Ptr;
kono
parents:
diff changeset
198 type Basic_Opnds is array (FXF2A00.Opnd_Range) of Basic;
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 Basic_Mult_Operator_Table : Basic_Ops := ( Basic_Mult, Basic_Mult,
kono
parents:
diff changeset
201 Basic_Mult, Basic_Mult,
kono
parents:
diff changeset
202 Basic_Mult, Basic_Mult );
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 Basic_Div_Operator_Table : Basic_Ops := ( Basic_Div, Basic_Div,
kono
parents:
diff changeset
205 Basic_Div, Basic_Div,
kono
parents:
diff changeset
206 Basic_Div, Basic_Div );
kono
parents:
diff changeset
207
kono
parents:
diff changeset
208 Basic_Mult_Operand_Table : Basic_Opnds := ( 127.10,
kono
parents:
diff changeset
209 0.02,
kono
parents:
diff changeset
210 0.87,
kono
parents:
diff changeset
211 45.67,
kono
parents:
diff changeset
212 0.01 );
kono
parents:
diff changeset
213
kono
parents:
diff changeset
214 Basic_Div_Operand_Table : Basic_Opnds := ( 0.03,
kono
parents:
diff changeset
215 0.08,
kono
parents:
diff changeset
216 23.57,
kono
parents:
diff changeset
217 0.11,
kono
parents:
diff changeset
218 159.11 );
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 function Test_Basic_Ops is new FXF2A00.Operations_Loop
kono
parents:
diff changeset
221 (Decimal_Fixed => Basic,
kono
parents:
diff changeset
222 Operator_Ptr => Basic_Optr_Ptr,
kono
parents:
diff changeset
223 Operator_Table => Basic_Ops,
kono
parents:
diff changeset
224 Operand_Table => Basic_Opnds);
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 type Broad_Ops is array (FXF2A00.Optr_Range) of Broad_Optr_Ptr;
kono
parents:
diff changeset
229 type Broad_Opnds is array (FXF2A00.Opnd_Range) of Broad;
kono
parents:
diff changeset
230
kono
parents:
diff changeset
231 Broad_Mult_Operator_Table : Broad_Ops := ( Broad_Mult, Broad_Mult,
kono
parents:
diff changeset
232 Broad_Mult, Broad_Mult,
kono
parents:
diff changeset
233 Broad_Mult, Broad_Mult );
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235 Broad_Div_Operator_Table : Broad_Ops := ( Broad_Div, Broad_Div,
kono
parents:
diff changeset
236 Broad_Div, Broad_Div,
kono
parents:
diff changeset
237 Broad_Div, Broad_Div );
kono
parents:
diff changeset
238
kono
parents:
diff changeset
239 Broad_Mult_Operand_Table : Broad_Opnds := ( 589.720,
kono
parents:
diff changeset
240 0.106,
kono
parents:
diff changeset
241 21.018,
kono
parents:
diff changeset
242 0.002,
kono
parents:
diff changeset
243 0.381 );
kono
parents:
diff changeset
244
kono
parents:
diff changeset
245 Broad_Div_Operand_Table : Broad_Opnds := ( 0.008,
kono
parents:
diff changeset
246 0.793,
kono
parents:
diff changeset
247 9.092,
kono
parents:
diff changeset
248 214.300,
kono
parents:
diff changeset
249 0.080 );
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 function Test_Broad_Ops is new FXF2A00.Operations_Loop
kono
parents:
diff changeset
252 (Decimal_Fixed => Broad,
kono
parents:
diff changeset
253 Operator_Ptr => Broad_Optr_Ptr,
kono
parents:
diff changeset
254 Operator_Table => Broad_Ops,
kono
parents:
diff changeset
255 Operand_Table => Broad_Opnds);
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 end CXF2A02_0.CXF2A02_1;
kono
parents:
diff changeset
260
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262 --==================================================================--
kono
parents:
diff changeset
263
kono
parents:
diff changeset
264
kono
parents:
diff changeset
265 with CXF2A02_0.CXF2A02_1;
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 with Report;
kono
parents:
diff changeset
268 procedure CXF2A02 is
kono
parents:
diff changeset
269 package Data renames CXF2A02_0.CXF2A02_1;
kono
parents:
diff changeset
270
kono
parents:
diff changeset
271 use type CXF2A02_0.Micro;
kono
parents:
diff changeset
272 use type CXF2A02_0.Basic;
kono
parents:
diff changeset
273 use type CXF2A02_0.Broad;
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275 Micro_Expected : constant CXF2A02_0.Micro := 1.0;
kono
parents:
diff changeset
276 Basic_Expected : constant CXF2A02_0.Basic := 1.0;
kono
parents:
diff changeset
277 Broad_Expected : constant CXF2A02_0.Broad := 1.0;
kono
parents:
diff changeset
278
kono
parents:
diff changeset
279 Micro_Actual : CXF2A02_0.Micro;
kono
parents:
diff changeset
280 Basic_Actual : CXF2A02_0.Basic;
kono
parents:
diff changeset
281 Broad_Actual : CXF2A02_0.Broad;
kono
parents:
diff changeset
282 begin
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284 Report.Test ("CXF2A02", "Check decimal multiplication and division, " &
kono
parents:
diff changeset
285 "where the operand and result types are the same");
kono
parents:
diff changeset
286
kono
parents:
diff changeset
287 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
288
kono
parents:
diff changeset
289 Micro_Actual := 0.0;
kono
parents:
diff changeset
290 Micro_Actual := Data.Test_Micro_Ops (1.0,
kono
parents:
diff changeset
291 Data.Micro_Mult_Operator_Table,
kono
parents:
diff changeset
292 Data.Micro_Mult_Operand_Table);
kono
parents:
diff changeset
293
kono
parents:
diff changeset
294 if Micro_Actual /= Micro_Expected then
kono
parents:
diff changeset
295 Report.Failed ("Wrong result for type Micro multiplication");
kono
parents:
diff changeset
296 end if;
kono
parents:
diff changeset
297
kono
parents:
diff changeset
298
kono
parents:
diff changeset
299 Micro_Actual := 0.0;
kono
parents:
diff changeset
300 Micro_Actual := Data.Test_Micro_Ops (1.0,
kono
parents:
diff changeset
301 Data.Micro_Div_Operator_Table,
kono
parents:
diff changeset
302 Data.Micro_Div_Operand_Table);
kono
parents:
diff changeset
303
kono
parents:
diff changeset
304 if Micro_Actual /= Micro_Expected then
kono
parents:
diff changeset
305 Report.Failed ("Wrong result for type Micro division");
kono
parents:
diff changeset
306 end if;
kono
parents:
diff changeset
307
kono
parents:
diff changeset
308 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310 Basic_Actual := 0.0;
kono
parents:
diff changeset
311 Basic_Actual := Data.Test_Basic_Ops (1.0,
kono
parents:
diff changeset
312 Data.Basic_Mult_Operator_Table,
kono
parents:
diff changeset
313 Data.Basic_Mult_Operand_Table);
kono
parents:
diff changeset
314
kono
parents:
diff changeset
315 if Basic_Actual /= Basic_Expected then
kono
parents:
diff changeset
316 Report.Failed ("Wrong result for type Basic multiplication");
kono
parents:
diff changeset
317 end if;
kono
parents:
diff changeset
318
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320 Basic_Actual := 0.0;
kono
parents:
diff changeset
321 Basic_Actual := Data.Test_Basic_Ops (1.0,
kono
parents:
diff changeset
322 Data.Basic_Div_Operator_Table,
kono
parents:
diff changeset
323 Data.Basic_Div_Operand_Table);
kono
parents:
diff changeset
324
kono
parents:
diff changeset
325 if Basic_Actual /= Basic_Expected then
kono
parents:
diff changeset
326 Report.Failed ("Wrong result for type Basic division");
kono
parents:
diff changeset
327 end if;
kono
parents:
diff changeset
328
kono
parents:
diff changeset
329 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
330
kono
parents:
diff changeset
331 Broad_Actual := 0.0;
kono
parents:
diff changeset
332 Broad_Actual := Data.Test_Broad_Ops (1.0,
kono
parents:
diff changeset
333 Data.Broad_Mult_Operator_Table,
kono
parents:
diff changeset
334 Data.Broad_Mult_Operand_Table);
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336 if Broad_Actual /= Broad_Expected then
kono
parents:
diff changeset
337 Report.Failed ("Wrong result for type Broad multiplication");
kono
parents:
diff changeset
338 end if;
kono
parents:
diff changeset
339
kono
parents:
diff changeset
340
kono
parents:
diff changeset
341 Broad_Actual := 0.0;
kono
parents:
diff changeset
342 Broad_Actual := Data.Test_Broad_Ops (1.0,
kono
parents:
diff changeset
343 Data.Broad_Div_Operator_Table,
kono
parents:
diff changeset
344 Data.Broad_Div_Operand_Table);
kono
parents:
diff changeset
345
kono
parents:
diff changeset
346 if Broad_Actual /= Broad_Expected then
kono
parents:
diff changeset
347 Report.Failed ("Wrong result for type Broad division");
kono
parents:
diff changeset
348 end if;
kono
parents:
diff changeset
349
kono
parents:
diff changeset
350 ---=---=---=---=---=---=---=---=---=---=---
kono
parents:
diff changeset
351
kono
parents:
diff changeset
352 Report.Result;
kono
parents:
diff changeset
353
kono
parents:
diff changeset
354 end CXF2A02;