/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.product.swap;
import static com.opengamma.strata.basics.currency.Currency.GBP;
import static com.opengamma.strata.basics.currency.Currency.USD;
import static com.opengamma.strata.basics.date.DayCounts.ACT_365F;
import static com.opengamma.strata.basics.index.IborIndices.GBP_LIBOR_3M;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.coverBeanEquals;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static com.opengamma.strata.collect.TestHelper.date;
import static com.opengamma.strata.product.common.PayReceive.PAY;
import static com.opengamma.strata.product.common.PayReceive.RECEIVE;
import static com.opengamma.strata.product.swap.SwapLegType.FIXED;
import static com.opengamma.strata.product.swap.SwapLegType.IBOR;
import static com.opengamma.strata.product.swap.SwapLegType.OTHER;
import static com.opengamma.strata.product.swap.SwapLegType.OVERNIGHT;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import java.util.Optional;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.currency.CurrencyAmount;
import com.opengamma.strata.product.common.PayReceive;
import com.opengamma.strata.product.rate.IborRateComputation;
/**
* Test.
*/
@Test
public class ResolvedSwapTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
private static final LocalDate DATE_2014_06_30 = date(2014, 6, 30);
private static final LocalDate DATE_2014_09_30 = date(2014, 9, 30);
private static final LocalDate DATE_2014_10_01 = date(2014, 10, 1);
private static final IborRateComputation GBP_LIBOR_3M_2014_06_28 =
IborRateComputation.of(GBP_LIBOR_3M, date(2014, 6, 28), REF_DATA);
private static final NotionalExchange NOTIONAL_EXCHANGE =
NotionalExchange.of(CurrencyAmount.of(GBP, 2000d), DATE_2014_10_01);
private static final RateAccrualPeriod RAP = RateAccrualPeriod.builder()
.startDate(DATE_2014_06_30)
.endDate(DATE_2014_09_30)
.yearFraction(0.25d)
.rateComputation(GBP_LIBOR_3M_2014_06_28)
.build();
private static final RatePaymentPeriod RPP1 = RatePaymentPeriod.builder()
.paymentDate(DATE_2014_10_01)
.accrualPeriods(RAP)
.dayCount(ACT_365F)
.currency(GBP)
.notional(5000d)
.build();
private static final RatePaymentPeriod RPP2 = RatePaymentPeriod.builder()
.paymentDate(DATE_2014_10_01)
.accrualPeriods(RAP)
.dayCount(ACT_365F)
.currency(USD)
.notional(6000d)
.build();
static final ResolvedSwapLeg LEG1 = ResolvedSwapLeg.builder()
.type(FIXED)
.payReceive(PAY)
.paymentPeriods(RPP1)
.paymentEvents(NOTIONAL_EXCHANGE)
.build();
static final ResolvedSwapLeg LEG2 = ResolvedSwapLeg.builder()
.type(IBOR)
.payReceive(RECEIVE)
.paymentPeriods(RPP2)
.build();
public void test_of() {
ResolvedSwap test = ResolvedSwap.of(LEG1, LEG2);
assertEquals(test.getLegs(), ImmutableSet.of(LEG1, LEG2));
assertEquals(test.getLegs(SwapLegType.FIXED), ImmutableList.of(LEG1));
assertEquals(test.getLegs(SwapLegType.IBOR), ImmutableList.of(LEG2));
assertEquals(test.getLeg(PayReceive.PAY), Optional.of(LEG1));
assertEquals(test.getLeg(PayReceive.RECEIVE), Optional.of(LEG2));
assertEquals(test.getPayLeg(), Optional.of(LEG1));
assertEquals(test.getReceiveLeg(), Optional.of(LEG2));
assertEquals(test.getStartDate(), LEG1.getStartDate());
assertEquals(test.getEndDate(), LEG1.getEndDate());
assertEquals(test.isCrossCurrency(), true);
assertEquals(test.allPaymentCurrencies(), ImmutableSet.of(GBP, USD));
assertEquals(test.allIndices(), ImmutableSet.of(GBP_LIBOR_3M));
}
public void test_of_singleCurrency() {
ResolvedSwap test = ResolvedSwap.of(LEG1);
assertEquals(test.getLegs(), ImmutableSet.of(LEG1));
assertEquals(test.isCrossCurrency(), false);
assertEquals(test.allPaymentCurrencies(), ImmutableSet.of(GBP));
assertEquals(test.allIndices(), ImmutableSet.of(GBP_LIBOR_3M));
}
public void test_builder() {
ResolvedSwap test = ResolvedSwap.builder()
.legs(LEG1)
.build();
assertEquals(test.getLegs(), ImmutableSet.of(LEG1));
assertEquals(test.isCrossCurrency(), false);
assertEquals(test.allPaymentCurrencies(), ImmutableSet.of(GBP));
assertEquals(test.allIndices(), ImmutableSet.of(GBP_LIBOR_3M));
}
//-------------------------------------------------------------------------
public void test_getLegs_SwapLegType() {
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLegs(FIXED), ImmutableList.of(LEG1));
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLegs(IBOR), ImmutableList.of(LEG2));
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLegs(OVERNIGHT), ImmutableList.of());
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLegs(OTHER), ImmutableList.of());
}
public void test_getLeg_PayReceive() {
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLeg(PAY), Optional.of(LEG1));
assertEquals(ResolvedSwap.of(LEG1, LEG2).getLeg(RECEIVE), Optional.of(LEG2));
assertEquals(ResolvedSwap.of(LEG1).getLeg(PAY), Optional.of(LEG1));
assertEquals(ResolvedSwap.of(LEG2).getLeg(PAY), Optional.empty());
assertEquals(ResolvedSwap.of(LEG1).getLeg(RECEIVE), Optional.empty());
assertEquals(ResolvedSwap.of(LEG2).getLeg(RECEIVE), Optional.of(LEG2));
}
//-------------------------------------------------------------------------
public void coverage() {
ResolvedSwap test = ResolvedSwap.builder()
.legs(LEG1)
.build();
coverImmutableBean(test);
ResolvedSwap test2 = ResolvedSwap.builder()
.legs(LEG2)
.build();
coverBeanEquals(test, test2);
}
public void test_serialization() {
ResolvedSwap test = ResolvedSwap.builder()
.legs(LEG1)
.build();
assertSerialization(test);
}
}