f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
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}