annotate gcc/testsuite/ada/acats/tests/cxg/cxg2002.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 -- CXG2002.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 complex "abs" or modulus function returns
kono
parents:
diff changeset
28 -- results that are within the error bound allowed.
kono
parents:
diff changeset
29 --
kono
parents:
diff changeset
30 -- TEST DESCRIPTION:
kono
parents:
diff changeset
31 -- This test uses a generic package to compute and check the
kono
parents:
diff changeset
32 -- values of the modulus function. In addition, a non-generic
kono
parents:
diff changeset
33 -- copy of this package is used to check the non-generic package
kono
parents:
diff changeset
34 -- Ada.Numerics.Complex_Types.
kono
parents:
diff changeset
35 -- Of special interest is the case where either the real or
kono
parents:
diff changeset
36 -- the imaginary part of the argument is very large while the
kono
parents:
diff changeset
37 -- other part is very small or 0.
kono
parents:
diff changeset
38 -- We want to check that the value is computed such that
kono
parents:
diff changeset
39 -- an overflow does not occur. If computed directly from the
kono
parents:
diff changeset
40 -- definition
kono
parents:
diff changeset
41 -- abs (x+yi) = sqrt(x**2 + y**2)
kono
parents:
diff changeset
42 -- then overflow or underflow is much more likely than if the
kono
parents:
diff changeset
43 -- argument is normalized first.
kono
parents:
diff changeset
44 --
kono
parents:
diff changeset
45 -- SPECIAL REQUIREMENTS
kono
parents:
diff changeset
46 -- The Strict Mode for the numerical accuracy must be
kono
parents:
diff changeset
47 -- selected. The method by which this mode is selected
kono
parents:
diff changeset
48 -- is implementation dependent.
kono
parents:
diff changeset
49 --
kono
parents:
diff changeset
50 -- APPLICABILITY CRITERIA:
kono
parents:
diff changeset
51 -- This test applies only to implementations supporting the
kono
parents:
diff changeset
52 -- Numerics Annex.
kono
parents:
diff changeset
53 -- This test only applies to the Strict Mode for numerical
kono
parents:
diff changeset
54 -- accuracy.
kono
parents:
diff changeset
55 --
kono
parents:
diff changeset
56 --
kono
parents:
diff changeset
57 -- CHANGE HISTORY:
kono
parents:
diff changeset
58 -- 31 JAN 96 SAIC Initial release for 2.1
kono
parents:
diff changeset
59 -- 02 JUN 98 EDS Add parens to intermediate calculations.
kono
parents:
diff changeset
60 --!
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 --
kono
parents:
diff changeset
63 -- Reference:
kono
parents:
diff changeset
64 -- Problems and Methodologies in Mathematical Software Production;
kono
parents:
diff changeset
65 -- editors: P. C. Messina and A Murli;
kono
parents:
diff changeset
66 -- Lecture Notes in Computer Science
kono
parents:
diff changeset
67 -- Volume 142
kono
parents:
diff changeset
68 -- Springer Verlag 1982
kono
parents:
diff changeset
69 --
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 with System;
kono
parents:
diff changeset
72 with Report;
kono
parents:
diff changeset
73 with Ada.Numerics.Generic_Complex_Types;
kono
parents:
diff changeset
74 with Ada.Numerics.Complex_Types;
kono
parents:
diff changeset
75 procedure CXG2002 is
kono
parents:
diff changeset
76 Verbose : constant Boolean := False;
kono
parents:
diff changeset
77 Maximum_Relative_Error : constant := 3.0;
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 generic
kono
parents:
diff changeset
80 type Real is digits <>;
kono
parents:
diff changeset
81 package Generic_Check is
kono
parents:
diff changeset
82 procedure Do_Test;
kono
parents:
diff changeset
83 end Generic_Check;
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 package body Generic_Check is
kono
parents:
diff changeset
86 package Complex_Types is new
kono
parents:
diff changeset
87 Ada.Numerics.Generic_Complex_Types (Real);
kono
parents:
diff changeset
88 use Complex_Types;
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 procedure Check (Actual, Expected : Real;
kono
parents:
diff changeset
91 Test_Name : String;
kono
parents:
diff changeset
92 MRE : Real := Maximum_Relative_Error) is
kono
parents:
diff changeset
93 Rel_Error,
kono
parents:
diff changeset
94 Abs_Error,
kono
parents:
diff changeset
95 Max_Error : Real;
kono
parents:
diff changeset
96 begin
kono
parents:
diff changeset
97 -- In the case where the expected result is very small or 0
kono
parents:
diff changeset
98 -- we compute the maximum error as a multiple of Model_Epsilon instead
kono
parents:
diff changeset
99 -- of Model_Epsilon and Expected.
kono
parents:
diff changeset
100 Rel_Error := MRE * (abs Expected * Real'Model_Epsilon);
kono
parents:
diff changeset
101 Abs_Error := MRE * Real'Model_Epsilon;
kono
parents:
diff changeset
102 if Rel_Error > Abs_Error then
kono
parents:
diff changeset
103 Max_Error := Rel_Error;
kono
parents:
diff changeset
104 else
kono
parents:
diff changeset
105 Max_Error := Abs_Error;
kono
parents:
diff changeset
106 end if;
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 if abs (Actual - Expected) > Max_Error then
kono
parents:
diff changeset
109 Report.Failed (Test_Name &
kono
parents:
diff changeset
110 " actual: " & Real'Image (Actual) &
kono
parents:
diff changeset
111 " expected: " & Real'Image (Expected) &
kono
parents:
diff changeset
112 " difference: " &
kono
parents:
diff changeset
113 Real'Image (Expected - Actual) &
kono
parents:
diff changeset
114 " max_err:" & Real'Image (Max_Error) );
kono
parents:
diff changeset
115 elsif Verbose then
kono
parents:
diff changeset
116 if Actual = Expected then
kono
parents:
diff changeset
117 Report.Comment (Test_Name & " exact result");
kono
parents:
diff changeset
118 else
kono
parents:
diff changeset
119 Report.Comment (Test_Name & " passed");
kono
parents:
diff changeset
120 end if;
kono
parents:
diff changeset
121 end if;
kono
parents:
diff changeset
122 end Check;
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124
kono
parents:
diff changeset
125 procedure Do_Test is
kono
parents:
diff changeset
126 Z : Complex;
kono
parents:
diff changeset
127 X : Real;
kono
parents:
diff changeset
128 T : Real;
kono
parents:
diff changeset
129 begin
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 --- test 1 ---
kono
parents:
diff changeset
132 begin
kono
parents:
diff changeset
133 T := Real'Safe_Last;
kono
parents:
diff changeset
134 Z := T + 0.0*i;
kono
parents:
diff changeset
135 X := abs Z;
kono
parents:
diff changeset
136 Check (X, T, "test 1 -- abs(bigreal + 0i)");
kono
parents:
diff changeset
137 exception
kono
parents:
diff changeset
138 when Constraint_Error =>
kono
parents:
diff changeset
139 Report.Failed ("Constraint_Error raised in test 1");
kono
parents:
diff changeset
140 when others =>
kono
parents:
diff changeset
141 Report.Failed ("exception in test 1");
kono
parents:
diff changeset
142 end;
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 --- test 2 ---
kono
parents:
diff changeset
145 begin
kono
parents:
diff changeset
146 T := Real'Safe_Last;
kono
parents:
diff changeset
147 Z := 0.0 + T*i;
kono
parents:
diff changeset
148 X := Modulus (Z);
kono
parents:
diff changeset
149 Check (X, T, "test 2 -- abs(0 + bigreal*i)");
kono
parents:
diff changeset
150 exception
kono
parents:
diff changeset
151 when Constraint_Error =>
kono
parents:
diff changeset
152 Report.Failed ("Constraint_Error raised in test 2");
kono
parents:
diff changeset
153 when others =>
kono
parents:
diff changeset
154 Report.Failed ("exception in test 2");
kono
parents:
diff changeset
155 end;
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 --- test 3 ---
kono
parents:
diff changeset
158 begin
kono
parents:
diff changeset
159 Z := 3.0 + 4.0*i;
kono
parents:
diff changeset
160 X := abs Z;
kono
parents:
diff changeset
161 Check (X, 5.0 , "test 3 -- abs(3 + 4*i)");
kono
parents:
diff changeset
162 exception
kono
parents:
diff changeset
163 when Constraint_Error =>
kono
parents:
diff changeset
164 Report.Failed ("Constraint_Error raised in test 3");
kono
parents:
diff changeset
165 when others =>
kono
parents:
diff changeset
166 Report.Failed ("exception in test 3");
kono
parents:
diff changeset
167 end;
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 --- test 4 ---
kono
parents:
diff changeset
170 declare
kono
parents:
diff changeset
171 S : Real;
kono
parents:
diff changeset
172 begin
kono
parents:
diff changeset
173 S := Real(Real'Machine_Radix) ** (Real'Machine_EMax - 3);
kono
parents:
diff changeset
174 Z := 3.0 * S + 4.0*S*i;
kono
parents:
diff changeset
175 X := abs Z;
kono
parents:
diff changeset
176 Check (X, 5.0*S, "test 4 -- abs(3S + 4S*i) for large S",
kono
parents:
diff changeset
177 5.0*Real'Model_Epsilon);
kono
parents:
diff changeset
178 exception
kono
parents:
diff changeset
179 when Constraint_Error =>
kono
parents:
diff changeset
180 Report.Failed ("Constraint_Error raised in test 4");
kono
parents:
diff changeset
181 when others =>
kono
parents:
diff changeset
182 Report.Failed ("exception in test 4");
kono
parents:
diff changeset
183 end;
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 --- test 5 ---
kono
parents:
diff changeset
186 begin
kono
parents:
diff changeset
187 T := Real'Model_Small;
kono
parents:
diff changeset
188 Z := T + 0.0*i;
kono
parents:
diff changeset
189 X := abs Z;
kono
parents:
diff changeset
190 Check (X, T , "test 5 -- abs(small + 0*i)");
kono
parents:
diff changeset
191 exception
kono
parents:
diff changeset
192 when Constraint_Error =>
kono
parents:
diff changeset
193 Report.Failed ("Constraint_Error raised in test 5");
kono
parents:
diff changeset
194 when others =>
kono
parents:
diff changeset
195 Report.Failed ("exception in test 5");
kono
parents:
diff changeset
196 end;
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198 --- test 6 ---
kono
parents:
diff changeset
199 begin
kono
parents:
diff changeset
200 T := Real'Model_Small;
kono
parents:
diff changeset
201 Z := 0.0 + T*i;
kono
parents:
diff changeset
202 X := abs Z;
kono
parents:
diff changeset
203 Check (X, T , "test 6 -- abs(0 + small*i)");
kono
parents:
diff changeset
204 exception
kono
parents:
diff changeset
205 when Constraint_Error =>
kono
parents:
diff changeset
206 Report.Failed ("Constraint_Error raised in test 6");
kono
parents:
diff changeset
207 when others =>
kono
parents:
diff changeset
208 Report.Failed ("exception in test 6");
kono
parents:
diff changeset
209 end;
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 --- test 7 ---
kono
parents:
diff changeset
212 declare
kono
parents:
diff changeset
213 S : Real;
kono
parents:
diff changeset
214 begin
kono
parents:
diff changeset
215 S := Real(Real'Machine_Radix) ** (Real'Model_EMin + 3);
kono
parents:
diff changeset
216 Z := 3.0 * S + 4.0*S*i;
kono
parents:
diff changeset
217 X := abs Z;
kono
parents:
diff changeset
218 Check (X, 5.0*S, "test 7 -- abs(3S + 4S*i) for small S",
kono
parents:
diff changeset
219 5.0*Real'Model_Epsilon);
kono
parents:
diff changeset
220 exception
kono
parents:
diff changeset
221 when Constraint_Error =>
kono
parents:
diff changeset
222 Report.Failed ("Constraint_Error raised in test 7");
kono
parents:
diff changeset
223 when others =>
kono
parents:
diff changeset
224 Report.Failed ("exception in test 7");
kono
parents:
diff changeset
225 end;
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227 --- test 8 ---
kono
parents:
diff changeset
228 declare
kono
parents:
diff changeset
229 -- CRC Standard Mathematical Tables; 23rd Edition; pg 738
kono
parents:
diff changeset
230 Sqrt2 : constant :=
kono
parents:
diff changeset
231 1.41421_35623_73095_04880_16887_24209_69807_85696_71875_37695;
kono
parents:
diff changeset
232 begin
kono
parents:
diff changeset
233 Z := 1.0 + 1.0*i;
kono
parents:
diff changeset
234 X := abs Z;
kono
parents:
diff changeset
235 Check (X, Sqrt2 , "test 8 -- abs(1 + 1*i)");
kono
parents:
diff changeset
236 exception
kono
parents:
diff changeset
237 when Constraint_Error =>
kono
parents:
diff changeset
238 Report.Failed ("Constraint_Error raised in test 8");
kono
parents:
diff changeset
239 when others =>
kono
parents:
diff changeset
240 Report.Failed ("exception in test 8");
kono
parents:
diff changeset
241 end;
kono
parents:
diff changeset
242
kono
parents:
diff changeset
243 --- test 9 ---
kono
parents:
diff changeset
244 begin
kono
parents:
diff changeset
245 T := 0.0;
kono
parents:
diff changeset
246 Z := T + 0.0*i;
kono
parents:
diff changeset
247 X := abs Z;
kono
parents:
diff changeset
248 Check (X, T , "test 5 -- abs(0 + 0*i)");
kono
parents:
diff changeset
249 exception
kono
parents:
diff changeset
250 when Constraint_Error =>
kono
parents:
diff changeset
251 Report.Failed ("Constraint_Error raised in test 9");
kono
parents:
diff changeset
252 when others =>
kono
parents:
diff changeset
253 Report.Failed ("exception in test 9");
kono
parents:
diff changeset
254 end;
kono
parents:
diff changeset
255 end Do_Test;
kono
parents:
diff changeset
256 end Generic_Check;
kono
parents:
diff changeset
257
kono
parents:
diff changeset
258 -----------------------------------------------------------------------
kono
parents:
diff changeset
259 --- non generic copy of the above generic package
kono
parents:
diff changeset
260 -----------------------------------------------------------------------
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262 package Non_Generic_Check is
kono
parents:
diff changeset
263 subtype Real is Float;
kono
parents:
diff changeset
264 procedure Do_Test;
kono
parents:
diff changeset
265 end Non_Generic_Check;
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 package body Non_Generic_Check is
kono
parents:
diff changeset
268 use Ada.Numerics.Complex_Types;
kono
parents:
diff changeset
269
kono
parents:
diff changeset
270 procedure Check (Actual, Expected : Real;
kono
parents:
diff changeset
271 Test_Name : String;
kono
parents:
diff changeset
272 MRE : Real := Maximum_Relative_Error) is
kono
parents:
diff changeset
273 Rel_Error,
kono
parents:
diff changeset
274 Abs_Error,
kono
parents:
diff changeset
275 Max_Error : Real;
kono
parents:
diff changeset
276 begin
kono
parents:
diff changeset
277 -- In the case where the expected result is very small or 0
kono
parents:
diff changeset
278 -- we compute the maximum error as a multiple of Model_Epsilon instead
kono
parents:
diff changeset
279 -- of Model_Epsilon and Expected.
kono
parents:
diff changeset
280 Rel_Error := MRE * (abs Expected * Real'Model_Epsilon);
kono
parents:
diff changeset
281 Abs_Error := MRE * Real'Model_Epsilon;
kono
parents:
diff changeset
282 if Rel_Error > Abs_Error then
kono
parents:
diff changeset
283 Max_Error := Rel_Error;
kono
parents:
diff changeset
284 else
kono
parents:
diff changeset
285 Max_Error := Abs_Error;
kono
parents:
diff changeset
286 end if;
kono
parents:
diff changeset
287
kono
parents:
diff changeset
288 if abs (Actual - Expected) > Max_Error then
kono
parents:
diff changeset
289 Report.Failed (Test_Name &
kono
parents:
diff changeset
290 " actual: " & Real'Image (Actual) &
kono
parents:
diff changeset
291 " expected: " & Real'Image (Expected) &
kono
parents:
diff changeset
292 " difference: " &
kono
parents:
diff changeset
293 Real'Image (Expected - Actual) &
kono
parents:
diff changeset
294 " max_err:" & Real'Image (Max_Error) );
kono
parents:
diff changeset
295 elsif Verbose then
kono
parents:
diff changeset
296 if Actual = Expected then
kono
parents:
diff changeset
297 Report.Comment (Test_Name & " exact result");
kono
parents:
diff changeset
298 else
kono
parents:
diff changeset
299 Report.Comment (Test_Name & " passed");
kono
parents:
diff changeset
300 end if;
kono
parents:
diff changeset
301 end if;
kono
parents:
diff changeset
302 end Check;
kono
parents:
diff changeset
303
kono
parents:
diff changeset
304
kono
parents:
diff changeset
305 procedure Do_Test is
kono
parents:
diff changeset
306 Z : Complex;
kono
parents:
diff changeset
307 X : Real;
kono
parents:
diff changeset
308 T : Real;
kono
parents:
diff changeset
309 begin
kono
parents:
diff changeset
310
kono
parents:
diff changeset
311 --- test 1 ---
kono
parents:
diff changeset
312 begin
kono
parents:
diff changeset
313 T := Real'Safe_Last;
kono
parents:
diff changeset
314 Z := T + 0.0*i;
kono
parents:
diff changeset
315 X := abs Z;
kono
parents:
diff changeset
316 Check (X, T, "test 1 -- abs(bigreal + 0i)");
kono
parents:
diff changeset
317 exception
kono
parents:
diff changeset
318 when Constraint_Error =>
kono
parents:
diff changeset
319 Report.Failed ("Constraint_Error raised in test 1");
kono
parents:
diff changeset
320 when others =>
kono
parents:
diff changeset
321 Report.Failed ("exception in test 1");
kono
parents:
diff changeset
322 end;
kono
parents:
diff changeset
323
kono
parents:
diff changeset
324 --- test 2 ---
kono
parents:
diff changeset
325 begin
kono
parents:
diff changeset
326 T := Real'Safe_Last;
kono
parents:
diff changeset
327 Z := 0.0 + T*i;
kono
parents:
diff changeset
328 X := Modulus (Z);
kono
parents:
diff changeset
329 Check (X, T, "test 2 -- abs(0 + bigreal*i)");
kono
parents:
diff changeset
330 exception
kono
parents:
diff changeset
331 when Constraint_Error =>
kono
parents:
diff changeset
332 Report.Failed ("Constraint_Error raised in test 2");
kono
parents:
diff changeset
333 when others =>
kono
parents:
diff changeset
334 Report.Failed ("exception in test 2");
kono
parents:
diff changeset
335 end;
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337 --- test 3 ---
kono
parents:
diff changeset
338 begin
kono
parents:
diff changeset
339 Z := 3.0 + 4.0*i;
kono
parents:
diff changeset
340 X := abs Z;
kono
parents:
diff changeset
341 Check (X, 5.0 , "test 3 -- abs(3 + 4*i)");
kono
parents:
diff changeset
342 exception
kono
parents:
diff changeset
343 when Constraint_Error =>
kono
parents:
diff changeset
344 Report.Failed ("Constraint_Error raised in test 3");
kono
parents:
diff changeset
345 when others =>
kono
parents:
diff changeset
346 Report.Failed ("exception in test 3");
kono
parents:
diff changeset
347 end;
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 --- test 4 ---
kono
parents:
diff changeset
350 declare
kono
parents:
diff changeset
351 S : Real;
kono
parents:
diff changeset
352 begin
kono
parents:
diff changeset
353 S := Real(Real'Machine_Radix) ** (Real'Machine_EMax - 3);
kono
parents:
diff changeset
354 Z := 3.0 * S + 4.0*S*i;
kono
parents:
diff changeset
355 X := abs Z;
kono
parents:
diff changeset
356 Check (X, 5.0*S, "test 4 -- abs(3S + 4S*i) for large S",
kono
parents:
diff changeset
357 5.0*Real'Model_Epsilon);
kono
parents:
diff changeset
358 exception
kono
parents:
diff changeset
359 when Constraint_Error =>
kono
parents:
diff changeset
360 Report.Failed ("Constraint_Error raised in test 4");
kono
parents:
diff changeset
361 when others =>
kono
parents:
diff changeset
362 Report.Failed ("exception in test 4");
kono
parents:
diff changeset
363 end;
kono
parents:
diff changeset
364
kono
parents:
diff changeset
365 --- test 5 ---
kono
parents:
diff changeset
366 begin
kono
parents:
diff changeset
367 T := Real'Model_Small;
kono
parents:
diff changeset
368 Z := T + 0.0*i;
kono
parents:
diff changeset
369 X := abs Z;
kono
parents:
diff changeset
370 Check (X, T , "test 5 -- abs(small + 0*i)");
kono
parents:
diff changeset
371 exception
kono
parents:
diff changeset
372 when Constraint_Error =>
kono
parents:
diff changeset
373 Report.Failed ("Constraint_Error raised in test 5");
kono
parents:
diff changeset
374 when others =>
kono
parents:
diff changeset
375 Report.Failed ("exception in test 5");
kono
parents:
diff changeset
376 end;
kono
parents:
diff changeset
377
kono
parents:
diff changeset
378 --- test 6 ---
kono
parents:
diff changeset
379 begin
kono
parents:
diff changeset
380 T := Real'Model_Small;
kono
parents:
diff changeset
381 Z := 0.0 + T*i;
kono
parents:
diff changeset
382 X := abs Z;
kono
parents:
diff changeset
383 Check (X, T , "test 6 -- abs(0 + small*i)");
kono
parents:
diff changeset
384 exception
kono
parents:
diff changeset
385 when Constraint_Error =>
kono
parents:
diff changeset
386 Report.Failed ("Constraint_Error raised in test 6");
kono
parents:
diff changeset
387 when others =>
kono
parents:
diff changeset
388 Report.Failed ("exception in test 6");
kono
parents:
diff changeset
389 end;
kono
parents:
diff changeset
390
kono
parents:
diff changeset
391 --- test 7 ---
kono
parents:
diff changeset
392 declare
kono
parents:
diff changeset
393 S : Real;
kono
parents:
diff changeset
394 begin
kono
parents:
diff changeset
395 S := Real(Real'Machine_Radix) ** (Real'Model_EMin + 3);
kono
parents:
diff changeset
396 Z := 3.0 * S + 4.0*S*i;
kono
parents:
diff changeset
397 X := abs Z;
kono
parents:
diff changeset
398 Check (X, 5.0*S, "test 7 -- abs(3S + 4S*i) for small S",
kono
parents:
diff changeset
399 5.0*Real'Model_Epsilon);
kono
parents:
diff changeset
400 exception
kono
parents:
diff changeset
401 when Constraint_Error =>
kono
parents:
diff changeset
402 Report.Failed ("Constraint_Error raised in test 7");
kono
parents:
diff changeset
403 when others =>
kono
parents:
diff changeset
404 Report.Failed ("exception in test 7");
kono
parents:
diff changeset
405 end;
kono
parents:
diff changeset
406
kono
parents:
diff changeset
407 --- test 8 ---
kono
parents:
diff changeset
408 declare
kono
parents:
diff changeset
409 -- CRC Standard Mathematical Tables; 23rd Edition; pg 738
kono
parents:
diff changeset
410 Sqrt2 : constant :=
kono
parents:
diff changeset
411 1.41421_35623_73095_04880_16887_24209_69807_85696_71875_37695;
kono
parents:
diff changeset
412 begin
kono
parents:
diff changeset
413 Z := 1.0 + 1.0*i;
kono
parents:
diff changeset
414 X := abs Z;
kono
parents:
diff changeset
415 Check (X, Sqrt2 , "test 8 -- abs(1 + 1*i)");
kono
parents:
diff changeset
416 exception
kono
parents:
diff changeset
417 when Constraint_Error =>
kono
parents:
diff changeset
418 Report.Failed ("Constraint_Error raised in test 8");
kono
parents:
diff changeset
419 when others =>
kono
parents:
diff changeset
420 Report.Failed ("exception in test 8");
kono
parents:
diff changeset
421 end;
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 --- test 9 ---
kono
parents:
diff changeset
424 begin
kono
parents:
diff changeset
425 T := 0.0;
kono
parents:
diff changeset
426 Z := T + 0.0*i;
kono
parents:
diff changeset
427 X := abs Z;
kono
parents:
diff changeset
428 Check (X, T , "test 5 -- abs(0 + 0*i)");
kono
parents:
diff changeset
429 exception
kono
parents:
diff changeset
430 when Constraint_Error =>
kono
parents:
diff changeset
431 Report.Failed ("Constraint_Error raised in test 9");
kono
parents:
diff changeset
432 when others =>
kono
parents:
diff changeset
433 Report.Failed ("exception in test 9");
kono
parents:
diff changeset
434 end;
kono
parents:
diff changeset
435 end Do_Test;
kono
parents:
diff changeset
436 end Non_Generic_Check;
kono
parents:
diff changeset
437
kono
parents:
diff changeset
438 -----------------------------------------------------------------------
kono
parents:
diff changeset
439 --- end of "manual instantiation"
kono
parents:
diff changeset
440 -----------------------------------------------------------------------
kono
parents:
diff changeset
441 package Chk_Float is new Generic_Check (Float);
kono
parents:
diff changeset
442
kono
parents:
diff changeset
443 -- check the floating point type with the most digits
kono
parents:
diff changeset
444 type A_Long_Float is digits System.Max_Digits;
kono
parents:
diff changeset
445 package Chk_A_Long_Float is new Generic_Check (A_Long_Float);
kono
parents:
diff changeset
446 begin
kono
parents:
diff changeset
447 Report.Test ("CXG2002",
kono
parents:
diff changeset
448 "Check the accuracy of the complex modulus" &
kono
parents:
diff changeset
449 " function");
kono
parents:
diff changeset
450
kono
parents:
diff changeset
451 if Verbose then
kono
parents:
diff changeset
452 Report.Comment ("checking Standard.Float");
kono
parents:
diff changeset
453 end if;
kono
parents:
diff changeset
454 Chk_Float.Do_Test;
kono
parents:
diff changeset
455
kono
parents:
diff changeset
456 if Verbose then
kono
parents:
diff changeset
457 Report.Comment ("checking a digits" &
kono
parents:
diff changeset
458 Integer'Image (System.Max_Digits) &
kono
parents:
diff changeset
459 " floating point type");
kono
parents:
diff changeset
460 end if;
kono
parents:
diff changeset
461 Chk_A_Long_Float.Do_Test;
kono
parents:
diff changeset
462
kono
parents:
diff changeset
463 if Verbose then
kono
parents:
diff changeset
464 Report.Comment ("checking non-generic package");
kono
parents:
diff changeset
465 end if;
kono
parents:
diff changeset
466 Non_Generic_Check.Do_Test;
kono
parents:
diff changeset
467 Report.Result;
kono
parents:
diff changeset
468 end CXG2002;