@Test
 public void testMinus() throws Exception {
   MutableMoney m1 = MutableMoney.of(0, 54);
   MutableMoney m2 = MutableMoney.of(1, 89);
   assertEquals(MutableMoney.of(-1, 35), m1.minus(m2));
   assertEquals(MutableMoney.of(-1, 79), m1.minus(0, 44));
 }
 @Test
 public void testPercentageOf() {
   MutableMoney money = MutableMoney.ONE;
   assertEquals(0.1, money.percentageOf(MutableMoney.TEN), 0.0001);
   money = MutableMoney.of(774, 27);
   assertEquals(0.0042, money.percentageOf(MutableMoney.of(182737, 9)), 0.0001);
 }
 @Test
 public void testMultiply() throws Exception {
   MutableMoney m1 = MutableMoney.of(1, 20);
   assertEquals(MutableMoney.of(2, 40), m1.multiply(2));
   m1 = MutableMoney.of(-1, 20);
   assertEquals(MutableMoney.of(2, 40).negate(), m1.multiply(2));
 }
 @Test
 public void testPlus() throws Exception {
   MutableMoney m1 = MutableMoney.of(1, 53);
   MutableMoney m2 = MutableMoney.of(2, 76);
   assertEquals(MutableMoney.of(4, 29), m1.plus(m2));
   assertEquals(MutableMoney.of(5, 97), m1.plus(1, 68));
 }
  @Test
  public void testParse() {
    String s = "1,47";
    assertEquals(MutableMoney.of(1, 47), MutableMoney.parse(s));

    s = "890";
    assertEquals(MutableMoney.of(890, 0), MutableMoney.parse(s));
  }
 @Test
 public void testSetMinor() {
   MutableMoney money = MutableMoney.of(87, 30);
   assertEquals(MutableMoney.of(87, 2), money.setMinor(2));
 }
 @Test
 public void testSetMajor() {
   MutableMoney money = MutableMoney.of(87, 30);
   assertEquals(MutableMoney.of(20, 30), money.setMajor(20));
 }
 @Test
 public void testEquals() throws Exception {
   assertEquals(MutableMoney.of(2, 50), MutableMoney.of(BigDecimal.valueOf(2.5)));
   assertEquals(MutableMoney.of(2, 56), MutableMoney.of(BigDecimal.valueOf(2.56)));
 }
 @Test
 public void testDivide() throws Exception {
   MutableMoney m1 = MutableMoney.of(1, 0);
   assertEquals(2, m1.divide(2).size());
   assertEquals(MutableMoney.of(0, 50), m1.divide(2).get(0));
 }
 @Test(expected = IllegalArgumentException.class)
 public void testOfOverScaledValue() throws Exception {
   MutableMoney.of(BigDecimal.valueOf(10.9282));
 }
 @Test(expected = IllegalArgumentException.class)
 public void testOfTooBigMinor() throws Exception {
   MutableMoney.of(0, 100);
 }
 @Test(expected = IllegalArgumentException.class)
 public void testOfSmallMinor() throws Exception {
   MutableMoney.of(0, -1);
 }
 @Test
 public void testOf() throws Exception {
   assertEquals("1,23", MutableMoney.of(1, 23).toString());
   assertEquals("1,23", MutableMoney.of(BigDecimal.valueOf(123, 2)).toString());
 }