| 
20 | 20 | import javax.money.*;  | 
21 | 21 | 
 
  | 
22 | 22 | import java.io.*;  | 
 | 23 | +import java.lang.invoke.MethodHandles;  | 
23 | 24 | import java.math.BigDecimal;  | 
24 | 25 | import java.math.BigInteger;  | 
 | 26 | +import java.util.logging.Level;  | 
 | 27 | +import java.util.logging.Logger;  | 
25 | 28 | 
 
  | 
26 | 29 | import static org.testng.Assert.*;  | 
27 | 30 | 
 
  | 
28 | 31 | /**  | 
29 | 32 |  * @author Anatole  | 
30 | 33 |  */  | 
31 | 34 | public class FastMoneyTest{  | 
 | 35 | +      | 
 | 36 | +    private static final Logger LOG = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());  | 
32 | 37 | 
 
  | 
33 | 38 |     private static final BigDecimal TEN = new BigDecimal(10.0d);  | 
34 | 39 |     protected static final CurrencyUnit EURO = MonetaryCurrencies.getCurrency("EUR");  | 
@@ -416,6 +421,123 @@ public void testMultiplyDouble(){  | 
416 | 421 |         FastMoney m = FastMoney.of(100, "CHF");  | 
417 | 422 |         assertEquals(FastMoney.of(new BigDecimal("50.0"), "CHF"), m.multiply(0.5));  | 
418 | 423 |     }  | 
 | 424 | +      | 
 | 425 | +    /**  | 
 | 426 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(double)}.  | 
 | 427 | +     */  | 
 | 428 | +    @Test  | 
 | 429 | +    public void testMultiplyDoublePositiveInfinity(){  | 
 | 430 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 431 | +        try {  | 
 | 432 | +            m.multiply(Double.POSITIVE_INFINITY);  | 
 | 433 | +            fail("multiplying with POSITIVE_INFINITY should fail");  | 
 | 434 | +        } catch (ArithmeticException e) {  | 
 | 435 | +            LOG.log(Level.FINE, "multiplying with POSITIVE_INFINITY fails as expected", e);  | 
 | 436 | +        }  | 
 | 437 | +    }  | 
 | 438 | +      | 
 | 439 | +    /**  | 
 | 440 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(double)}.  | 
 | 441 | +     */  | 
 | 442 | +    @Test  | 
 | 443 | +    public void testMultiplyDoubleNegativeInfinity(){  | 
 | 444 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 445 | +        try {  | 
 | 446 | +            m.multiply(Double.NEGATIVE_INFINITY);  | 
 | 447 | +            fail("multiplying with NEGATIVE_INFINITY should fail");  | 
 | 448 | +        } catch (ArithmeticException e) {  | 
 | 449 | +            LOG.log(Level.FINE, "multiplying with NEGATIVE_INFINITY fails as expected", e);  | 
 | 450 | +        }  | 
 | 451 | +    }  | 
 | 452 | +      | 
 | 453 | +    /**  | 
 | 454 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(double)}.  | 
 | 455 | +     */  | 
 | 456 | +    @Test  | 
 | 457 | +    public void testMultiplyDoubleNaN(){  | 
 | 458 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 459 | +        try {  | 
 | 460 | +            m.multiply(Double.NaN);  | 
 | 461 | +            fail("multiplying with NaN should fail");  | 
 | 462 | +        } catch (ArithmeticException e) {  | 
 | 463 | +            LOG.log(Level.FINE, "multiplying with NaN fails as expected", e);  | 
 | 464 | +        }  | 
 | 465 | +    }  | 
 | 466 | +      | 
 | 467 | +    /**  | 
 | 468 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(Number)}.  | 
 | 469 | +     */  | 
 | 470 | +    @Test  | 
 | 471 | +    public void testMultiplyNumberPositiveInfinity(){  | 
 | 472 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 473 | +        try {  | 
 | 474 | +            m.multiply(Double.valueOf(Double.POSITIVE_INFINITY));  | 
 | 475 | +            fail("multiplying with POSITIVE_INFINITY should fail");  | 
 | 476 | +        } catch (ArithmeticException e) {  | 
 | 477 | +            LOG.log(Level.FINE, "multiplying with POSITIVE_INFINITY fails as expected", e);  | 
 | 478 | +        }  | 
 | 479 | +    }  | 
 | 480 | +      | 
 | 481 | +    /**  | 
 | 482 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(Number)}.  | 
 | 483 | +     */  | 
 | 484 | +    @Test  | 
 | 485 | +    public void testMultiplyNumberNegativeInfinity(){  | 
 | 486 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 487 | +        try {  | 
 | 488 | +            m.multiply(Double.valueOf(Double.NEGATIVE_INFINITY));  | 
 | 489 | +            fail("multiplying with NEGATIVE_INFINITY should fail");  | 
 | 490 | +        } catch (ArithmeticException e) {  | 
 | 491 | +            LOG.log(Level.FINE, "multiplying with NEGATIVE_INFINITY fails as expected", e);  | 
 | 492 | +        }  | 
 | 493 | +    }  | 
 | 494 | +      | 
 | 495 | +    /**  | 
 | 496 | +     * Test method for {@link org.javamoney.moneta.FastMoney#multiply(Number)}.  | 
 | 497 | +     */  | 
 | 498 | +    @Test  | 
 | 499 | +    public void testMultiplyNumberNaN(){  | 
 | 500 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 501 | +        try {  | 
 | 502 | +            m.multiply(Double.valueOf(Double.NaN));  | 
 | 503 | +            fail("multiplying with NaN should fail");  | 
 | 504 | +        } catch (ArithmeticException e) {  | 
 | 505 | +            LOG.log(Level.FINE, "multiplying with NaN fails as expected", e);  | 
 | 506 | +        }  | 
 | 507 | +    }  | 
 | 508 | +      | 
 | 509 | +    /**  | 
 | 510 | +     * Test method for {@link org.javamoney.moneta.FastMoney#divide(double)}.  | 
 | 511 | +     */  | 
 | 512 | +    @Test  | 
 | 513 | +    public void testDivideBadNaN(){  | 
 | 514 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 515 | +        try {  | 
 | 516 | +            m.divide(Double.NaN);  | 
 | 517 | +            fail("dividing by NaN should not be allowed");  | 
 | 518 | +        } catch (ArithmeticException e) {  | 
 | 519 | +            LOG.log(Level.FINE, "dividing by NaN fails as expected", e);  | 
 | 520 | +        }  | 
 | 521 | +        try {  | 
 | 522 | +            m.divide(Double.valueOf(Double.NaN));  | 
 | 523 | +            fail("dividing by h NaN should not be allowed");  | 
 | 524 | +        } catch (ArithmeticException e) {  | 
 | 525 | +            LOG.log(Level.FINE, "dividing by NaN fails as expected", e);  | 
 | 526 | +        }  | 
 | 527 | +    }  | 
 | 528 | +      | 
 | 529 | +    /**  | 
 | 530 | +     * Test method for {@link org.javamoney.moneta.FastMoney#divide(double)}.  | 
 | 531 | +     */  | 
 | 532 | +    @Test  | 
 | 533 | +    public void testDivideInfinityDoubles(){  | 
 | 534 | +        double[] values = new double[]{Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY};  | 
 | 535 | +        FastMoney m = FastMoney.of(new BigDecimal("50.0"), "USD");  | 
 | 536 | +        for (double d : values) {  | 
 | 537 | +            assertTrue(m.divide(d).isZero());  | 
 | 538 | +            assertTrue(m.divide(Double.valueOf(d)).isZero());  | 
 | 539 | +        }  | 
 | 540 | +    }  | 
419 | 541 | 
 
  | 
420 | 542 |     /**  | 
421 | 543 |      * Test method for {@link org.javamoney.moneta.FastMoney#negate()}.  | 
 | 
0 commit comments