View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  /*
19   * This is not the original file distributed by the Apache Software Foundation
20   * It has been modified by the Hipparchus project
21   */
22  
23  package org.hipparchus.dfp;
24  
25  import org.junit.jupiter.api.AfterEach;
26  import org.junit.jupiter.api.BeforeEach;
27  import org.junit.jupiter.api.Test;
28  
29  import static org.junit.jupiter.api.Assertions.assertTrue;
30  
31  class DfpDecTest {
32  
33      private DfpField field;
34      private Dfp pinf;
35      private Dfp ninf;
36  
37      @BeforeEach
38      void setUp() {
39          // Some basic setup.  Define some constants and clear the status flags
40          field = new DfpField(20);
41          pinf = new DfpDec(field, 1).divide(new DfpDec(field, 0));
42          ninf = new DfpDec(field, -1).divide(new DfpDec(field, 0));
43          ninf.getField().clearIEEEFlags();
44      }
45  
46      @AfterEach
47      void tearDown() {
48          field = null;
49          pinf    = null;
50          ninf    = null;
51      }
52  
53      // Generic test function.  Takes params x and y and tests them for
54      // equality.  Then checks the status flags against the flags argument.
55      // If the test fail, it prints the desc string
56      private void test(Dfp x, Dfp y, int flags, String desc) {
57          boolean b = x.equals(y);
58  
59          if (!x.equals(y) && !x.unequal(y))  // NaNs involved
60              b = (x.toString().equals(y.toString()));
61  
62          if (x.equals(new DfpDec(field, 0)))  // distinguish +/- zero
63              b = (b && (x.toString().equals(y.toString())));
64  
65          b = (b && x.getField().getIEEEFlags() == flags);
66  
67          if (!b)
68              assertTrue(b, "assersion failed "+desc+" x = "+x.toString()+" flags = "+x.getField().getIEEEFlags());
69  
70          x.getField().clearIEEEFlags();
71      }
72  
73      @Test
74      void testRound()
75      {
76          field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_EVEN);
77  
78          test(new DfpDec(field, "12345678901234567890"),
79               new DfpDec(field, "12345678901234568000"),
80               DfpField.FLAG_INEXACT, "Round #1");
81  
82          test(new DfpDec(field, "0.12345678901234567890"),
83               new DfpDec(field, "0.12345678901234568"),
84               DfpField.FLAG_INEXACT, "Round #2");
85  
86          test(new DfpDec(field, "0.12345678901234567500"),
87               new DfpDec(field, "0.12345678901234568"),
88               DfpField.FLAG_INEXACT, "Round #3");
89  
90          test(new DfpDec(field, "0.12345678901234568500"),
91               new DfpDec(field, "0.12345678901234568"),
92               DfpField.FLAG_INEXACT, "Round #4");
93  
94          test(new DfpDec(field, "0.12345678901234568501"),
95               new DfpDec(field, "0.12345678901234569"),
96               DfpField.FLAG_INEXACT, "Round #5");
97  
98          test(new DfpDec(field, "0.12345678901234568499"),
99               new DfpDec(field, "0.12345678901234568"),
100              DfpField.FLAG_INEXACT, "Round #6");
101 
102         test(new DfpDec(field, "1.2345678901234567890"),
103              new DfpDec(field, "1.2345678901234568"),
104              DfpField.FLAG_INEXACT, "Round #7");
105 
106         test(new DfpDec(field, "1.2345678901234567500"),
107              new DfpDec(field, "1.2345678901234568"),
108              DfpField.FLAG_INEXACT, "Round #8");
109 
110         test(new DfpDec(field, "1.2345678901234568500"),
111              new DfpDec(field, "1.2345678901234568"),
112              DfpField.FLAG_INEXACT, "Round #9");
113 
114         test(new DfpDec(field, "1.2345678901234568000").add(new DfpDec(field, ".0000000000000000501")),
115              new DfpDec(field, "1.2345678901234569"),
116              DfpField.FLAG_INEXACT, "Round #10");
117 
118         test(new DfpDec(field, "1.2345678901234568499"),
119              new DfpDec(field, "1.2345678901234568"),
120              DfpField.FLAG_INEXACT, "Round #11");
121 
122         test(new DfpDec(field, "12.345678901234567890"),
123              new DfpDec(field, "12.345678901234568"),
124              DfpField.FLAG_INEXACT, "Round #12");
125 
126         test(new DfpDec(field, "12.345678901234567500"),
127              new DfpDec(field, "12.345678901234568"),
128              DfpField.FLAG_INEXACT, "Round #13");
129 
130         test(new DfpDec(field, "12.345678901234568500"),
131              new DfpDec(field, "12.345678901234568"),
132              DfpField.FLAG_INEXACT, "Round #14");
133 
134         test(new DfpDec(field, "12.345678901234568").add(new DfpDec(field, ".000000000000000501")),
135              new DfpDec(field, "12.345678901234569"),
136              DfpField.FLAG_INEXACT, "Round #15");
137 
138         test(new DfpDec(field, "12.345678901234568499"),
139              new DfpDec(field, "12.345678901234568"),
140              DfpField.FLAG_INEXACT, "Round #16");
141 
142         test(new DfpDec(field, "123.45678901234567890"),
143              new DfpDec(field, "123.45678901234568"),
144              DfpField.FLAG_INEXACT, "Round #17");
145 
146         test(new DfpDec(field, "123.45678901234567500"),
147              new DfpDec(field, "123.45678901234568"),
148              DfpField.FLAG_INEXACT, "Round #18");
149 
150         test(new DfpDec(field, "123.45678901234568500"),
151              new DfpDec(field, "123.45678901234568"),
152              DfpField.FLAG_INEXACT, "Round #19");
153 
154         test(new DfpDec(field, "123.456789012345685").add(new DfpDec(field, ".00000000000000501")),
155              new DfpDec(field, "123.45678901234569"),
156              DfpField.FLAG_INEXACT, "Round #20");
157 
158         test(new DfpDec(field, "123.45678901234568499"),
159              new DfpDec(field, "123.45678901234568"),
160              DfpField.FLAG_INEXACT, "Round #21");
161 
162         field.setRoundingMode(DfpField.RoundingMode.ROUND_DOWN);
163 
164         // Round down
165         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.9")),
166              new DfpDec(field, "12345678901234567"),
167              DfpField.FLAG_INEXACT, "Round #22");
168 
169         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.99999999")),
170              new DfpDec(field, "12345678901234567"),
171              DfpField.FLAG_INEXACT, "Round #23");
172 
173         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.99999999")),
174              new DfpDec(field, "-12345678901234567"),
175              DfpField.FLAG_INEXACT, "Round #24");
176 
177         field.setRoundingMode(DfpField.RoundingMode.ROUND_UP);
178 
179         // Round up
180         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.1")),
181              new DfpDec(field, "12345678901234568"),
182              DfpField.FLAG_INEXACT, "Round #25");
183 
184         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.0001")),
185              new DfpDec(field, "12345678901234568"),
186              DfpField.FLAG_INEXACT, "Round #26");
187 
188         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.1")),
189              new DfpDec(field, "-12345678901234568"),
190              DfpField.FLAG_INEXACT, "Round #27");
191 
192         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.0001")),
193              new DfpDec(field, "-12345678901234568"),
194              DfpField.FLAG_INEXACT, "Round #28");
195 
196         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "0")),
197              new DfpDec(field, "-12345678901234567"),
198              0, "Round #28.5");
199 
200         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_UP);
201 
202         // Round half up
203         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.499999999999")),
204              new DfpDec(field, "12345678901234567"),
205              DfpField.FLAG_INEXACT, "Round #29");
206 
207         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.50000001")),
208              new DfpDec(field, "12345678901234568"),
209              DfpField.FLAG_INEXACT, "Round #30");
210 
211         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.5")),
212              new DfpDec(field, "12345678901234568"),
213              DfpField.FLAG_INEXACT, "Round #30.5");
214 
215         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.499999999999")),
216              new DfpDec(field, "-12345678901234567"),
217              DfpField.FLAG_INEXACT, "Round #31");
218 
219         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.50000001")),
220              new DfpDec(field, "-12345678901234568"),
221              DfpField.FLAG_INEXACT, "Round #32");
222 
223         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_DOWN);
224 
225         // Round half down
226         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.5001")),
227              new DfpDec(field, "12345678901234568"),
228              DfpField.FLAG_INEXACT, "Round #33");
229 
230         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.5000")),
231              new DfpDec(field, "12345678901234567"),
232              DfpField.FLAG_INEXACT, "Round #34");
233 
234         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.5001")),
235              new DfpDec(field, "-12345678901234568"),
236              DfpField.FLAG_INEXACT, "Round #35");
237 
238         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.6")),
239              new DfpDec(field, "-12345678901234568"),
240              DfpField.FLAG_INEXACT, "Round #35.5");
241 
242         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.5000")),
243              new DfpDec(field, "-12345678901234567"),
244              DfpField.FLAG_INEXACT, "Round #36");
245 
246         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_ODD);
247 
248         // Round half odd
249         test(new DfpDec(field, "12345678901234568").add(new DfpDec(field, "0.5000")),
250              new DfpDec(field, "12345678901234569"),
251              DfpField.FLAG_INEXACT, "Round #37");
252 
253         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.5000")),
254              new DfpDec(field, "12345678901234567"),
255              DfpField.FLAG_INEXACT, "Round #38");
256 
257         test(new DfpDec(field, "-12345678901234568").add(new DfpDec(field, "-0.5000")),
258              new DfpDec(field, "-12345678901234569"),
259              DfpField.FLAG_INEXACT, "Round #39");
260 
261         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.5000")),
262              new DfpDec(field, "-12345678901234567"),
263              DfpField.FLAG_INEXACT, "Round #40");
264 
265         field.setRoundingMode(DfpField.RoundingMode.ROUND_CEIL);
266 
267         // Round ceil
268         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.0001")),
269              new DfpDec(field, "12345678901234568"),
270              DfpField.FLAG_INEXACT, "Round #41");
271 
272         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.9999")),
273              new DfpDec(field, "-12345678901234567"),
274              DfpField.FLAG_INEXACT, "Round #42");
275 
276         field.setRoundingMode(DfpField.RoundingMode.ROUND_FLOOR);
277 
278         // Round floor
279         test(new DfpDec(field, "12345678901234567").add(new DfpDec(field, "0.9999")),
280              new DfpDec(field, "12345678901234567"),
281              DfpField.FLAG_INEXACT, "Round #43");
282 
283         test(new DfpDec(field, "-12345678901234567").add(new DfpDec(field, "-0.0001")),
284              new DfpDec(field, "-12345678901234568"),
285              DfpField.FLAG_INEXACT, "Round #44");
286 
287         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_EVEN);  // reset
288     }
289 
290     @Test
291     void testRoundDecimal10()
292     {
293         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_EVEN);
294 
295         test(new Decimal10(field, "1234567891234567890"),
296              new Decimal10(field, "1234567891000000000"),
297              DfpField.FLAG_INEXACT, "RoundDecimal10 #1");
298 
299         test(new Decimal10(field, "0.1234567891634567890"),
300              new Decimal10(field, "0.1234567892"),
301              DfpField.FLAG_INEXACT, "RoundDecimal10 #2");
302 
303         test(new Decimal10(field, "0.1234567891500000000"),
304              new Decimal10(field, "0.1234567892"),
305              DfpField.FLAG_INEXACT, "RoundDecimal10 #3");
306 
307         test(new Decimal10(field, "0.1234567890500"),
308              new Decimal10(field, "0.1234567890"),
309              DfpField.FLAG_INEXACT, "RoundDecimal10 #4");
310 
311         test(new Decimal10(field, "0.1234567890501"),
312              new Decimal10(field, "0.1234567891"),
313              DfpField.FLAG_INEXACT, "RoundDecimal10 #5");
314 
315         test(new Decimal10(field, "0.1234567890499"),
316              new Decimal10(field, "0.1234567890"),
317              DfpField.FLAG_INEXACT, "RoundDecimal10 #6");
318 
319         test(new Decimal10(field, "1.234567890890"),
320              new Decimal10(field, "1.234567891"),
321              DfpField.FLAG_INEXACT, "RoundDecimal10 #7");
322 
323         test(new Decimal10(field, "1.234567891500"),
324              new Decimal10(field, "1.234567892"),
325              DfpField.FLAG_INEXACT, "RoundDecimal10 #8");
326 
327         test(new Decimal10(field, "1.234567890500"),
328              new Decimal10(field, "1.234567890"),
329              DfpField.FLAG_INEXACT, "RoundDecimal10 #9");
330 
331         test(new Decimal10(field, "1.234567890000").add(new Decimal10(field, ".000000000501")),
332              new Decimal10(field, "1.234567891"),
333              DfpField.FLAG_INEXACT, "RoundDecimal10 #10");
334 
335         test(new Decimal10(field, "1.234567890499"),
336              new Decimal10(field, "1.234567890"),
337              DfpField.FLAG_INEXACT, "RoundDecimal10 #11");
338 
339         test(new Decimal10(field, "12.34567890890"),
340              new Decimal10(field, "12.34567891"),
341              DfpField.FLAG_INEXACT, "RoundDecimal10 #12");
342 
343         test(new Decimal10(field, "12.34567891500"),
344              new Decimal10(field, "12.34567892"),
345              DfpField.FLAG_INEXACT, "RoundDecimal10 #13");
346 
347         test(new Decimal10(field, "12.34567890500"),
348              new Decimal10(field, "12.34567890"),
349              DfpField.FLAG_INEXACT, "RoundDecimal10 #14");
350 
351         test(new Decimal10(field, "12.34567890").add(new Decimal10(field, ".00000000501")),
352              new Decimal10(field, "12.34567891"),
353              DfpField.FLAG_INEXACT, "RoundDecimal10 #15");
354 
355         test(new Decimal10(field, "12.34567890499"),
356              new Decimal10(field, "12.34567890"),
357              DfpField.FLAG_INEXACT, "RoundDecimal10 #16");
358 
359         test(new Decimal10(field, "123.4567890890"),
360              new Decimal10(field, "123.4567891"),
361              DfpField.FLAG_INEXACT, "RoundDecimal10 #17");
362 
363         test(new Decimal10(field, "123.4567891500"),
364              new Decimal10(field, "123.4567892"),
365              DfpField.FLAG_INEXACT, "RoundDecimal10 #18");
366 
367         test(new Decimal10(field, "123.4567890500"),
368              new Decimal10(field, "123.4567890"),
369              DfpField.FLAG_INEXACT, "RoundDecimal10 #19");
370 
371         test(new Decimal10(field, "123.4567890").add(new Decimal10(field, ".0000000501")),
372              new Decimal10(field, "123.4567891"),
373              DfpField.FLAG_INEXACT, "RoundDecimal10 #20");
374 
375         test(new Decimal10(field, "123.4567890499"),
376              new Decimal10(field, "123.4567890"),
377              DfpField.FLAG_INEXACT, "RoundDecimal10 #21");
378 
379         field.setRoundingMode(DfpField.RoundingMode.ROUND_DOWN);
380 
381         // RoundDecimal10 down
382         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.9")),
383              new Decimal10(field, "1234567890"),
384              DfpField.FLAG_INEXACT, "RoundDecimal10 #22");
385 
386         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.99999999")),
387              new Decimal10(field, "1234567890"),
388              DfpField.FLAG_INEXACT, "RoundDecimal10 #23");
389 
390         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.99999999")),
391              new Decimal10(field, "-1234567890"),
392              DfpField.FLAG_INEXACT, "RoundDecimal10 #24");
393 
394         field.setRoundingMode(DfpField.RoundingMode.ROUND_UP);
395 
396         // RoundDecimal10 up
397         test(new Decimal10(field, 1234567890).add(new Decimal10(field, "0.1")),
398              new Decimal10(field, 1234567891l),
399              DfpField.FLAG_INEXACT, "RoundDecimal10 #25");
400 
401         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.0001")),
402              new Decimal10(field, "1234567891"),
403              DfpField.FLAG_INEXACT, "RoundDecimal10 #26");
404 
405         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.1")),
406              new Decimal10(field, "-1234567891"),
407              DfpField.FLAG_INEXACT, "RoundDecimal10 #27");
408 
409         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.0001")),
410              new Decimal10(field, "-1234567891"),
411              DfpField.FLAG_INEXACT, "RoundDecimal10 #28");
412 
413         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "0")),
414              new Decimal10(field, "-1234567890"),
415              0, "RoundDecimal10 #28.5");
416 
417         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_UP);
418 
419         // RoundDecimal10 half up
420         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.4999999999")),
421              new Decimal10(field, "1234567890"),
422              DfpField.FLAG_INEXACT, "RoundDecimal10 #29");
423 
424         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.50000001")),
425              new Decimal10(field, "1234567891"),
426              DfpField.FLAG_INEXACT, "RoundDecimal10 #30");
427 
428         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.5")),
429              new Decimal10(field, "1234567891"),
430              DfpField.FLAG_INEXACT, "RoundDecimal10 #30.5");
431 
432         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.4999999999")),
433              new Decimal10(field, "-1234567890"),
434              DfpField.FLAG_INEXACT, "RoundDecimal10 #31");
435 
436         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.50000001")),
437              new Decimal10(field, "-1234567891"),
438              DfpField.FLAG_INEXACT, "RoundDecimal10 #32");
439 
440         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_DOWN);
441 
442         // RoundDecimal10 half down
443         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.5001")),
444              new Decimal10(field, "1234567890"),
445              DfpField.FLAG_INEXACT, "RoundDecimal10 #33");
446 
447         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.5000")),
448              new Decimal10(field, "1234567890"),
449              DfpField.FLAG_INEXACT, "RoundDecimal10 #34");
450 
451         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.5001")),
452              new Decimal10(field, "-1234567890"),
453              DfpField.FLAG_INEXACT, "RoundDecimal10 #35");
454 
455         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.6")),
456              new Decimal10(field, "-1234567891"),
457              DfpField.FLAG_INEXACT, "RoundDecimal10 #35.5");
458 
459         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.5000")),
460              new Decimal10(field, "-1234567890"),
461              DfpField.FLAG_INEXACT, "RoundDecimal10 #36");
462 
463         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_ODD);
464 
465         // RoundDecimal10 half odd
466         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.5000")),
467              new Decimal10(field, "1234567891"),
468              DfpField.FLAG_INEXACT, "RoundDecimal10 #37");
469 
470         test(new Decimal10(field, "1234567891").add(new Decimal10(field, "0.5000")),
471              new Decimal10(field, "1234567891"),
472              DfpField.FLAG_INEXACT, "RoundDecimal10 #38");
473 
474         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.5000")),
475              new Decimal10(field, "-1234567891"),
476              DfpField.FLAG_INEXACT, "RoundDecimal10 #39");
477 
478         test(new Decimal10(field, "-1234567891").add(new Decimal10(field, "-0.5000")),
479              new Decimal10(field, "-1234567891"),
480              DfpField.FLAG_INEXACT, "RoundDecimal10 #40");
481 
482         field.setRoundingMode(DfpField.RoundingMode.ROUND_CEIL);
483 
484         // RoundDecimal10 ceil
485         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.0001")),
486              new Decimal10(field, "1234567891"),
487              DfpField.FLAG_INEXACT, "RoundDecimal10 #41");
488 
489         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.9999")),
490              new Decimal10(field, "-1234567890"),
491              DfpField.FLAG_INEXACT, "RoundDecimal10 #42");
492 
493         field.setRoundingMode(DfpField.RoundingMode.ROUND_FLOOR);
494 
495         // RoundDecimal10 floor
496         test(new Decimal10(field, "1234567890").add(new Decimal10(field, "0.9999")),
497              new Decimal10(field, "1234567890"),
498              DfpField.FLAG_INEXACT, "RoundDecimal10 #43");
499 
500         test(new Decimal10(field, "-1234567890").add(new Decimal10(field, "-0.0001")),
501              new Decimal10(field, "-1234567891"),
502              DfpField.FLAG_INEXACT, "RoundDecimal10 #44");
503 
504         field.setRoundingMode(DfpField.RoundingMode.ROUND_HALF_EVEN);  // reset
505     }
506 
507     @Test
508     void testNextAfter()
509     {
510         test(new DfpDec(field, 1).nextAfter(pinf),
511              new DfpDec(field, "1.0000000000000001"),
512              0, "NextAfter #1");
513 
514         test(new DfpDec(field, "1.0000000000000001").nextAfter(ninf),
515              new DfpDec(field, 1),
516              0, "NextAfter #1.5");
517 
518         test(new DfpDec(field, 1).nextAfter(ninf),
519              new DfpDec(field, "0.99999999999999999"),
520              0, "NextAfter #2");
521 
522         test(new DfpDec(field, "0.99999999999999999").nextAfter(new DfpDec(field, 2)),
523              new DfpDec(field, 1),
524              0, "NextAfter #3");
525 
526         test(new DfpDec(field, -1).nextAfter(ninf),
527              new DfpDec(field, "-1.0000000000000001"),
528              0, "NextAfter #4");
529 
530         test(new DfpDec(field, -1).nextAfter(pinf),
531              new DfpDec(field, "-0.99999999999999999"),
532              0, "NextAfter #5");
533 
534         test(new DfpDec(field, "-0.99999999999999999").nextAfter(new DfpDec(field, -2)),
535              new DfpDec(field, (byte) -1),
536              0, "NextAfter #6");
537 
538         test(new DfpDec(field, (byte) 2).nextAfter(new DfpDec(field, 2)),
539              new DfpDec(field, 2l),
540              0, "NextAfter #7");
541 
542         test(new DfpDec(field, 0).nextAfter(new DfpDec(field, 0)),
543              new DfpDec(field, 0),
544              0, "NextAfter #8");
545 
546         test(new DfpDec(field, -2).nextAfter(new DfpDec(field, -2)),
547              new DfpDec(field, -2),
548              0, "NextAfter #9");
549 
550         test(new DfpDec(field, 0).nextAfter(new DfpDec(field, 1)),
551              new DfpDec(field, "1e-131092"),
552              DfpField.FLAG_UNDERFLOW, "NextAfter #10");
553 
554         test(new DfpDec(field, 0).nextAfter(new DfpDec(field, -1)),
555              new DfpDec(field, "-1e-131092"),
556              DfpField.FLAG_UNDERFLOW, "NextAfter #11");
557 
558         test(new DfpDec(field, "-1e-131092").nextAfter(pinf),
559              new DfpDec(field, "-0"),
560              DfpField.FLAG_UNDERFLOW|DfpField.FLAG_INEXACT, "Next After #12");
561 
562         test(new DfpDec(field, "1e-131092").nextAfter(ninf),
563              new DfpDec(field, "0"),
564              DfpField.FLAG_UNDERFLOW|DfpField.FLAG_INEXACT, "Next After #13");
565 
566         test(new DfpDec(field, "9.9999999999999999e131078").nextAfter(pinf),
567              pinf,
568              DfpField.FLAG_OVERFLOW|DfpField.FLAG_INEXACT, "Next After #14");
569     }
570 
571 }