/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.marketdata.manipulator.dsl;
import static org.testng.AssertJUnit.assertEquals;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import org.testng.annotations.Test;
import com.opengamma.engine.function.FunctionParameters;
import com.opengamma.engine.function.SimpleFunctionParameters;
import com.opengamma.engine.function.StructureManipulationFunction;
import com.opengamma.engine.marketdata.manipulator.DistinctMarketDataSelector;
import com.opengamma.engine.marketdata.manipulator.ScenarioDefinition;
import com.opengamma.engine.marketdata.manipulator.function.StructureManipulator;
import com.opengamma.financial.currency.CurrencyPair;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
@Test(groups = TestGroup.UNIT)
public class SpotRateScriptTest {
@Test
public void scalingLimits() {
String script =
"scenario 'scalingLimits', {" +
" spotRate {" +
" currencyPair 'EURUSD'" +
" apply {" +
" scaling 2, 0.1, 1.2" +
" }" +
" }" +
"}";
Scenario scenario = SimulationUtils.createScenarioFromDsl(new StringReader(script), null);
ScenarioDefinition definition = scenario.createDefinition();
Map<DistinctMarketDataSelector, FunctionParameters> definitionMap = definition.getDefinitionMap();
assertEquals(1, definitionMap.size());
SimpleFunctionParameters functionParameters = (SimpleFunctionParameters) definitionMap.values().iterator().next();
CompositeStructureManipulator<?> compositeManipulator =
functionParameters.getValue(StructureManipulationFunction.EXPECTED_PARAMETER_NAME);
List<? extends StructureManipulator<?>> manipulators = compositeManipulator.getManipulators();
assertEquals(1, manipulators.size());
assertEquals(new SpotRateScaling(2d, 0.1, 1.2, CurrencyPair.of(Currency.EUR, Currency.USD)), manipulators.get(0));
}
@Test
public void shiftLimits() {
String script =
"scenario 'shiftLimits', {" +
" spotRate {" +
" currencyPair 'EURUSD'" +
" apply {" +
" shift Absolute, 2, 0.1, 1.2" +
" }" +
" }" +
"}";
Scenario scenario = SimulationUtils.createScenarioFromDsl(new StringReader(script), null);
ScenarioDefinition definition = scenario.createDefinition();
Map<DistinctMarketDataSelector, FunctionParameters> definitionMap = definition.getDefinitionMap();
assertEquals(1, definitionMap.size());
SimpleFunctionParameters functionParameters = (SimpleFunctionParameters) definitionMap.values().iterator().next();
CompositeStructureManipulator<?> compositeManipulator =
functionParameters.getValue(StructureManipulationFunction.EXPECTED_PARAMETER_NAME);
List<? extends StructureManipulator<?>> manipulators = compositeManipulator.getManipulators();
assertEquals(1, manipulators.size());
CurrencyPair eurUsd = CurrencyPair.of(Currency.EUR, Currency.USD);
SpotRateShift expected = new SpotRateShift(ScenarioShiftType.ABSOLUTE, 2d, 0.1, 1.2, eurUsd);
assertEquals(expected, manipulators.get(0));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void boundedShiftMultiplePairs() {
String script =
"scenario 'shiftLimits', {" +
" spotRate {" +
" currencyPairs 'EURUSD', 'GBPUSD'" +
" apply {" +
" shift Absolute, 2, 0.1, 1.2" +
" }" +
" }" +
"}";
SimulationUtils.createScenarioFromDsl(new StringReader(script), null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void boundedScalingMultiplePairs() {
String script =
"scenario 'shiftLimits', {" +
" spotRate {" +
" currencyPairs 'EURUSD', 'GBPUSD'" +
" apply {" +
" scaling 2, 0.1, 1.2" +
" }" +
" }" +
"}";
SimulationUtils.createScenarioFromDsl(new StringReader(script), null);
}
}