aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java/com/yahoo/tensor/functions/ScalarFunctionsTestCase.java
blob: b06d98c531ed9bd5adfa105458f26e49fb940fec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

package com.yahoo.tensor.functions;

import java.util.function.DoubleUnaryOperator;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ScalarFunctionsTestCase {

    void expect_oddf(DoubleUnaryOperator foo, double input, double output) {
        double res = foo.applyAsDouble(input);
        assertEquals("apply("+foo+","+input+") -> ", output, res, 0.000000001);
        input *= -1;
        output *= -1;
        res = foo.applyAsDouble(input);
        assertEquals("apply("+foo+","+input+") -> "+res, output, res, 0.000000001);
    }

    @Test
    public void testErrorFunction() {
        var func = ScalarFunctions.erf();
        // from wikipedia:
        expect_oddf(func, 0.0, 0.0);
        expect_oddf(func, 0.02, 0.022564575);
        expect_oddf(func, 0.04, 0.045111106);
        expect_oddf(func, 0.06, 0.067621594);
        expect_oddf(func, 0.08, 0.090078126);
        expect_oddf(func, 0.1, 0.112462916);
        expect_oddf(func, 0.2, 0.222702589);
        expect_oddf(func, 0.3, 0.328626759);
        expect_oddf(func, 0.4, 0.428392355);
        expect_oddf(func, 0.5, 0.520499878);
        expect_oddf(func, 0.6, 0.603856091);
        expect_oddf(func, 0.7, 0.677801194);
        expect_oddf(func, 0.8, 0.742100965);
        expect_oddf(func, 0.9, 0.796908212);
        expect_oddf(func, 1.0, 0.842700793);
        expect_oddf(func, 1.1, 0.88020507);
        expect_oddf(func, 1.2, 0.910313978);
        expect_oddf(func, 1.3, 0.934007945);
        expect_oddf(func, 1.4, 0.95228512);
        expect_oddf(func, 1.5, 0.966105146);
        expect_oddf(func, 1.6, 0.976348383);
        expect_oddf(func, 1.7, 0.983790459);
        expect_oddf(func, 1.8, 0.989090502);
        expect_oddf(func, 1.9, 0.992790429);
        expect_oddf(func, 2.0, 0.995322265);
        expect_oddf(func, 2.1, 0.997020533);
        expect_oddf(func, 2.2, 0.998137154);
        expect_oddf(func, 2.3, 0.998856823);
        expect_oddf(func, 2.4, 0.999311486);
        expect_oddf(func, 2.5, 0.999593048);
        expect_oddf(func, 3.0, 0.99997791);
        expect_oddf(func, 3.5, 0.999999257);
        // from MPFR:
        expect_oddf(func, 4.0, 0.99999998458);
        expect_oddf(func, 4.2412109375, 0.9999999980);
        expect_oddf(func, 4.2734375,    0.99999999849);
        expect_oddf(func, 4.3203125,    0.9999999990);
        expect_oddf(func, 5.0, 0.999999999998);
        expect_oddf(func, 5.921875,  1.0);
    }

}