//-------------------------------------------------------------------------
        public virtual void test_of()
        {
            DiscountFxForwardRates test = DiscountFxForwardRates.of(CURRENCY_PAIR, FX_RATE, DFCURVE_GBP, DFCURVE_USD);

            assertEquals(test.CurrencyPair, CURRENCY_PAIR);
            assertEquals(test.ValuationDate, DATE_VAL);
            assertEquals(test.BaseCurrencyDiscountFactors, DFCURVE_GBP);
            assertEquals(test.CounterCurrencyDiscountFactors, DFCURVE_USD);
            assertEquals(test.FxRateProvider, FX_RATE);
            assertEquals(test.findData(CURVE1.Name), CURVE1);
            assertEquals(test.findData(CURVE2.Name), CURVE2);
            assertEquals(test.findData(CurveName.of("Rubbish")), null);

            int baseSize = DFCURVE_USD.ParameterCount;

            assertEquals(test.ParameterCount, DFCURVE_GBP.ParameterCount + baseSize);
            assertEquals(test.getParameter(0), DFCURVE_GBP.getParameter(0));
            assertEquals(test.getParameter(baseSize), DFCURVE_USD.getParameter(0));
            assertEquals(test.getParameterMetadata(0), DFCURVE_GBP.getParameterMetadata(0));
            assertEquals(test.getParameterMetadata(baseSize), DFCURVE_USD.getParameterMetadata(0));
            assertEquals(test.withParameter(0, 1d).BaseCurrencyDiscountFactors, DFCURVE_GBP.withParameter(0, 1d));
            assertEquals(test.withParameter(0, 1d).CounterCurrencyDiscountFactors, DFCURVE_USD);
            assertEquals(test.withParameter(baseSize, 1d).BaseCurrencyDiscountFactors, DFCURVE_GBP);
            assertEquals(test.withParameter(baseSize, 1d).CounterCurrencyDiscountFactors, DFCURVE_USD.withParameter(0, 1d));
            assertEquals(test.withPerturbation((i, v, m) => v + 1d).BaseCurrencyDiscountFactors, DFCURVE_GBP.withPerturbation((i, v, m) => v + 1d));
            assertEquals(test.withPerturbation((i, v, m) => v + 1d).CounterCurrencyDiscountFactors, DFCURVE_USD.withPerturbation((i, v, m) => v + 1d));
        }