### Question:
Money implements IMoney { public IMoney add(IMoney m) { return m.addMoney(this); } 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 testSimpleAdd() { Money expected = new Money(26, "CHF"); assertEquals(expected, f12CHF.add(f14CHF)); }
@Test public void testSimpleBagAdd() { IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD")); assertEquals(expected, f14CHF.add(fMB1)); }
@Test public void testBagSimpleAdd() { IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD")); assertEquals(expected, fMB1.add(f14CHF)); }
@Test public void testBagSumAdd() { IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD")); assertEquals(expected, fMB1.add(fMB2)); }
@Test public void testMixedSimpleAdd() { IMoney expected = MoneyBag.create(f12CHF, f7USD); assertEquals(expected, f12CHF.add(f7USD)); }