/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.curve; import static com.opengamma.strata.basics.currency.Currency.GBP; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.basics.index.IborIndices.CHF_LIBOR_3M; 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.basics.index.IborIndices.USD_LIBOR_1M; import static com.opengamma.strata.basics.index.IborIndices.USD_LIBOR_2M; import static com.opengamma.strata.basics.index.OvernightIndices.EUR_EONIA; 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 java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import java.util.Map; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.currency.Currency; import com.opengamma.strata.basics.index.Index; /** * Test {@link CurveGroup}. */ @Test public class CurveGroupTest { private static final CurveGroupName NAME = CurveGroupName.of("TestGroup"); private static final CurveGroupName NAME2 = CurveGroupName.of("TestGroup2"); private static final CurveName DISCOUNT_NAME = CurveName.of("Discount"); private static final CurveName IBOR_NAME = CurveName.of("Ibor"); private static final CurveName OVERNIGHT_NAME = CurveName.of("Overnight"); private static final Curve DISCOUNT_CURVE = ConstantCurve.of("Discount", 0.99); private static final Map<Currency, Curve> DISCOUNT_CURVES = ImmutableMap.of(GBP, DISCOUNT_CURVE); private static final Curve IBOR_CURVE = ConstantCurve.of("Ibor", 0.5); private static final Curve OVERNIGHT_CURVE = ConstantCurve.of("Overnight", 0.6); private static final Map<Index, Curve> IBOR_CURVES = ImmutableMap.of(GBP_LIBOR_3M, IBOR_CURVE); //------------------------------------------------------------------------- public void test_of() { CurveGroup test = CurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); assertThat(test.getName()).isEqualTo(NAME); assertThat(test.getDiscountCurves()).isEqualTo(DISCOUNT_CURVES); assertThat(test.getForwardCurves()).isEqualTo(IBOR_CURVES); assertThat(test.findCurve(DISCOUNT_NAME)).hasValue(DISCOUNT_CURVE); assertThat(test.findCurve(IBOR_NAME)).hasValue(IBOR_CURVE); assertThat(test.findCurve(OVERNIGHT_NAME)).isEmpty(); assertThat(test.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(test.findDiscountCurve(USD)).isEmpty(); assertThat(test.findForwardCurve(GBP_LIBOR_3M)).hasValue(IBOR_CURVE); assertThat(test.findForwardCurve(CHF_LIBOR_3M)).isEmpty(); } public void test_builder() { CurveGroup test = CurveGroup.builder() .name(NAME) .discountCurves(DISCOUNT_CURVES) .forwardCurves(IBOR_CURVES) .build(); assertThat(test.getName()).isEqualTo(NAME); assertThat(test.getDiscountCurves()).isEqualTo(DISCOUNT_CURVES); assertThat(test.getForwardCurves()).isEqualTo(IBOR_CURVES); assertThat(test.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(test.findDiscountCurve(USD)).isEmpty(); assertThat(test.findForwardCurve(GBP_LIBOR_3M)).hasValue(IBOR_CURVE); assertThat(test.findForwardCurve(CHF_LIBOR_3M)).isEmpty(); } public void test_ofCurves() { CurveGroupDefinition definition = CurveGroupDefinition.builder() .name(CurveGroupName.of("group")) .addCurve(DISCOUNT_NAME, GBP, GBP_LIBOR_1M) .addForwardCurve(IBOR_NAME, USD_LIBOR_1M, USD_LIBOR_2M) .addForwardCurve(OVERNIGHT_NAME, EUR_EONIA) .build(); CurveGroup group = CurveGroup.ofCurves(definition, DISCOUNT_CURVE, OVERNIGHT_CURVE, IBOR_CURVE); assertThat(group.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_1M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_2M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(EUR_EONIA)).hasValue(OVERNIGHT_CURVE); } public void test_ofCurves_duplicateCurveName() { CurveGroupDefinition definition = CurveGroupDefinition.builder() .name(CurveGroupName.of("group")) .addForwardCurve(IBOR_NAME, USD_LIBOR_1M, USD_LIBOR_2M) .build(); CurveGroup group = CurveGroup.ofCurves(definition, IBOR_CURVE, IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_1M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_2M)).hasValue(IBOR_CURVE); } public void stream() { CurveGroup test = CurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); List<Curve> expected = ImmutableList.<Curve>builder() .addAll(DISCOUNT_CURVES.values()) .addAll(IBOR_CURVES.values()) .build(); assertThat(test.stream().collect(toList())).containsOnlyElementsOf(expected); } //------------------------------------------------------------------------- public void coverage() { CurveGroup test = CurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); coverImmutableBean(test); CurveGroup test2 = CurveGroup.of(NAME2, ImmutableMap.of(), ImmutableMap.of()); coverBeanEquals(test, test2); } public void test_serialization() { CurveGroup test = CurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); assertSerialization(test); } }