### Question:
MultiCurrencyAmount implements FxConvertible<CurrencyAmount>, ImmutableBean, Serializable { public static MultiCurrencyAmount total(Iterable<CurrencyAmount> amounts) { ArgChecker.notNull(amounts, "amounts"); return Guavate.stream(amounts).collect(toMultiCurrencyAmount()); } private  MultiCurrencyAmount(ImmutableSortedSet<CurrencyAmount> amounts); private  MultiCurrencyAmount(
      SortedSet<CurrencyAmount> amounts); static MultiCurrencyAmount empty(); static MultiCurrencyAmount of(Currency currency, double amount); static MultiCurrencyAmount of(CurrencyAmount... amounts); static MultiCurrencyAmount of(Iterable<CurrencyAmount> amounts); static MultiCurrencyAmount of(Map<Currency, Double> map); static MultiCurrencyAmount total(Iterable<CurrencyAmount> amounts); static Collector<CurrencyAmount, ?, MultiCurrencyAmount> toMultiCurrencyAmount(); ImmutableSet<Currency> getCurrencies(); int size(); boolean contains(Currency currency); CurrencyAmount getAmount(Currency currency); CurrencyAmount getAmountOrZero(Currency currency); MultiCurrencyAmount plus(Currency currency, double amountToAdd); MultiCurrencyAmount plus(CurrencyAmount amountToAdd); MultiCurrencyAmount plus(MultiCurrencyAmount amountToAdd); MultiCurrencyAmount minus(Currency currency, double amountToAdd); MultiCurrencyAmount minus(CurrencyAmount amountToSubtract); MultiCurrencyAmount minus(MultiCurrencyAmount amountToSubtract); MultiCurrencyAmount multipliedBy(double factor); MultiCurrencyAmount negated(); Stream<CurrencyAmount> stream(); MultiCurrencyAmount mapAmounts(DoubleUnaryOperator mapper); MultiCurrencyAmount mapCurrencyAmounts(UnaryOperator<CurrencyAmount> operator); @Override CurrencyAmount convertedTo(Currency resultCurrency, FxRateProvider rateProvider); ImmutableSortedMap<Currency, Double> toMap(); @Override String toString(); static MultiCurrencyAmount.Meta meta(); @Override MultiCurrencyAmount.Meta metaBean(); ImmutableSortedSet<CurrencyAmount> getAmounts(); @Override boolean equals(Object obj); @Override int hashCode();  }### Answer:
@Test public void test_total_Iterable() { Iterable<CurrencyAmount> iterable = Arrays.asList(CA1, CA3); assertMCA(MultiCurrencyAmount.total(iterable), CA1, CA3); }
@Test public void test_total_Iterable_null() { Iterable<CurrencyAmount> iterable = null; assertThatIllegalArgumentException().isThrownBy(() -> MultiCurrencyAmount.total(iterable)); }
@Test public void test_total_Iterable_containsNull() { Iterable<CurrencyAmount> iterable = Arrays.asList(CA1, null, CA2); assertThatIllegalArgumentException().isThrownBy(() -> MultiCurrencyAmount.total(iterable)); }