//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void derivatives()
        public virtual void derivatives()
        {   // AD v Finite Difference
            ScalarFieldFirstOrderDifferentiator differentiator = new ScalarFieldFirstOrderDifferentiator(FiniteDifferenceType.CENTRAL, 1.0E-5);

            for (int i = 0; i < N; i++)
            {
                System.Func <DoubleArray, double> function = (DoubleArray x) =>
                {
                    SsviFormulaData data = SsviFormulaData.of(x.get(3), x.get(4), x.get(5));
                    return(SSVI_FUNCTION.volatility(x.get(0), x.get(1), x.get(2), data));
                };
                System.Func <DoubleArray, DoubleArray> d = differentiator.differentiate(function);
                DoubleArray      fd = d(DoubleArray.of(FORWARD, STRIKES[i], TIME_EXP, VOL_ATM, RHO, ETA));
                ValueDerivatives ad = SSVI_FUNCTION.volatilityAdjoint(FORWARD, STRIKES[i], TIME_EXP, DATA);
                for (int j = 0; j < 6; j++)
                {
                    assertEquals(fd.get(j), ad.Derivatives.get(j), TOLERANCE_AD);
                }
            }
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testSin()
        public virtual void testSin()
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.opengamma.strata.collect.array.DoubleArray parms = com.opengamma.strata.collect.array.DoubleArray.of(-1.0, 0.5);
            DoubleArray parms = DoubleArray.of(-1.0, 0.5);

            assertEquals(-Math.Sin(1.0), VECTOR_PARAMS.evaluate(2.0, parms), 0.0);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.function.Function<double, double> func = VECTOR_PARAMS.asFunctionOfArguments(parms);
            System.Func <double, double> func = VECTOR_PARAMS.asFunctionOfArguments(parms);
            assertEquals(1.0, func(-Math.PI), 0.0);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.opengamma.strata.math.impl.differentiation.ScalarFirstOrderDifferentiator diff = new com.opengamma.strata.math.impl.differentiation.ScalarFirstOrderDifferentiator();
            ScalarFirstOrderDifferentiator diff = new ScalarFirstOrderDifferentiator();

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.function.Function<double, double> grad = diff.differentiate(func);
            System.Func <double, double> grad = diff.differentiate(func);
            assertEquals(-0.5, grad(0.0), 1e-8);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.function.Function<com.opengamma.strata.collect.array.DoubleArray, double> params_func = VECTOR_PARAMS.asFunctionOfParameters(1.0);
            System.Func <DoubleArray, double> params_func = VECTOR_PARAMS.asFunctionOfParameters(1.0);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.opengamma.strata.math.impl.differentiation.ScalarFieldFirstOrderDifferentiator vdiff = new com.opengamma.strata.math.impl.differentiation.ScalarFieldFirstOrderDifferentiator();
            ScalarFieldFirstOrderDifferentiator vdiff = new ScalarFieldFirstOrderDifferentiator();

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.function.Function<com.opengamma.strata.collect.array.DoubleArray, com.opengamma.strata.collect.array.DoubleArray> vgrad = vdiff.differentiate(params_func);
            System.Func <DoubleArray, DoubleArray> vgrad = vdiff.differentiate(params_func);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.opengamma.strata.collect.array.DoubleArray res = vgrad.apply(com.opengamma.strata.collect.array.DoubleArray.of(Math.PI, 0));
            DoubleArray res = vgrad(DoubleArray.of(Math.PI, 0));

            assertEquals(0.0, res.get(0), 1e-8);
            assertEquals(Math.PI, res.get(1), 1e-8);
        }