From 62c08453dc7386978913c9e8549fc507436620c5 Mon Sep 17 00:00:00 2001 From: Will Nicholson Date: Thu, 28 Feb 2019 13:17:09 +0000 Subject: [PATCH] Add MapStream method to NodalCurve, similar to CurrencyParameterSensitivity (#1898) * Add `values` stream to NodalCurve * Test --- .../opengamma/strata/market/curve/NodalCurve.java | 13 +++++++++++++ .../strata/market/curve/ConstantNodalCurveTest.java | 2 ++ .../market/curve/InflationNodalCurveTest.java | 3 +++ .../market/curve/InterpolatedNodalCurveTest.java | 2 ++ 4 files changed, 20 insertions(+) diff --git a/modules/market/src/main/java/com/opengamma/strata/market/curve/NodalCurve.java b/modules/market/src/main/java/com/opengamma/strata/market/curve/NodalCurve.java index ee20be682a..3f3bdb852a 100644 --- a/modules/market/src/main/java/com/opengamma/strata/market/curve/NodalCurve.java +++ b/modules/market/src/main/java/com/opengamma/strata/market/curve/NodalCurve.java @@ -5,6 +5,7 @@ */ package com.opengamma.strata.market.curve; +import com.opengamma.strata.collect.MapStream; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.market.param.ParameterMetadata; import com.opengamma.strata.market.param.ParameterPerturbation; @@ -91,6 +92,18 @@ public default ParameterMetadata getParameterMetadata(int parameterIndex) { */ public abstract NodalCurve withValues(DoubleArray xValues, DoubleArray yValues); + //------------------------------------------------------------------------- + /** + * Converts this instance to a stream of y-values, keyed by the x-values. + *

+ * This returns a {@link MapStream} keyed by the x-values. + * + * @return a map stream containing the x-values and the y-values + */ + public default MapStream values() { + return MapStream.zip(getXValues().stream().boxed(), getYValues().stream().boxed()); + } + //------------------------------------------------------------------------- @Override public abstract NodalCurve withParameter(int parameterIndex, double newValue); diff --git a/modules/market/src/test/java/com/opengamma/strata/market/curve/ConstantNodalCurveTest.java b/modules/market/src/test/java/com/opengamma/strata/market/curve/ConstantNodalCurveTest.java index 83a4cc60c0..7954f27155 100644 --- a/modules/market/src/test/java/com/opengamma/strata/market/curve/ConstantNodalCurveTest.java +++ b/modules/market/src/test/java/com/opengamma/strata/market/curve/ConstantNodalCurveTest.java @@ -14,6 +14,7 @@ import org.testng.annotations.Test; +import com.google.common.collect.ImmutableMap; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.market.ValueType; import com.opengamma.strata.market.param.ParameterMetadata; @@ -90,6 +91,7 @@ public void test_values() { assertThat(test.yValueParameterSensitivity(10.2421).getMarketDataName()).isEqualTo(CURVE_NAME); assertThat(test.yValueParameterSensitivity(10.2421).getSensitivity()).isEqualTo(DoubleArray.of(1d)); assertThat(test.firstDerivative(10.2421)).isEqualTo(0d); + assertThat(test.values().toMap()).isEqualTo(ImmutableMap.of(XVALUE, YVALUE)); } //------------------------------------------------------------------------- diff --git a/modules/market/src/test/java/com/opengamma/strata/market/curve/InflationNodalCurveTest.java b/modules/market/src/test/java/com/opengamma/strata/market/curve/InflationNodalCurveTest.java index daad253193..176715dc1f 100644 --- a/modules/market/src/test/java/com/opengamma/strata/market/curve/InflationNodalCurveTest.java +++ b/modules/market/src/test/java/com/opengamma/strata/market/curve/InflationNodalCurveTest.java @@ -9,6 +9,7 @@ import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static java.time.temporal.ChronoUnit.MONTHS; +import static org.assertj.core.api.Assertions.assertThat; import static org.testng.Assert.assertEquals; import java.time.LocalDate; @@ -17,6 +18,7 @@ import org.testng.annotations.Test; +import com.opengamma.strata.collect.MapStream; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.market.ShiftType; import com.opengamma.strata.market.curve.interpolator.CurveInterpolator; @@ -197,6 +199,7 @@ public void coverage() { .of(CURVE2_NOFIX, VAL_DATE_2, LAST_FIX_MONTH_2, LAST_FIX_VALUE + 1.0d, SEASONALITY_ADDITIVE_DEF); coverBeanEquals(test, test2); + assertThat(test.values().toMap()).isEqualTo(MapStream.zip(TIMES.stream().boxed(), VALUES.stream().boxed()).toMap()); } public void test_serialization() { diff --git a/modules/market/src/test/java/com/opengamma/strata/market/curve/InterpolatedNodalCurveTest.java b/modules/market/src/test/java/com/opengamma/strata/market/curve/InterpolatedNodalCurveTest.java index 542fb62ad4..bb8d5e6b70 100644 --- a/modules/market/src/test/java/com/opengamma/strata/market/curve/InterpolatedNodalCurveTest.java +++ b/modules/market/src/test/java/com/opengamma/strata/market/curve/InterpolatedNodalCurveTest.java @@ -18,6 +18,7 @@ import org.testng.annotations.Test; +import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.currency.Currency; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.market.ValueType; @@ -249,6 +250,7 @@ public void coverage() { .extrapolatorRight(CurveExtrapolators.LOG_LINEAR) .build(); coverBeanEquals(test, test2); + assertThat(test.values().toMap()).isEqualTo(ImmutableMap.of(1d, 5d, 2d, 7d, 3d, 8d)); } public void test_serialization() {