name:
src/test/js/formulas/FormulaCallerTest.ts
-rw-r--r--
8143
1import { assert } from "chai";
2import { it, describe } from "../testutils/TestUtils";
3import { DivException } from "../../../main/js/errors/DivException";
4import { F7Exception } from "../../../main/js/errors/F7Exception";
5import { F7ExceptionName } from "../../../main/js/errors/F7ExceptionName";
6import { NAException } from "../../../main/js/errors/NAException";
7import { RefException } from "../../../main/js/errors/RefException";
8import { FormulaCaller } from "../../../main/js/formulas/FormulaCaller";
9import { FormulaName } from "../../../main/js/formulas/FormulaName";
10import { Converters } from "../../../main/js/utils/Converters";
11
12describe("FormulaCaller", function () {
13 const CALLER = new FormulaCaller(
14 (value) => value,
15 (origin, value) => value
16 );
17
18 it("should return NAME error if formula not found", function () {
19 assert.equal(
20 (CALLER.call(null, "nope" as FormulaName) as F7Exception).name,
21 F7ExceptionName.NAME
22 );
23 });
24
25 it("should run info formulas properly", function () {
26 assert.deepEqual(CALLER.call(null, FormulaName.ERRORTYPE, new DivException()), 2);
27 assert.deepEqual(CALLER.call(null, FormulaName.ISBLANK, null), true);
28 assert.deepEqual(CALLER.call(null, FormulaName.ISERR, 10), false);
29 assert.deepEqual(CALLER.call(null, FormulaName.ISERROR, new DivException()), true);
30 assert.deepEqual(CALLER.call(null, FormulaName.ISLOGICAL, false), true);
31 assert.deepEqual(CALLER.call(null, FormulaName.ISNA, new NAException()), true);
32 assert.deepEqual(CALLER.call(null, FormulaName.ISNONTEXT, 9), true);
33 assert.deepEqual(CALLER.call(null, FormulaName.ISNUMBER, 3), true);
34 assert.deepEqual(CALLER.call(null, FormulaName.ISTEXT, 3), false);
35 assert.deepEqual(CALLER.call(null, FormulaName.N, "Zero."), 0);
36 assert.deepEqual(
37 Converters.castAsF7Exception(CALLER.call(null, FormulaName.NA)).name,
38 F7ExceptionName.NA
39 );
40 assert.deepEqual(CALLER.call(null, FormulaName.TYPE, 10), 1);
41 });
42
43 it("should run logic formulas properly", function () {
44 assert.deepEqual(CALLER.call(null, FormulaName.AND, true, true), true);
45 assert.deepEqual(CALLER.call(null, FormulaName.EQ, 10, 99.2), false);
46 assert.deepEqual(CALLER.call(null, FormulaName.EXACT, "A", "A"), true);
47 assert.deepEqual(CALLER.call(null, FormulaName.FALSE), false);
48 assert.deepEqual(CALLER.call(null, FormulaName.GT, 10, 5), true);
49 assert.deepEqual(CALLER.call(null, FormulaName.GTE, 10, 0.1), true);
50 assert.deepEqual(CALLER.call(null, FormulaName.IF, true, 10, -3872), 10);
51 assert.deepEqual(CALLER.call(null, FormulaName.IFERROR, new DivException(), 10), 10);
52 assert.deepEqual(CALLER.call(null, FormulaName.IFNA, new NAException(), 10), 10);
53 assert.deepEqual(CALLER.call(null, FormulaName.LTE, 10, 2.22222), false);
54 assert.deepEqual(CALLER.call(null, FormulaName.LT, 1, 2), true);
55 assert.deepEqual(CALLER.call(null, FormulaName.NE, 10, 7), true);
56 assert.deepEqual(CALLER.call(null, FormulaName.NOT, true), false);
57 assert.deepEqual(CALLER.call(null, FormulaName.OR, true, false), true);
58 assert.deepEqual(CALLER.call(null, FormulaName.XOR, true, false), true);
59 assert.deepEqual(CALLER.call(null, FormulaName.TRUE), true);
60 });
61
62 it("should run math formulas properly", function () {
63 assert.deepEqual(CALLER.call(null, FormulaName.ABS, -2), 2);
64 assert.deepEqual(CALLER.call(null, FormulaName.ACOS, 0), Math.acos(0));
65 assert.deepEqual(CALLER.call(null, FormulaName.ACOSH, 10), 2.993222846126381);
66 assert.deepEqual(CALLER.call(null, FormulaName.ACOT, 10), 0.09966865249116204);
67 assert.deepEqual(CALLER.call(null, FormulaName.ACOTH, 10), 0.10033534773107562);
68 assert.deepEqual(CALLER.call(null, FormulaName.ASIN, 0.1), Math.asin(0.1));
69 assert.deepEqual(CALLER.call(null, FormulaName.ASINH, 10), 2.99822295029797);
70 assert.deepEqual(CALLER.call(null, FormulaName.ATAN, 10), Math.atan(10));
71 assert.deepEqual(CALLER.call(null, FormulaName.ATAN2, 10, 4), Math.atan2(10, 4));
72 assert.deepEqual(CALLER.call(null, FormulaName.ATANH, 0.489733), 0.5357090350574656);
73 assert.deepEqual(CALLER.call(null, FormulaName.COS, 0.489733), Math.cos(0.489733));
74 assert.deepEqual(CALLER.call(null, FormulaName.COSH, 0.489733), Math["cosh"](0.489733));
75 assert.deepEqual(CALLER.call(null, FormulaName.COT, 1), 0.6420926159343306);
76 assert.deepEqual(CALLER.call(null, FormulaName.ADD, 2, 3), 5);
77 assert.deepEqual(CALLER.call(null, FormulaName.DIVIDE, 10, 5), 2);
78 assert.deepEqual(CALLER.call(null, FormulaName.EVEN, 1.1), 2);
79 assert.deepEqual(CALLER.call(null, FormulaName.FLOOR, 1.1), 1);
80 assert.deepEqual(CALLER.call(null, FormulaName.INT, 1.1), 1);
81 assert.deepEqual(CALLER.call(null, FormulaName.ISEVEN, 2), true);
82 assert.deepEqual(CALLER.call(null, FormulaName.ISODD, 2), false);
83 assert.deepEqual(CALLER.call(null, FormulaName.LN, 2), 0.6931471805599453);
84 assert.deepEqual(CALLER.call(null, FormulaName.LOG, 10, 3), 2.095903274289385);
85 assert.deepEqual(CALLER.call(null, FormulaName.LOG10, 128), Math["log10"](128));
86 assert.deepEqual(CALLER.call(null, FormulaName.MINUS, 10, 2), 8);
87 assert.deepEqual(CALLER.call(null, FormulaName.MOD, 10, 3), 1);
88 assert.deepEqual(CALLER.call(null, FormulaName.MULTIPLY, 10, 5), 50);
89 assert.deepEqual(CALLER.call(null, FormulaName.ODD, 10), 11);
90 assert.deepEqual(CALLER.call(null, FormulaName.PI), Math.PI);
91 assert.deepEqual(CALLER.call(null, FormulaName.POW, 2, 5), 32);
92 assert.deepEqual(CALLER.call(null, FormulaName.POWER, 2, 5), 32);
93 assert.deepEqual(CALLER.call(null, FormulaName.PRODUCT, 2, 5, 2), 20);
94 assert.deepEqual(CALLER.call(null, FormulaName.QUOTIENT, 10, 3), 3);
95 assert.isNotNull(CALLER.call(null, FormulaName.RAND));
96 assert.isNotNull(CALLER.call(null, FormulaName.RANDBETWEEN, 1, 20));
97 assert.deepEqual(CALLER.call(null, FormulaName.ROUNDDOWN, 2.11), 2);
98 assert.deepEqual(CALLER.call(null, FormulaName.ROUNDUP, 2.11), 3);
99 assert.deepEqual(CALLER.call(null, FormulaName.ROUND, 2.11), 2);
100 assert.deepEqual(CALLER.call(null, FormulaName.SIGN, 100), 1);
101 assert.deepEqual(CALLER.call(null, FormulaName.SIN, 2), 0.9092974268256817);
102 assert.deepEqual(CALLER.call(null, FormulaName.SINH, 2), Math["sinh"](2));
103 assert.deepEqual(CALLER.call(null, FormulaName.SQRT, 2), Math.sqrt(2));
104 assert.deepEqual(CALLER.call(null, FormulaName.SQRTPI, 2), 2.5066282746310002);
105 assert.deepEqual(CALLER.call(null, FormulaName.TAN, 2), Math.tan(2));
106 assert.deepEqual(CALLER.call(null, FormulaName.TANH, 2), Math["tanh"](2));
107 assert.deepEqual(CALLER.call(null, FormulaName.UNARY_PERCENT, 22), 0.22);
108 assert.deepEqual(CALLER.call(null, FormulaName.UMINUS, 22), -22);
109 assert.deepEqual(CALLER.call(null, FormulaName.UPLUS, "22"), 22);
110 });
111
112 it("should run parser formulas properly", function () {
113 assert.deepEqual(CALLER.call(null, FormulaName.TO_TEXT, 2.111), "2.111");
114 assert.deepEqual(CALLER.call(null, FormulaName.TO_PERCENT, 2.111), 2.111);
115 });
116
117 it("should run engineering formulas properly", function () {
118 assert.deepEqual(CALLER.call(null, FormulaName.BIN2HEX, "1010101010"), "FFFFFFFEAA");
119 assert.deepEqual(CALLER.call(null, FormulaName.BIN2DEC, "1010101010"), -342);
120 assert.deepEqual(CALLER.call(null, FormulaName.DELTA, 10, 20), 0);
121 });
122
123 it("should run statistical formulas properly", function () {
124 assert.deepEqual(CALLER.call(null, FormulaName.AVERAGE, 1, 2, 3, 4), 2.5);
125 assert.deepEqual(CALLER.call(null, FormulaName.AVERAGEA, 1, 2, 3, 4), 2.5);
126 assert.deepEqual(CALLER.call(null, FormulaName.COUNT, 1, 2, 3, 4), 4);
127 assert.deepEqual(CALLER.call(null, FormulaName.COUNTA, 1, 2, new RefException(), 3), 3);
128 assert.deepEqual(CALLER.call(null, FormulaName.COUNTBLANK, 1, 2, 3), 0);
129 assert.deepEqual(CALLER.call(null, FormulaName.MIN, 1, 2, 3), 1);
130 assert.deepEqual(CALLER.call(null, FormulaName.MINA, 1, 2, 3), 1);
131 assert.deepEqual(CALLER.call(null, FormulaName.MAX, 1, 2, 3), 3);
132 assert.deepEqual(CALLER.call(null, FormulaName.MAXA, 1, 2, 3), 3);
133 });
134});