/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.surface; import static com.opengamma.strata.basics.date.DayCounts.ACT_360; import static com.opengamma.strata.basics.date.DayCounts.ACT_365F; 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 org.assertj.core.api.Assertions.assertThat; import java.util.Optional; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.market.ValueType; import com.opengamma.strata.market.param.ParameterMetadata; /** * Test {@link DefaultSurfaceMetadata}. */ @Test public class DefaultSurfaceMetadataTest { private static final String NAME = "TestSurface"; private static final SurfaceName SURFACE_NAME = SurfaceName.of(NAME); private static final SurfaceInfoType<String> DESCRIPTION = SurfaceInfoType.of("Description"); //------------------------------------------------------------------------- public void test_of_String_noMetadata() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(NAME); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getInfo()).isEqualTo(ImmutableMap.of()); assertThat(test.getParameterMetadata().isPresent()).isFalse(); } public void test_of_SurfaceName_noMetadata() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getInfo()).isEqualTo(ImmutableMap.of()); assertThat(test.getParameterMetadata().isPresent()).isFalse(); } public void test_builder1() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.builder() .surfaceName(SURFACE_NAME.toString()) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.DISCOUNT_FACTOR) .zValueType(ValueType.ZERO_RATE) .dayCount(ACT_365F) .addInfo(DESCRIPTION, "Hello") .parameterMetadata(ImmutableList.of(ParameterMetadata.empty())) .build(); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.YEAR_FRACTION); assertThat(test.getYValueType()).isEqualTo(ValueType.DISCOUNT_FACTOR); assertThat(test.getZValueType()).isEqualTo(ValueType.ZERO_RATE); assertThat(test.getInfo(SurfaceInfoType.DAY_COUNT)).isEqualTo(ACT_365F); assertThat(test.findInfo(SurfaceInfoType.DAY_COUNT)).isEqualTo(Optional.of(ACT_365F)); assertThat(test.getInfo(DESCRIPTION)).isEqualTo("Hello"); assertThat(test.findInfo(DESCRIPTION)).isEqualTo(Optional.of("Hello")); assertThat(test.findInfo(SurfaceInfoType.of("Rubbish"))).isEqualTo(Optional.empty()); assertThat(test.getParameterMetadata().isPresent()).isTrue(); assertThat(test.getParameterMetadata().get()).containsExactly(ParameterMetadata.empty()); } public void test_builder2() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.builder() .surfaceName(SURFACE_NAME) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.DISCOUNT_FACTOR) .zValueType(ValueType.ZERO_RATE) .dayCount(ACT_365F) .addInfo(SurfaceInfoType.DAY_COUNT, null) .addInfo(DESCRIPTION, "Hello") .parameterMetadata(ImmutableList.of(ParameterMetadata.empty())) .build(); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.YEAR_FRACTION); assertThat(test.getYValueType()).isEqualTo(ValueType.DISCOUNT_FACTOR); assertThat(test.getZValueType()).isEqualTo(ValueType.ZERO_RATE); assertThrowsIllegalArg(() -> test.getInfo(SurfaceInfoType.DAY_COUNT)); assertThat(test.findInfo(SurfaceInfoType.DAY_COUNT)).isEmpty(); assertThat(test.getInfo(DESCRIPTION)).isEqualTo("Hello"); assertThat(test.findInfo(DESCRIPTION)).isEqualTo(Optional.of("Hello")); assertThat(test.findInfo(SurfaceInfoType.of("Rubbish"))).isEqualTo(Optional.empty()); assertThat(test.getParameterMetadata().isPresent()).isTrue(); assertThat(test.getParameterMetadata().get()).containsExactly(ParameterMetadata.empty()); } public void test_builder3() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.builder() .surfaceName(SURFACE_NAME) .parameterMetadata(ImmutableList.of(ParameterMetadata.empty())) .clearParameterMetadata() .build(); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getParameterMetadata().isPresent()).isFalse(); } //------------------------------------------------------------------------- public void test_withInfo() { DefaultSurfaceMetadata base = DefaultSurfaceMetadata.of(SURFACE_NAME); assertThat(base.findInfo(SurfaceInfoType.DAY_COUNT).isPresent()).isFalse(); DefaultSurfaceMetadata test = base.withInfo(SurfaceInfoType.DAY_COUNT, ACT_360); assertThat(base.findInfo(SurfaceInfoType.DAY_COUNT).isPresent()).isFalse(); assertThat(test.findInfo(SurfaceInfoType.DAY_COUNT).isPresent()).isTrue(); } //------------------------------------------------------------------------- public void test_withParameterMetadata() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME) .withParameterMetadata(ImmutableList.of(ParameterMetadata.empty())); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getParameterMetadata().isPresent()).isTrue(); assertThat(test.getParameterMetadata().get()).containsExactly(ParameterMetadata.empty()); } public void test_withParameterMetadata_clearWhenEmpty() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME).withParameterMetadata(null); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getParameterMetadata().isPresent()).isFalse(); } public void test_withParameterMetadata_clearWhenNonEmpty() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME) .withParameterMetadata(ImmutableList.of(ParameterMetadata.empty())) .withParameterMetadata(null); assertThat(test.getSurfaceName()).isEqualTo(SURFACE_NAME); assertThat(test.getXValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getYValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getZValueType()).isEqualTo(ValueType.UNKNOWN); assertThat(test.getParameterMetadata().isPresent()).isFalse(); } //------------------------------------------------------------------------- public void coverage() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME); coverImmutableBean(test); DefaultSurfaceMetadata test2 = DefaultSurfaceMetadata.builder() .surfaceName(SurfaceName.of("Test")) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.DISCOUNT_FACTOR) .zValueType(ValueType.ZERO_RATE) .dayCount(ACT_365F) .parameterMetadata(ParameterMetadata.empty()) .build(); coverBeanEquals(test, test2); } public void test_serialization() { DefaultSurfaceMetadata test = DefaultSurfaceMetadata.of(SURFACE_NAME); assertSerialization(test); } }