/**
* Copyright (C) 2014 - 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.index.IborIndices.GBP_LIBOR_1M;
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.assertThrowsIllegalArg;
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 org.testng.Assert.assertEquals;
import java.time.LocalDate;
import java.util.Optional;
import java.util.OptionalDouble;
import org.testng.annotations.Test;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.currency.CurrencyAmount;
import com.opengamma.strata.product.rate.FixedRateComputation;
import com.opengamma.strata.product.rate.IborRateComputation;
/**
* Test.
*/
@Test
public class IborRateStubCalculationTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
private static final CurrencyAmount GBP_P1000 = CurrencyAmount.of(GBP, 1000);
private static final LocalDate DATE = date(2015, 6, 30);
//-------------------------------------------------------------------------
public void test_ofFixedRate() {
IborRateStubCalculation test = IborRateStubCalculation.ofFixedRate(0.025d);
assertEquals(test.getFixedRate(), OptionalDouble.of(0.025d));
assertEquals(test.getIndex(), Optional.empty());
assertEquals(test.getIndexInterpolated(), Optional.empty());
assertEquals(test.isFixedRate(), true);
assertEquals(test.isKnownAmount(), false);
assertEquals(test.isFloatingRate(), false);
assertEquals(test.isInterpolated(), false);
}
public void test_ofKnownAmount() {
IborRateStubCalculation test = IborRateStubCalculation.ofKnownAmount(GBP_P1000);
assertEquals(test.getFixedRate(), OptionalDouble.empty());
assertEquals(test.getKnownAmount(), Optional.of(GBP_P1000));
assertEquals(test.getIndex(), Optional.empty());
assertEquals(test.getIndexInterpolated(), Optional.empty());
assertEquals(test.isFixedRate(), false);
assertEquals(test.isKnownAmount(), true);
assertEquals(test.isFloatingRate(), false);
assertEquals(test.isInterpolated(), false);
}
public void test_ofIborRate() {
IborRateStubCalculation test = IborRateStubCalculation.ofIborRate(GBP_LIBOR_3M);
assertEquals(test.getFixedRate(), OptionalDouble.empty());
assertEquals(test.getIndex(), Optional.of(GBP_LIBOR_3M));
assertEquals(test.getIndexInterpolated(), Optional.empty());
assertEquals(test.isFixedRate(), false);
assertEquals(test.isKnownAmount(), false);
assertEquals(test.isFloatingRate(), true);
assertEquals(test.isInterpolated(), false);
}
public void test_ofIborInterpolatedRate() {
IborRateStubCalculation test = IborRateStubCalculation.ofIborInterpolatedRate(GBP_LIBOR_1M, GBP_LIBOR_3M);
assertEquals(test.getFixedRate(), OptionalDouble.empty());
assertEquals(test.getIndex(), Optional.of(GBP_LIBOR_1M));
assertEquals(test.getIndexInterpolated(), Optional.of(GBP_LIBOR_3M));
assertEquals(test.isFixedRate(), false);
assertEquals(test.isKnownAmount(), false);
assertEquals(test.isFloatingRate(), true);
assertEquals(test.isInterpolated(), true);
}
public void test_ofIborInterpolatedRate_invalid_interpolatedSameIndex() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.ofIborInterpolatedRate(GBP_LIBOR_3M, GBP_LIBOR_3M));
}
public void test_of_null() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.ofIborRate(null));
assertThrowsIllegalArg(() -> IborRateStubCalculation.ofIborInterpolatedRate(null, GBP_LIBOR_3M));
assertThrowsIllegalArg(() -> IborRateStubCalculation.ofIborInterpolatedRate(GBP_LIBOR_3M, null));
assertThrowsIllegalArg(() -> IborRateStubCalculation.ofIborInterpolatedRate(null, null));
}
//-------------------------------------------------------------------------
public void test_builder_invalid_fixedAndIbor() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.builder()
.fixedRate(0.025d)
.index(GBP_LIBOR_3M)
.build());
}
public void test_builder_invalid_fixedAndKnown() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.builder()
.fixedRate(0.025d)
.knownAmount(GBP_P1000)
.build());
}
public void test_builder_invalid_knownAndIbor() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.builder()
.knownAmount(GBP_P1000)
.index(GBP_LIBOR_3M)
.build());
}
public void test_builder_invalid_interpolatedWithoutBase() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.builder()
.indexInterpolated(GBP_LIBOR_3M)
.build());
}
public void test_builder_invalid_interpolatedSameIndex() {
assertThrowsIllegalArg(() -> IborRateStubCalculation.builder()
.index(GBP_LIBOR_3M)
.indexInterpolated(GBP_LIBOR_3M)
.build());
}
//-------------------------------------------------------------------------
public void test_createRateComputation_NONE() {
IborRateStubCalculation test = IborRateStubCalculation.NONE;
assertEquals(test.createRateComputation(DATE, GBP_LIBOR_3M, REF_DATA), IborRateComputation.of(GBP_LIBOR_3M, DATE, REF_DATA));
}
public void test_createRateComputation_fixedRate() {
IborRateStubCalculation test = IborRateStubCalculation.ofFixedRate(0.025d);
assertEquals(test.createRateComputation(DATE, GBP_LIBOR_3M, REF_DATA), FixedRateComputation.of(0.025d));
}
public void test_createRateComputation_knownAmount() {
IborRateStubCalculation test = IborRateStubCalculation.ofKnownAmount(GBP_P1000);
assertEquals(test.createRateComputation(DATE, GBP_LIBOR_3M, REF_DATA), KnownAmountRateComputation.of(GBP_P1000));
}
//-------------------------------------------------------------------------
public void coverage() {
IborRateStubCalculation test = IborRateStubCalculation.ofIborInterpolatedRate(GBP_LIBOR_1M, GBP_LIBOR_3M);
coverImmutableBean(test);
IborRateStubCalculation test2 = IborRateStubCalculation.ofFixedRate(0.028d);
coverBeanEquals(test, test2);
IborRateStubCalculation test3 = IborRateStubCalculation.ofKnownAmount(GBP_P1000);
coverBeanEquals(test, test3);
}
public void test_serialization() {
IborRateStubCalculation test = IborRateStubCalculation.ofIborRate(GBP_LIBOR_3M);
assertSerialization(test);
}
}