@Test(expectedExceptions = IllegalArgumentException.class)
  public void wrongLengthTest() {
    final int nSamples = 10;
    final List<DoublesPair> points = new ArrayList<>(nSamples);
    final DoubleMatrix1D x = new DoubleMatrix1D(nSamples + 1);
    x.getData()[0] = RANDOM.nextDouble();
    for (int i = 0; i < nSamples; i++) {
      final double t = RANDOM.nextDouble() * 20.0;
      final double k = RANDOM.nextDouble() * 0.15;
      points.add(DoublesPair.of(t, k));
      x.getData()[i + 1] = RANDOM.nextDouble();
    }

    final DiscreteVolatilityFunctionProvider pro = new DiscreteVolatilityFunctionProviderDirect();
    final DiscreteVolatilityFunction func = pro.from(points);
    func.evaluate(x);
  }
  @Test
  public void test() {
    final int nSamples = 10;
    final List<DoublesPair> points = new ArrayList<>(nSamples);
    final DoubleMatrix1D x = new DoubleMatrix1D(nSamples);
    for (int i = 0; i < nSamples; i++) {
      final double t = RANDOM.nextDouble() * 20.0;
      final double k = RANDOM.nextDouble() * 0.15;
      points.add(DoublesPair.of(t, k));
      x.getData()[i] = RANDOM.nextDouble();
    }

    final DiscreteVolatilityFunctionProvider pro = new DiscreteVolatilityFunctionProviderDirect();
    final DiscreteVolatilityFunction func = pro.from(points);
    final DoubleMatrix1D y = func.evaluate(x);
    AssertMatrix.assertEqualsVectors(x, y, 0.0);
    final DoubleMatrix2D jac = func.calculateJacobian(x);
    AssertMatrix.assertEqualsMatrix(new IdentityMatrix(nSamples), jac, 0.0);

    assertEquals(nSamples, func.getLengthOfDomain());
    assertEquals(nSamples, func.getLengthOfRange());
  }