/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.product.rate; import static com.opengamma.strata.basics.index.OvernightIndices.CHF_TOIS; import static com.opengamma.strata.basics.index.OvernightIndices.GBP_SONIA; import static com.opengamma.strata.basics.index.OvernightIndices.USD_FED_FUND; 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 org.testng.annotations.Test; import com.google.common.collect.ImmutableSet; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.index.Index; import com.opengamma.strata.basics.index.OvernightIndexObservation; /** * Test. */ @Test public class OvernightAveragedRateComputationTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); //------------------------------------------------------------------------- public void test_of_noRateCutoff() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); OvernightAveragedRateComputation expected = OvernightAveragedRateComputation.builder() .index(USD_FED_FUND) .fixingCalendar(USD_FED_FUND.getFixingCalendar().resolve(REF_DATA)) .startDate(date(2016, 2, 24)) .endDate(date(2016, 3, 24)) .rateCutOffDays(0) .build(); assertEquals(test, expected); } public void test_of_noRateCutoff_tomNext() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(CHF_TOIS, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); OvernightAveragedRateComputation expected = OvernightAveragedRateComputation.builder() .index(CHF_TOIS) .fixingCalendar(CHF_TOIS.getFixingCalendar().resolve(REF_DATA)) .startDate(date(2016, 2, 23)) .endDate(date(2016, 3, 23)) .rateCutOffDays(0) .build(); assertEquals(test, expected); } public void test_of_rateCutoff_0() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), 0, REF_DATA); OvernightAveragedRateComputation expected = OvernightAveragedRateComputation.builder() .index(USD_FED_FUND) .fixingCalendar(USD_FED_FUND.getFixingCalendar().resolve(REF_DATA)) .startDate(date(2016, 2, 24)) .endDate(date(2016, 3, 24)) .rateCutOffDays(0) .build(); assertEquals(test, expected); } public void test_of_rateCutoff_2() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), 2, REF_DATA); OvernightAveragedRateComputation expected = OvernightAveragedRateComputation.builder() .index(USD_FED_FUND) .fixingCalendar(USD_FED_FUND.getFixingCalendar().resolve(REF_DATA)) .startDate(date(2016, 2, 24)) .endDate(date(2016, 3, 24)) .rateCutOffDays(2) .build(); assertEquals(test, expected); } public void test_of_badDateOrder() { assertThrowsIllegalArg(() -> OvernightAveragedRateComputation.of( USD_FED_FUND, date(2016, 2, 24), date(2016, 2, 24), REF_DATA)); assertThrowsIllegalArg(() -> OvernightAveragedRateComputation.of( USD_FED_FUND, date(2016, 2, 25), date(2016, 2, 24), REF_DATA)); } public void test_of_rateCutoff_negative() { assertThrowsIllegalArg(() -> OvernightAveragedRateComputation.of( USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), -1, REF_DATA)); } //------------------------------------------------------------------------- public void test_calculate() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals( test.calculateEffectiveFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculateEffectiveFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateFixingFromEffective(date(2016, 2, 24)), USD_FED_FUND.calculateFixingFromEffective(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculatePublicationFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculatePublicationFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateMaturityFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculateMaturityFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateMaturityFromEffective(date(2016, 2, 24)), USD_FED_FUND.calculateMaturityFromEffective(date(2016, 2, 24), REF_DATA)); } public void test_observeOn() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals(test.observeOn(date(2016, 2, 24)), OvernightIndexObservation.of(USD_FED_FUND, date(2016, 2, 24), REF_DATA)); } //------------------------------------------------------------------------- public void test_collectIndices() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); ImmutableSet.Builder<Index> builder = ImmutableSet.builder(); test.collectIndices(builder); assertEquals(builder.build(), ImmutableSet.of(USD_FED_FUND)); } //------------------------------------------------------------------------- public void coverage() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); coverImmutableBean(test); OvernightAveragedRateComputation test2 = OvernightAveragedRateComputation.of(GBP_SONIA, date(2014, 6, 3), date(2014, 7, 3), 3, REF_DATA); coverBeanEquals(test, test2); } public void test_serialization() { OvernightAveragedRateComputation test = OvernightAveragedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertSerialization(test); } }