name:
src/test/java/io/protobase/f7/formulas/FormulaCallerTest.java
-rw-r--r--
8685
1package io.protobase.f7.formulas;
2
3import io.protobase.f7.errors.DivException;
4import io.protobase.f7.errors.NAException;
5import io.protobase.f7.errors.NameException;
6import io.protobase.f7.models.GridColumnRowKey;
7import io.protobase.f7.testutils.TestFormula;
8import org.junit.Test;
9
10import java.util.function.BiFunction;
11import java.util.function.Function;
12
13import static com.google.common.truth.Truth.assertThat;
14
15public class FormulaCallerTest extends TestFormula {
16 private static final Function<Object, Object> PASS = value -> value;
17 private static final BiFunction<GridColumnRowKey, Object, Object> COLLATERAL_PASS = (origin, value) -> value;
18 private static final FormulaCaller CALLER = new FormulaCaller(PASS, COLLATERAL_PASS);
19 private static final String NULL = null;
20
21 @Test
22 public void testCall_formulaNotFound() {
23 assertThat(CALLER.call(null, FormulaName.UNKNOWN, 10.0, 10.0)).isEqualTo(new NameException());
24 }
25
26 @Test
27 public void testCall_info() {
28 assertThat(CALLER.call(null, FormulaName.ERRORTYPE, new DivException())).isEqualTo(2.0);
29 assertThat(CALLER.call(null, FormulaName.ISERR, new DivException())).isEqualTo(true);
30 assertThat(CALLER.call(null, FormulaName.ISERROR, new NAException())).isEqualTo(true);
31 assertThat(CALLER.call(null, FormulaName.ISNA, new NAException())).isEqualTo(true);
32 assertThat(CALLER.call(null, FormulaName.ISLOGICAL, 10.0)).isEqualTo(false);
33 assertThat(CALLER.call(null, FormulaName.ISNONTEXT, 10.0)).isEqualTo(true);
34 assertThat(CALLER.call(null, FormulaName.ISNUMBER, 10.0)).isEqualTo(true);
35 assertThat(CALLER.call(null, FormulaName.ISTEXT, 10.0)).isEqualTo(false);
36 assertThat(CALLER.call(null, FormulaName.ISBLANK, NULL)).isEqualTo(true);
37 }
38
39 @Test
40 public void testCall_logic() {
41 assertThat(CALLER.call(null, FormulaName.AND, true, true)).isEqualTo(true);
42 assertThat(CALLER.call(null, FormulaName.OR, false, true)).isEqualTo(true);
43 assertThat(CALLER.call(null, FormulaName.XOR, false, true)).isEqualTo(true);
44 assertThat(CALLER.call(null, FormulaName.NOT, false)).isEqualTo(true);
45 assertThat(CALLER.call(null, FormulaName.EQ, 10.0, 99.2)).isEqualTo(false);
46 assertThat(CALLER.call(null, FormulaName.EXACT, "One", "Two")).isEqualTo(false);
47 assertThat(CALLER.call(null, FormulaName.FALSE)).isEqualTo(false);
48 assertThat(CALLER.call(null, FormulaName.GTE, 10.0, 0.1)).isEqualTo(true);
49 assertThat(CALLER.call(null, FormulaName.GT, 10.0, 5.0)).isEqualTo(true);
50 assertThat(CALLER.call(null, FormulaName.LTE, 10.0, 2.22222)).isEqualTo(false);
51 assertThat(CALLER.call(null, FormulaName.LT, 1.0, 2.0)).isEqualTo(true);
52 assertThat(CALLER.call(null, FormulaName.NE, 10.0, 7.0)).isEqualTo(true);
53 assertThat(CALLER.call(null, FormulaName.TRUE)).isEqualTo(true);
54 assertThat(CALLER.call(null, FormulaName.IF, true, 10.0, -3872.1)).isEqualTo(10.0);
55 assertThat(CALLER.call(null, FormulaName.IFERROR, "Hello", 10.0)).isEqualTo("Hello");
56 assertThat(CALLER.call(null, FormulaName.IFNA, new NAException(), 10.0)).isEqualTo(10.0);
57 }
58
59 @Test
60 public void testCall_math() {
61 assertThat(CALLER.call(null, FormulaName.ABS, -2.0)).isEqualTo(2.0);
62 assertThat(CALLER.call(null, FormulaName.ADD, 2.0, 3.0)).isEqualTo(5.0);
63 assertThat(CALLER.call(null, FormulaName.DIVIDE, 10.0, 5.0)).isEqualTo(2.0);
64 assertThat(CALLER.call(null, FormulaName.QUOTIENT, 10.0, 6.0)).isEqualTo(1.0);
65 assertThat(CALLER.call(null, FormulaName.MINUS, 10.0, 2.0)).isEqualTo(8.0);
66 assertThat(CALLER.call(null, FormulaName.MULTIPLY, 10.0, 5.0)).isEqualTo(50.0);
67 assertThat(CALLER.call(null, FormulaName.ISODD, 9.0)).isEqualTo(true);
68 assertThat(CALLER.call(null, FormulaName.ISEVEN, 9.0)).isEqualTo(false);
69 assertThat(CALLER.call(null, FormulaName.PI)).isEqualTo(Math.PI);
70 assertThat(CALLER.call(null, FormulaName.POW, 2.0, 5.0)).isEqualTo(32.0);
71 assertThat(CALLER.call(null, FormulaName.POWER, 2.0, 5.0)).isEqualTo(32.0);
72 assertThat(CALLER.call(null, FormulaName.PRODUCT, 2.0, 5.0, 6.0)).isEqualTo(60.0);
73 assertThat(CALLER.call(null, FormulaName.RANDBETWEEN, 10.0, 100.0)).isNotEqualTo(new NameException());
74 assertThat(CALLER.call(null, FormulaName.RAND)).isNotEqualTo(new NameException());
75 assertThat(CALLER.call(null, FormulaName.ROUND, 18.19)).isEqualTo(18.0);
76 assertThat(CALLER.call(null, FormulaName.ROUNDUP, 18.19)).isEqualTo(19.0);
77 assertThat(CALLER.call(null, FormulaName.ROUNDDOWN, 18.999999)).isEqualTo(18.0);
78 assertThat(CALLER.call(null, FormulaName.SUM, 1.0, 2.0, 3.0)).isEqualTo(6.0);
79 assertThat(CALLER.call(null, FormulaName.ASIN, 1.0)).isEqualTo(Math.asin(1.0));
80 assertThat(CALLER.call(null, FormulaName.ASINH, 1.0)).isEqualTo(0.8813735870195429);
81 assertThat(CALLER.call(null, FormulaName.SIN, 1.0)).isEqualTo(Math.sin(1.0));
82 assertThat(CALLER.call(null, FormulaName.SINH, 1.0)).isEqualTo(Math.sinh(1.0));
83 assertThat(CALLER.call(null, FormulaName.ACOS, 1.1111)).isEqualTo(Math.acos(1.1111));
84 assertThat(CALLER.call(null, FormulaName.ACOSH, 1.1111)).isEqualTo(0.4671223659261196);
85 assertThat(CALLER.call(null, FormulaName.ACOT, 1.1111)).isEqualTo(0.732820074189669);
86 assertThat(CALLER.call(null, FormulaName.ACOTH, 1.1111)).isEqualTo(1.4722668604975144);
87 assertThat(CALLER.call(null, FormulaName.COS, 1.1111)).isEqualTo(Math.cos(1.1111));
88 assertThat(CALLER.call(null, FormulaName.COSH, 1.1111)).isEqualTo(Math.cosh(1.1111));
89 assertThat(CALLER.call(null, FormulaName.COT, 1.1111)).isEqualTo(1 / Math.tan(1.1111));
90 assertThat(CALLER.call(null, FormulaName.ATAN, 1.1111)).isEqualTo(Math.atan(1.1111));
91 assertThat(CALLER.call(null, FormulaName.ATANH, 0.489733)).isEqualTo(0.5357090350574656);
92 assertThat(CALLER.call(null, FormulaName.ATAN2, 4.0, 3.0)).isEqualTo(Math.atan2(4, 3));
93 assertThat(CALLER.call(null, FormulaName.TAN, 1.1111)).isEqualTo(Math.tan(1.1111));
94 assertThat(CALLER.call(null, FormulaName.TANH, 1.1111)).isEqualTo(Math.tanh(1.1111));
95 assertThat(CALLER.call(null, FormulaName.SQRT, 1.1111)).isEqualTo(Math.sqrt(1.1111));
96 assertThat(CALLER.call(null, FormulaName.SQRTPI, 4.0)).isEqualTo(3.5449077018110318);
97 assertThat(CALLER.call(null, FormulaName.UNARY_PERCENT, 22.0)).isEqualTo(0.22);
98 assertThat(CALLER.call(null, FormulaName.UMINUS, 22.0)).isEqualTo(-22.0);
99 assertThat(CALLER.call(null, FormulaName.LN, 128.0)).isEqualTo(Math.log(128.0));
100 assertThat(CALLER.call(null, FormulaName.LOG, 128.0, 2.0)).isEqualTo(7.0);
101 assertThat(CALLER.call(null, FormulaName.LOG10, 128.0)).isEqualTo(Math.log10(128.0));
102 assertThat(CALLER.call(null, FormulaName.MOD, 128.0, 44.0)).isEqualTo(40.0);
103 assertThat(CALLER.call(null, FormulaName.SIGN, 1.1)).isEqualTo(1.0);
104 assertThat(CALLER.call(null, FormulaName.INT, 15.1)).isEqualTo(15.0);
105 assertThat(CALLER.call(null, FormulaName.ODD, 2.0)).isEqualTo(3.0);
106 assertThat(CALLER.call(null, FormulaName.EVEN, 3.0)).isEqualTo(4.0);
107 }
108
109 @Test
110 public void testCall_statistical() {
111 assertThat(CALLER.call(null, FormulaName.AVEDEV, 1.0, 3.0, 5.0, 7.0, 11.0)).isEqualTo(2.88);
112 assertThat(CALLER.call(null, FormulaName.AVERAGE, 1.0, 3.0, 5.0, 7.0, 11.0)).isEqualTo(5.4);
113 assertThat(CALLER.call(null, FormulaName.AVERAGEA, 1.0, 3.0, 5.0, 7.0, 11.0)).isEqualTo(5.4);
114 assertThat(CALLER.call(null, FormulaName.COUNTA, "x")).isEqualTo(1.0);
115 assertThat(CALLER.call(null, FormulaName.COUNTBLANK, "x")).isEqualTo(0.0);
116 assertThat(CALLER.call(null, FormulaName.COUNT, "x")).isEqualTo(0.0);
117 assertThat(CALLER.call(null, FormulaName.MAX, 1.0, 2.0)).isEqualTo(2.0);
118 assertThat(CALLER.call(null, FormulaName.MAXA, 1.0, 2.0)).isEqualTo(2.0);
119 assertThat(CALLER.call(null, FormulaName.MIN, 1.0, 2.0)).isEqualTo(1.0);
120 assertThat(CALLER.call(null, FormulaName.MINA, 1.0, 2.0)).isEqualTo(1.0);
121 assertThat(CALLER.call(null, FormulaName.STDEV, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)).isEqualTo(2.449489742783178);
122 }
123
124 @Test
125 public void testCall_text() {
126 assertThat(CALLER.call(null, FormulaName.CONCAT, "x", "y")).isEqualTo("xy");
127 assertThat(CALLER.call(null, FormulaName.CONCATENATE, "x", "y")).isEqualTo("xy");
128 assertThat(CALLER.call(null, FormulaName.T, "x")).isEqualTo("x");
129 assertThat(CALLER.call(null, FormulaName.LEN, "x")).isEqualTo(1.0);
130 }
131
132 @Test
133 public void testCall_parser() {
134 assertThat(CALLER.call(null, FormulaName.TO_PERCENT, 10.11)).isEqualTo(10.11);
135 assertThat(CALLER.call(null, FormulaName.TO_TEXT, 10.11)).isEqualTo("10.11");
136 }
137
138 @Test
139 public void testCall_lookup() {
140 assertThat(CALLER.call(null, FormulaName.CHOOSE, 1.0, "A", "B")).isEqualTo("A");
141 }
142}