public virtual void test_ofRates_currency_source()
        {
            FxRateLookup test       = FxRateLookup.ofRates(EUR, OBS_SOURCE);
            MarketData   marketData = ImmutableMarketData.builder(VAL_DATE).addValue(FxRateId.of(GBP, USD, OBS_SOURCE), FxRate.of(GBP, USD, 1.5d)).build();

            assertEquals(test.fxRateProvider(marketData).fxRate(GBP, USD), 1.5d);
        }
        public virtual void test_ofMatrix_source()
        {
            FxRateLookup test       = FxRateLookup.ofMatrix(FxMatrixId.of(OBS_SOURCE));
            MarketData   marketData = ImmutableMarketData.builder(VAL_DATE).addValue(FxMatrixId.of(OBS_SOURCE), FxMatrix.of(GBP, USD, 1.5d)).build();

            assertEquals(test.fxRateProvider(marketData).fxRate(GBP, USD), 1.5d);
        }
        //-------------------------------------------------------------------------
        public virtual void coverage_rates()
        {
            FxRateLookup test = FxRateLookup.ofRates();

            coverImmutableBean((ImmutableBean)test);
            FxRateLookup test2 = FxRateLookup.ofRates(EUR);

            coverBeanEquals((ImmutableBean)test, (ImmutableBean)test2);
        }
        public virtual void coverage_matrix()
        {
            FxRateLookup test = FxRateLookup.ofMatrix();

            coverImmutableBean((ImmutableBean)test);
            FxRateLookup test2 = FxRateLookup.ofMatrix(FxMatrixId.of(OBS_SOURCE));

            coverBeanEquals((ImmutableBean)test, (ImmutableBean)test2);
        }
        public virtual void test_serialization()
        {
            FxRateLookup test1 = FxRateLookup.ofRates();

            assertSerialization((ImmutableBean)test1);
            FxRateLookup test2 = FxRateLookup.ofMatrix();

            assertSerialization((ImmutableBean)test2);
        }
        //-------------------------------------------------------------------------
        public virtual void test_of_map()
        {
            ImmutableMap <Currency, CurveId> discounts = ImmutableMap.of(USD, CURVE_ID_DSC);
            ImmutableMap <Index, CurveId>    forwards  = ImmutableMap.of(USD_LIBOR_3M, CURVE_ID_FWD);
            RatesMarketDataLookup            test      = RatesMarketDataLookup.of(discounts, forwards);

            assertEquals(test.queryType(), typeof(RatesMarketDataLookup));
            assertEquals(test.DiscountCurrencies, ImmutableSet.of(USD));
            assertEquals(test.getDiscountMarketDataIds(USD), ImmutableSet.of(CURVE_ID_DSC));
            assertEquals(test.ForwardIndices, ImmutableSet.of(USD_LIBOR_3M));
            assertEquals(test.getForwardMarketDataIds(USD_LIBOR_3M), ImmutableSet.of(CURVE_ID_FWD));
            assertThrowsIllegalArg(() => test.getDiscountMarketDataIds(GBP));
            assertThrowsIllegalArg(() => test.getForwardMarketDataIds(GBP_LIBOR_3M));
            assertEquals(test.ObservableSource, ObservableSource.NONE);
            assertEquals(test.FxRateLookup, FxRateLookup.ofRates());

            assertEquals(test.requirements(USD), FunctionRequirements.builder().valueRequirements(CURVE_ID_DSC).outputCurrencies(USD).build());
            assertEquals(test.requirements(USD, USD_LIBOR_3M), FunctionRequirements.builder().valueRequirements(CURVE_ID_DSC, CURVE_ID_FWD).timeSeriesRequirements(IndexQuoteId.of(USD_LIBOR_3M)).outputCurrencies(USD).build());
            assertEquals(test.requirements(ImmutableSet.of(USD), ImmutableSet.of(USD_LIBOR_3M)), FunctionRequirements.builder().valueRequirements(CURVE_ID_DSC, CURVE_ID_FWD).timeSeriesRequirements(IndexQuoteId.of(USD_LIBOR_3M)).outputCurrencies(USD).build());
            assertThrowsIllegalArg(() => test.requirements(ImmutableSet.of(USD), ImmutableSet.of(GBP_LIBOR_3M)));

            assertEquals(test.ratesProvider(MOCK_MARKET_DATA), DefaultLookupRatesProvider.of((DefaultRatesMarketDataLookup)test, MOCK_MARKET_DATA));
        }
        public virtual void test_jodaSerialization()
        {
            ImmutableMap <Currency, CurveId> discounts = ImmutableMap.of(USD, CURVE_ID_DSC);
            ImmutableMap <Index, CurveId>    forwards  = ImmutableMap.of(USD_LIBOR_3M, CURVE_ID_FWD);
            DefaultRatesMarketDataLookup     test      = DefaultRatesMarketDataLookup.of(discounts, forwards, ObservableSource.NONE, FxRateLookup.ofRates());
            string xml = JodaBeanSer.PRETTY.xmlWriter().write(test);

            assertEquals(xml.Contains("<entry key=\"USD-LIBOR-3M\">"), true);
            assertEquals(xml.Contains("<fixingDateOffset>"), false);
            assertEquals(xml.Contains("<effectiveDateOffset>"), false);
        }
        public virtual void test_serialization()
        {
            ImmutableMap <Currency, CurveId> discounts = ImmutableMap.of(USD, CURVE_ID_DSC);
            ImmutableMap <Index, CurveId>    forwards  = ImmutableMap.of(USD_LIBOR_3M, CURVE_ID_FWD);
            DefaultRatesMarketDataLookup     test      = DefaultRatesMarketDataLookup.of(discounts, forwards, ObservableSource.NONE, FxRateLookup.ofRates());

            assertSerialization(test);
            Curve curve = ConstantCurve.of(Curves.discountFactors("DSC", ACT_360), 0.99);
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: java.util.Map<? extends com.opengamma.strata.data.MarketDataId<?>, ?> valuesMap = com.google.common.collect.ImmutableMap.of(CURVE_ID_DSC, curve, CURVE_ID_FWD, curve);
            IDictionary <MarketDataId <object>, ?> valuesMap = ImmutableMap.of(CURVE_ID_DSC, curve, CURVE_ID_FWD, curve);
            MarketData md = MarketData.of(date(2016, 6, 30), valuesMap);

            assertSerialization(test.marketDataView(md));
            assertSerialization(test.ratesProvider(md));
        }
        //-------------------------------------------------------------------------
        public virtual void coverage()
        {
            ImmutableMap <Currency, CurveId> discounts = ImmutableMap.of(USD, CURVE_ID_DSC);
            ImmutableMap <Index, CurveId>    forwards  = ImmutableMap.of(USD_LIBOR_3M, CURVE_ID_FWD);
            DefaultRatesMarketDataLookup     test      = DefaultRatesMarketDataLookup.of(discounts, forwards, ObservableSource.NONE, FxRateLookup.ofRates());

            coverImmutableBean(test);

            ImmutableMap <Currency, CurveId> discounts2 = ImmutableMap.of(GBP, CURVE_ID_DSC);
            ImmutableMap <Index, CurveId>    forwards2  = ImmutableMap.of(GBP_LIBOR_3M, CURVE_ID_FWD);
            DefaultRatesMarketDataLookup     test2      = DefaultRatesMarketDataLookup.of(discounts2, forwards2, OBS_SOURCE, FxRateLookup.ofRates(EUR));

            coverBeanEquals(test, test2);

            // related coverage
            coverImmutableBean((ImmutableBean)test.marketDataView(MOCK_CALC_MARKET_DATA));
            DefaultRatesScenarioMarketData.meta();

            coverImmutableBean((ImmutableBean)test.marketDataView(MOCK_MARKET_DATA));
            DefaultRatesMarketData.meta();

            coverImmutableBean((ImmutableBean)test.marketDataView(MOCK_MARKET_DATA).ratesProvider());
            DefaultLookupRatesProvider.meta();
        }
 private LookupScenarioFxRateProvider(ScenarioMarketData marketData, FxRateLookup lookup)
 {
     this.marketData = ArgChecker.notNull(marketData, "marketData");
     this.lookup     = ArgChecker.notNull(lookup, "lookup");
 }
 // obtains an instance, returning the interface type to make type system happy at call site
 internal static ScenarioFxRateProvider of(ScenarioMarketData marketData, FxRateLookup lookup)
 {
     return(new LookupScenarioFxRateProvider(marketData, lookup));
 }
 //-------------------------------------------------------------------------
 /// <summary>
 /// Obtains an instance based on a map of discount and forward curve identifiers.
 /// <para>
 /// The discount and forward curves refer to the curve identifier.
 /// The curves themselves are provided in <seealso cref="ScenarioMarketData"/>
 /// using <seealso cref="CurveId"/> as the identifier.
 ///
 /// </para>
 /// </summary>
 /// <param name="discountCurveIds">  the discount curve identifiers, keyed by currency </param>
 /// <param name="forwardCurveIds">  the forward curves identifiers, keyed by index </param>
 /// <param name="obsSource">  the source of market data for FX, quotes and other observable market data </param>
 /// <param name="fxLookup">  the lookup used to obtain FX rates </param>
 /// <returns> the rates lookup containing the specified curves </returns>
 public static DefaultRatesMarketDataLookup of <T1>(IDictionary <Currency, CurveId> discountCurveIds, IDictionary <T1> forwardCurveIds, ObservableSource obsSource, FxRateLookup fxLookup) where T1 : com.opengamma.strata.basics.index.Index
 {
     return(new DefaultRatesMarketDataLookup(discountCurveIds, forwardCurveIds, obsSource, fxLookup));
 }