### Question:
Money implements IMoney { public IMoney subtract(IMoney m) { return add(m.negate()); } Money(int amount, String currency); IMoney add(IMoney m); IMoney addMoney(Money m); IMoney addMoneyBag(MoneyBag s); int amount(); String currency(); @Override boolean equals(Object anObject); @Override int hashCode(); boolean isZero(); IMoney multiply(int factor); IMoney negate(); IMoney subtract(IMoney m); @Override String toString(); void appendTo(MoneyBag m);  }### Answer:
@Test public void testNormalize2() { Money expected = new Money(7, "USD"); assertEquals(expected, fMB1.subtract(f12CHF)); }
@Test public void testNormalize3() { IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD")); Money expected = new Money(4, "USD"); assertEquals(expected, fMB1.subtract(ms1)); }
@Test public void testNormalize4() { IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD")); Money expected = new Money(-3, "USD"); assertEquals(expected, f12CHF.subtract(ms1)); }
@Test public void testSimpleSubtract() { Money expected = new Money(2, "CHF"); assertEquals(expected, f14CHF.subtract(f12CHF)); }
@Test public void testBagSubtract() { IMoney expected = MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD")); assertEquals(expected, fMB1.subtract(fMB2)); }