3 -- Grant of Unlimited Rights
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
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.
27 -- Check that the Divide procedure provides the following results:
28 -- Quotient = Dividend divided by Divisor and
29 -- Remainder = Dividend - (Divisor * Quotient)
30 -- Check that the Remainder is calculated exactly.
33 -- This test is designed to test the generic procedure Divide found in
34 -- package Ada.Decimal.
36 -- The table below attempts to portray the design approach used in this
37 -- test. There are three "dimensions" of concern:
38 -- 1) the delta value of the Quotient and Remainder types, shown as
40 -- 2) specific choices for the Dividend and Divisor numerical values
41 -- (i.e., whether they yielded a repeating/non-terminating result,
42 -- or a terminating result ["exact"]), displayed on the left side
44 -- 3) the delta for the Dividend and Divisor.
46 -- Each row in the tables indicates a specific test case, showing the
47 -- specific quotient and remainder (under the appropriate Delta column)
48 -- for each combination of dividend and divisor values. Test cases
49 -- follow the top-to-bottom sequence shown in the tables.
51 -- Most of the test case sets (same dividend/divisor combinations -
52 -- indicated by dashed horizontal lines in the tables) vary the
53 -- delta of the quotient and remainder types between test cases. This
54 -- allows for an examination of how different deltas for a quotient
55 -- and/or remainder type can influence the results of a division with
56 -- identical dividend and divisor.
58 -- Note: Test cases are performed for both Radix 10 and Radix 2 types.
61 -- Divid Divis Delta Delta Delta Delta Delta
62 -- (Delta)(Delta)| .1 | .01 | .001 | .0001 | .00001 |Test
63 -- |---|---|-----|-----|-----|-----|-----|-----|-----|-----|Case
64 -- quotient | Q | R | Q | R | Q | R | Q | R | Q | R | No.
65 -- ---------------------------------------------------------------------------
66 -- .05 .3 |.1 .02 1,21
67 -- (.01) (.1) |.1 0 2,22
69 -- 0.166666.. | .16 .00 4,24
71 -- ---------------------------------------------------------------------------
72 -- .15 20 | .00 .1500 6,26
73 -- (.01) (1) | .00 .150 7,27
75 -- 0.0075 | .01 .007 9,29
77 -- | .0075 .0000 11,31
78 -- ---------------------------------------------------------------------------
79 -- .03125 .5 | .0625 .0000 12,32
80 -- (.00001) (.1) | .062 .00025 13,33
82 -- 0.0625 | .062 .000 15,35
88 -- ---------------------------------------------------------------------------
89 -- Divide by Zero| Raise Constraint_Error 41
90 -- ---------------------------------------------------------------------------
94 -- 06 Dec 94 SAIC ACVC 2.0
95 -- 29 Dec 94 SAIC Modified Radix 2 cases to match Radix 10 cases.
96 -- 03 Oct 95 RBKD Modified to fix incorrect remainder results
97 -- 15 Nov 95 SAIC Incorporated reviewer fixes for ACVC 2.0.1.
106 TC_Verbose
: Boolean := False;
110 Report
.Test
("CXF2001", "Check that the Divide procedure provides " &
111 "correct results. Check that the Remainder " &
112 "is calculated exactly");
117 -- Declare all types and variables used in the various blocks below
118 -- for all Radix 10 evaluations.
120 type DT_1
is delta 1.0 digits 5;
121 type DT_0_1
is delta 0.1 digits 10;
122 type DT_0_01
is delta 0.01 digits 10;
123 type DT_0_001
is delta 0.001 digits 10;
124 type DT_0_0001
is delta 0.0001 digits 10;
125 type DT_0_00001
is delta 0.00001 digits 10;
127 for DT_1
'Machine_Radix use 10;
128 for DT_0_1
'Machine_Radix use 10;
129 for DT_0_01
'Machine_Radix use 10;
130 for DT_0_001
'Machine_Radix use 10;
131 for DT_0_0001
'Machine_Radix use 10;
132 for DT_0_00001
'Machine_Radix use 10;
134 Dd_1
, Dv_1
, Quot_1
, Rem_1
: DT_1
:= 0.0;
135 Dd_0_1
, Dv_0_1
, Quot_0_1
, Rem_0_1
: DT_0_1
:= 0.0;
136 Dd_0_01
, Dv_0_01
, Quot_0_01
, Rem_0_01
: DT_0_01
:= 0.0;
137 Dd_0_001
, Dv_0_001
, Quot_0_001
, Rem_0_001
: DT_0_001
:= 0.0;
138 Dd_0_0001
, Dv_0_0001
, Quot_0_0001
, Rem_0_0001
: DT_0_0001
:= 0.0;
139 Dd_0_00001
, Dv_0_00001
, Quot_0_00001
, Rem_0_00001
: DT_0_00001
:= 0.0;
146 new Ada
.Decimal
.Divide
(Dividend_Type
=> DT_0_01
,
147 Divisor_Type
=> DT_0_1
,
148 Quotient_Type
=> DT_0_1
,
149 Remainder_Type
=> DT_0_01
);
151 if TC_Verbose
then Report
.Comment
("Case 1"); end if;
152 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
153 Div
(Dd_0_01
, Dv_0_1
, Quot_0_1
, Rem_0_01
);
154 if Quot_0_1
/= DT_0_1
(0.1) or Rem_0_01
/= DT_0_01
(0.02) then
155 Report
.Failed
("Incorrect values returned, Case 1");
162 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_1
, DT_0_1
);
164 if TC_Verbose
then Report
.Comment
("Case 2"); end if;
165 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
166 Div
(Dd_0_01
, Dv_0_1
, Quot_0_1
, Rem_0_1
);
167 if Quot_0_1
/= DT_0_1
(0.1) or Rem_0_1
/= DT_0_1
(0.0) then
168 Report
.Failed
("Incorrect values returned, Case 2");
175 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_01
, DT_0_001
);
177 if TC_Verbose
then Report
.Comment
("Case 3"); end if;
178 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
179 Div
(Dd_0_01
, Dv_0_1
, Quot_0_01
, Rem_0_001
);
180 if Quot_0_01
/= DT_0_01
(0.16) or Rem_0_001
/= DT_0_001
(0.002) then
181 Report
.Failed
("Incorrect values returned, Case 3");
188 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_01
, DT_0_01
);
190 if TC_Verbose
then Report
.Comment
("Case 4"); end if;
191 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
192 Div
(Dd_0_01
, Dv_0_1
, Quot_0_01
, Rem_0_01
);
193 if Quot_0_01
/= DT_0_01
(0.16) or Rem_0_01
/= DT_0_01
(0.0) then
194 Report
.Failed
("Incorrect values returned, Case 4");
201 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_001
, DT_0_0001
);
203 if TC_Verbose
then Report
.Comment
("Case 5"); end if;
204 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
205 Div
(Dd_0_01
, Dv_0_1
, Quot_0_001
, Rem_0_0001
);
206 if Quot_0_001
/= DT_0_001
(0.166) or
207 Rem_0_0001
/= DT_0_0001
(0.0002)
209 Report
.Failed
("Incorrect values returned, Case 5");
216 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_0001
);
218 if TC_Verbose
then Report
.Comment
("Case 6"); end if;
219 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
220 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_0001
);
221 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_0001
/= DT_0_0001
(0.1500) then
222 Report
.Failed
("Incorrect values returned, Case 6");
229 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_001
);
231 if TC_Verbose
then Report
.Comment
("Case 7"); end if;
232 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
233 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_001
);
234 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_001
/= DT_0_001
(0.150) then
235 Report
.Failed
("Incorrect values returned, Case 7");
242 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_01
);
244 if TC_Verbose
then Report
.Comment
("Case 8"); end if;
245 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
246 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_01
);
247 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_01
/= DT_0_01
(0.15) then
248 Report
.Failed
("Incorrect values returned, Case 8");
255 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_001
, DT_0_001
);
257 if TC_Verbose
then Report
.Comment
("Case 9"); end if;
258 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
259 Div
(Dd_0_01
, Dv_1
, Quot_0_001
, Rem_0_001
);
260 if Quot_0_001
/= DT_0_001
(0.007) or Rem_0_001
/= DT_0_001
(0.01) then
261 Report
.Failed
("Incorrect values returned, Case 9");
268 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_001
, DT_0_01
);
270 if TC_Verbose
then Report
.Comment
("Case 10"); end if;
271 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
272 Div
(Dd_0_01
, Dv_1
, Quot_0_001
, Rem_0_01
);
273 if Quot_0_001
/= DT_0_001
(0.007) or Rem_0_01
/= DT_0_01
(0.01) then
274 Report
.Failed
("Incorrect values returned, Case 10");
281 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_0001
, DT_0_0001
);
283 if TC_Verbose
then Report
.Comment
("Case 11"); end if;
284 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
285 Div
(Dd_0_01
, Dv_1
, Quot_0_0001
, Rem_0_0001
);
286 if Quot_0_0001
/= DT_0_0001
(0.0075) or
287 Rem_0_0001
/= DT_0_0001
(0.0)
289 Report
.Failed
("Incorrect values returned, Case 11");
296 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_0001
, DT_0_0001
);
298 if TC_Verbose
then Report
.Comment
("Case 12"); end if;
299 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
300 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_0001
, Rem_0_0001
);
301 if Quot_0_0001
/= DT_0_0001
(0.0625) or
302 Rem_0_0001
/= DT_0_0001
(0.0)
304 Report
.Failed
("Incorrect values returned, Case 12");
311 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_00001
);
313 if TC_Verbose
then Report
.Comment
("Case 13"); end if;
314 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
315 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_00001
);
316 if Quot_0_001
/= DT_0_001
(0.062) or
317 Rem_0_00001
/= DT_0_00001
(0.00025)
319 Report
.Failed
("Incorrect values returned, Case 13");
326 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_0001
);
328 if TC_Verbose
then Report
.Comment
("Case 14"); end if;
329 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
330 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_0001
);
331 if Quot_0_001
/= DT_0_001
(0.062) or
332 Rem_0_0001
/= DT_0_0001
(0.0002)
334 Report
.Failed
("Incorrect values returned, Case 14");
341 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_001
);
343 if TC_Verbose
then Report
.Comment
("Case 15"); end if;
344 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
345 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_001
);
346 if Quot_0_001
/= DT_0_001
(0.062) or Rem_0_001
/= DT_0_001
(0.000)
348 Report
.Failed
("Incorrect values returned, Case 15");
355 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_01
);
357 if TC_Verbose
then Report
.Comment
("Case 16"); end if;
358 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
359 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_01
);
360 if Quot_0_001
/= DT_0_001
(0.062) or Rem_0_01
/= DT_0_01
(0.00) then
361 Report
.Failed
("Incorrect values returned, Case 16");
368 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_00001
);
370 if TC_Verbose
then Report
.Comment
("Case 17"); end if;
371 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
372 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_00001
);
373 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_00001
/= DT_0_00001
(0.00125)
375 Report
.Failed
("Incorrect values returned, Case 17");
382 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_0001
);
384 if TC_Verbose
then Report
.Comment
("Case 18"); end if;
385 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
386 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_0001
);
387 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_0001
/= DT_0_0001
(0.0012)
389 Report
.Failed
("Incorrect values returned, Case 18");
396 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_001
);
398 if TC_Verbose
then Report
.Comment
("Case 19"); end if;
399 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
400 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_001
);
401 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_001
/= DT_0_001
(0.001) then
402 Report
.Failed
("Incorrect values returned, Case 19");
409 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_01
);
411 if TC_Verbose
then Report
.Comment
("Case 20"); end if;
412 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
413 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_01
);
414 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_01
/= DT_0_01
(0.0) then
415 Report
.Failed
("Incorrect values returned, Case 20");
421 when others => Report
.Failed
("Exception raised in Radix_10_Block");
429 -- Declare all types and variables used in the various blocks below
430 -- for all Radix 2 evaluations.
432 type DT_1
is delta 1.0 digits 5;
433 type DT_0_1
is delta 0.1 digits 10;
434 type DT_0_01
is delta 0.01 digits 10;
435 type DT_0_001
is delta 0.001 digits 10;
436 type DT_0_0001
is delta 0.0001 digits 10;
437 type DT_0_00001
is delta 0.00001 digits 10;
439 for DT_1
'Machine_Radix use 2;
440 for DT_0_1
'Machine_Radix use 2;
441 for DT_0_01
'Machine_Radix use 2;
442 for DT_0_001
'Machine_Radix use 2;
443 for DT_0_0001
'Machine_Radix use 2;
444 for DT_0_00001
'Machine_Radix use 2;
446 Dd_1
, Dv_1
, Quot_1
, Rem_1
: DT_1
:= 0.0;
447 Dd_0_1
, Dv_0_1
, Quot_0_1
, Rem_0_1
: DT_0_1
:= 0.0;
448 Dd_0_01
, Dv_0_01
, Quot_0_01
, Rem_0_01
: DT_0_01
:= 0.0;
449 Dd_0_001
, Dv_0_001
, Quot_0_001
, Rem_0_001
: DT_0_001
:= 0.0;
450 Dd_0_0001
, Dv_0_0001
, Quot_0_0001
, Rem_0_0001
: DT_0_0001
:= 0.0;
451 Dd_0_00001
, Dv_0_00001
, Quot_0_00001
, Rem_0_00001
: DT_0_00001
:= 0.0;
458 new Ada
.Decimal
.Divide
(Dividend_Type
=> DT_0_01
,
459 Divisor_Type
=> DT_0_1
,
460 Quotient_Type
=> DT_0_1
,
461 Remainder_Type
=> DT_0_01
);
463 if TC_Verbose
then Report
.Comment
("Case 21"); end if;
464 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
465 Div
(Dd_0_01
, Dv_0_1
, Quot_0_1
, Rem_0_01
);
466 if Quot_0_1
/= DT_0_1
(0.1) or Rem_0_01
/= DT_0_01
(0.02) then
467 Report
.Failed
("Incorrect values returned, Case 21");
474 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_1
, DT_0_1
);
476 if TC_Verbose
then Report
.Comment
("Case 22"); end if;
477 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
478 Div
(Dd_0_01
, Dv_0_1
, Quot_0_1
, Rem_0_1
);
479 if Quot_0_1
/= DT_0_1
(0.1) or Rem_0_1
/= DT_0_1
(0.0) then
480 Report
.Failed
("Incorrect values returned, Case 22");
487 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_01
, DT_0_001
);
489 if TC_Verbose
then Report
.Comment
("Case 23"); end if;
490 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
491 Div
(Dd_0_01
, Dv_0_1
, Quot_0_01
, Rem_0_001
);
492 if Quot_0_01
/= DT_0_01
(0.16) or Rem_0_001
/= DT_0_001
(0.002) then
493 Report
.Failed
("Incorrect values returned, Case 23");
500 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_01
, DT_0_01
);
502 if TC_Verbose
then Report
.Comment
("Case 24"); end if;
503 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
504 Div
(Dd_0_01
, Dv_0_1
, Quot_0_01
, Rem_0_01
);
505 if Quot_0_01
/= DT_0_01
(0.16) or Rem_0_01
/= DT_0_01
(0.0) then
506 Report
.Failed
("Incorrect values returned, Case 24");
513 new Ada
.Decimal
.Divide
(DT_0_01
, DT_0_1
, DT_0_001
, DT_0_0001
);
515 if TC_Verbose
then Report
.Comment
("Case 25"); end if;
516 Dd_0_01
:= DT_0_01
(0.05); Dv_0_1
:= DT_0_1
(0.3);
517 Div
(Dd_0_01
, Dv_0_1
, Quot_0_001
, Rem_0_0001
);
518 if Quot_0_001
/= DT_0_001
(0.166) or
519 Rem_0_0001
/= DT_0_0001
(0.0002)
521 Report
.Failed
("Incorrect values returned, Case 25");
528 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_0001
);
530 if TC_Verbose
then Report
.Comment
("Case 26"); end if;
531 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
532 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_0001
);
533 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_0001
/= DT_0_0001
(0.1500) then
534 Report
.Failed
("Incorrect values returned, Case 26");
541 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_001
);
543 if TC_Verbose
then Report
.Comment
("Case 27"); end if;
544 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
545 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_001
);
546 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_001
/= DT_0_001
(0.150) then
547 Report
.Failed
("Incorrect values returned, Case 27");
554 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_01
, DT_0_01
);
556 if TC_Verbose
then Report
.Comment
("Case 28"); end if;
557 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
558 Div
(Dd_0_01
, Dv_1
, Quot_0_01
, Rem_0_01
);
559 if Quot_0_01
/= DT_0_01
(0.0) or Rem_0_01
/= DT_0_01
(0.15) then
560 Report
.Failed
("Incorrect values returned, Case 28");
567 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_001
, DT_0_001
);
569 if TC_Verbose
then Report
.Comment
("Case 29"); end if;
570 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
571 Div
(Dd_0_01
, Dv_1
, Quot_0_001
, Rem_0_001
);
572 if Quot_0_001
/= DT_0_001
(0.007) or Rem_0_001
/= DT_0_001
(0.01) then
573 Report
.Failed
("Incorrect values returned, Case 29");
580 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_001
, DT_0_01
);
582 if TC_Verbose
then Report
.Comment
("Case 30"); end if;
583 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
584 Div
(Dd_0_01
, Dv_1
, Quot_0_001
, Rem_0_01
);
585 if Quot_0_001
/= DT_0_001
(0.007) or Rem_0_01
/= DT_0_01
(0.01) then
586 Report
.Failed
("Incorrect values returned, Case 30");
593 new Ada
.Decimal
.Divide
(DT_0_01
, DT_1
, DT_0_0001
, DT_0_0001
);
595 if TC_Verbose
then Report
.Comment
("Case 31"); end if;
596 Dd_0_01
:= DT_0_01
(0.15); Dv_1
:= DT_1
(20);
597 Div
(Dd_0_01
, Dv_1
, Quot_0_0001
, Rem_0_0001
);
598 if Quot_0_0001
/= DT_0_0001
(0.0075) or
599 Rem_0_0001
/= DT_0_0001
(0.0)
601 Report
.Failed
("Incorrect values returned, Case 31");
608 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_0001
, DT_0_0001
);
610 if TC_Verbose
then Report
.Comment
("Case 32"); end if;
611 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
612 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_0001
, Rem_0_0001
);
613 if Quot_0_0001
/= DT_0_0001
(0.0625) or
614 Rem_0_0001
/= DT_0_0001
(0.0)
616 Report
.Failed
("Incorrect values returned, Case 32");
623 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_00001
);
625 if TC_Verbose
then Report
.Comment
("Case 33"); end if;
626 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
627 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_00001
);
628 if Quot_0_001
/= DT_0_001
(0.062) or
629 Rem_0_00001
/= DT_0_00001
(0.00025)
631 Report
.Failed
("Incorrect values returned, Case 33");
638 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_0001
);
640 if TC_Verbose
then Report
.Comment
("Case 34"); end if;
641 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
642 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_0001
);
643 if Quot_0_001
/= DT_0_001
(0.062) or
644 Rem_0_0001
/= DT_0_0001
(0.0002)
646 Report
.Failed
("Incorrect values returned, Case 34");
653 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_001
);
655 if TC_Verbose
then Report
.Comment
("Case 35"); end if;
656 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
657 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_001
);
658 if Quot_0_001
/= DT_0_001
(0.062) or Rem_0_001
/= DT_0_001
(0.000)
660 Report
.Failed
("Incorrect values returned, Case 35");
667 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_001
, DT_0_01
);
669 if TC_Verbose
then Report
.Comment
("Case 36"); end if;
670 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
671 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_001
, Rem_0_01
);
672 if Quot_0_001
/= DT_0_001
(0.062) or Rem_0_01
/= DT_0_01
(0.00) then
673 Report
.Failed
("Incorrect values returned, Case 36");
680 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_00001
);
682 if TC_Verbose
then Report
.Comment
("Case 37"); end if;
683 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
684 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_00001
);
685 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_00001
/= DT_0_00001
(0.00125)
687 Report
.Failed
("Incorrect values returned, Case 37");
694 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_0001
);
696 if TC_Verbose
then Report
.Comment
("Case 38"); end if;
697 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
698 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_0001
);
699 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_0001
/= DT_0_0001
(0.0012)
701 Report
.Failed
("Incorrect values returned, Case 38");
708 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_001
);
710 if TC_Verbose
then Report
.Comment
("Case 39"); end if;
711 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
712 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_001
);
713 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_001
/= DT_0_001
(0.001) then
714 Report
.Failed
("Incorrect values returned, Case 39");
721 new Ada
.Decimal
.Divide
(DT_0_00001
, DT_0_1
, DT_0_01
, DT_0_01
);
723 if TC_Verbose
then Report
.Comment
("Case 40"); end if;
724 Dd_0_00001
:= DT_0_00001
(0.03125); Dv_0_1
:= DT_0_1
(0.5);
725 Div
(Dd_0_00001
, Dv_0_1
, Quot_0_01
, Rem_0_01
);
726 if Quot_0_01
/= DT_0_01
(0.06) or Rem_0_01
/= DT_0_01
(0.0) then
727 Report
.Failed
("Incorrect values returned, Case 40");
733 new Ada
.Decimal
.Divide
(DT_0_0001
, DT_1
, DT_0_0001
, DT_0_0001
);
735 if TC_Verbose
then Report
.Comment
("Case 41"); end if;
736 Dd_0_0001
:= (DT_0_0001
(6062.0) / DT_0_0001
(16384.0));
738 Div
(Dd_0_0001
, Dv_1
, Quot_0_0001
, Rem_0_0001
);
739 Report
.Failed
("Divide by Zero didn't raise Constraint_Error, " &
742 when Constraint_Error
=> null; -- OK, expected exception.
744 Report
.Failed
("Unexpected exception raised by Divide by Zero," &
749 when others => Report
.Failed
("Exception raised in Radix_10_Block");