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