/// <summary> /// Returns a new array containing the values from this array with the values from the amount subtracted. /// <para> /// The amount is subtracted from each element in this array. /// /// </para> /// </summary> /// <param name="amount"> the amount to subtract </param> /// <returns> a new array containing the values from this array with the values from the amount subtracted </returns> public MultiCurrencyAmountArray minus(MultiCurrencyAmount amount) { ImmutableMap.Builder <Currency, DoubleArray> builder = ImmutableMap.builder(); foreach (Currency currency in Sets.union(values.Keys, amount.Currencies)) { DoubleArray array = values.get(currency); if (array == null) { builder.put(currency, DoubleArray.filled(size_Renamed, -amount.getAmount(currency).Amount)); } else if (!amount.contains(currency)) { builder.put(currency, array); } else { builder.put(currency, array.minus(amount.getAmount(currency).Amount)); } } return(MultiCurrencyAmountArray.of(builder.build())); }
//------------------------------------------------------------------------- private void assertMCA(MultiCurrencyAmount actual, params CurrencyAmount[] expected) { assertEquals(actual.size(), expected.Length); assertEquals(actual.Amounts.size(), expected.Length); assertEquals(actual.Amounts, ImmutableSet.copyOf(expected)); ISet <Currency> currencies = new HashSet <Currency>(); foreach (CurrencyAmount expectedAmount in expected) { currencies.Add(expectedAmount.Currency); assertEquals(actual.contains(expectedAmount.Currency), true); assertEquals(actual.getAmount(expectedAmount.Currency), expectedAmount); assertEquals(actual.getAmountOrZero(expectedAmount.Currency), expectedAmount); } assertEquals(actual.Currencies, currencies); Currency nonExisting = Currency.of("FRZ"); assertEquals(actual.contains(nonExisting), false); assertThrowsIllegalArg(() => actual.getAmount(nonExisting)); assertEquals(actual.getAmountOrZero(nonExisting), CurrencyAmount.zero(nonExisting)); }