/**
* Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.calc.runner;
import static org.testng.Assert.assertEquals;
import java.util.Map;
import java.util.Set;
import org.testng.annotations.Test;
import com.opengamma.strata.basics.CalculationTarget;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.currency.Currency;
import com.opengamma.strata.calc.Measure;
import com.opengamma.strata.collect.result.Result;
import com.opengamma.strata.data.scenario.ScenarioMarketData;
@Test
public class CompositeCalculationFunctionsTest {
public void compose() {
Fn1 fn1a = new Fn1();
Fn1 fn1b = new Fn1();
Fn2 fn2 = new Fn2();
CalculationFunctions fns1 = CalculationFunctions.of(fn1a);
CalculationFunctions fns2 = CalculationFunctions.of(fn1b, fn2);
CalculationFunctions composed = fns1.composedWith(fns2);
assertEquals(composed.getFunction(new Target1()), fn1a);
assertEquals(composed.getFunction(new Target2()), fn2);
}
//-------------------------------------------------------------------------
private static final class Fn1 implements CalculationFunction<Target1> {
@Override
public Class<Target1> targetType() {
return Target1.class;
}
@Override
public Set<Measure> supportedMeasures() {
throw new UnsupportedOperationException("supportedMeasures not implemented");
}
@Override
public Currency naturalCurrency(Target1 target, ReferenceData refData) {
throw new UnsupportedOperationException("naturalCurrency not implemented");
}
@Override
public Map<Measure, Result<?>> calculate(
Target1 target,
Set<Measure> measures,
CalculationParameters parameters,
ScenarioMarketData marketData,
ReferenceData refData) {
throw new UnsupportedOperationException("calculate not implemented");
}
@Override
public FunctionRequirements requirements(
Target1 target,
Set<Measure> measures,
CalculationParameters parameters,
ReferenceData refData) {
throw new UnsupportedOperationException("requirements not implemented");
}
}
private static final class Fn2 implements CalculationFunction<Target2> {
@Override
public Class<Target2> targetType() {
return Target2.class;
}
@Override
public Set<Measure> supportedMeasures() {
throw new UnsupportedOperationException("supportedMeasures not implemented");
}
@Override
public Currency naturalCurrency(Target2 target, ReferenceData refData) {
throw new UnsupportedOperationException("naturalCurrency not implemented");
}
@Override
public FunctionRequirements requirements(
Target2 target,
Set<Measure> measures,
CalculationParameters parameters,
ReferenceData refData) {
throw new UnsupportedOperationException("requirements not implemented");
}
@Override
public Map<Measure, Result<?>> calculate(
Target2 target,
Set<Measure> measures,
CalculationParameters parameters,
ScenarioMarketData marketData,
ReferenceData refData) {
throw new UnsupportedOperationException("calculate not implemented");
}
}
private static final class Target1 implements CalculationTarget {
}
private static final class Target2 implements CalculationTarget {
}
}