name:
tests/Formulas/LogicalTest.ts
-rw-r--r--
4374
1import {
2 AND,
3 EXACT,
4 TRUE,
5 FALSE,
6 NOT,
7 OR,
8 XOR
9} from "../../src/Formulas/Logical";
10import * as ERRORS from "../../src/Errors";
11import {
12 assertEquals,
13 catchAndAssertEquals,
14 test
15} from "../Utils/Asserts";
16
17
18test("AND", function(){
19 assertEquals(AND(10), true);
20 assertEquals(AND(10, 10), true);
21 assertEquals(AND(10, 0), false);
22 assertEquals(AND(10, false), false);
23 assertEquals(AND(0, 0), false);
24 catchAndAssertEquals(function() {
25 AND(1, "");
26 }, ERRORS.VALUE_ERROR);
27 catchAndAssertEquals(function() {
28 AND.apply(this, []);
29 }, ERRORS.NA_ERROR);
30 catchAndAssertEquals(function() {
31 AND(1, "str");
32 }, ERRORS.VALUE_ERROR);
33 assertEquals(AND(0, [1, 1]), false);
34 assertEquals(AND(1, [1, 1]), true);
35 catchAndAssertEquals(function() {
36 AND(1, [1, "str"]);
37 }, ERRORS.VALUE_ERROR);
38});
39
40
41test("EXACT", function(){
42 assertEquals(EXACT("m", "M"), false);
43 assertEquals(EXACT("m", "m"), true);
44 assertEquals(EXACT("m", false), false);
45 assertEquals(EXACT(false, false), true);
46 assertEquals(EXACT(10, 10), true);
47 assertEquals(EXACT(10, "10"), true);
48 assertEquals(EXACT(10, "str"), false);
49 assertEquals(EXACT([10], [10]), true);
50 assertEquals(EXACT(["str"], [10, 22]), false);
51 catchAndAssertEquals(function() {
52 EXACT.apply(this, [[], []]);
53 }, ERRORS.REF_ERROR);
54 catchAndAssertEquals(function() {
55 EXACT.apply(this, [[]]);
56 }, ERRORS.NA_ERROR);
57 catchAndAssertEquals(function() {
58 EXACT.apply(this, ["m"]);
59 }, ERRORS.NA_ERROR);
60 catchAndAssertEquals(function() {
61 EXACT.apply(this, [10, 10, 10]);
62 }, ERRORS.NA_ERROR);
63 catchAndAssertEquals(function() {
64 EXACT.apply(this, [false]);
65 }, ERRORS.NA_ERROR);
66});
67
68
69test("TRUE", function(){
70 assertEquals(TRUE(), true);
71 catchAndAssertEquals(function() {
72 TRUE.apply(this, [0]);
73 }, ERRORS.NA_ERROR);
74});
75
76
77test("FALSE", function(){
78 assertEquals(FALSE(), false);
79 catchAndAssertEquals(function() {
80 FALSE.apply(this, [0]);
81 }, ERRORS.NA_ERROR);
82});
83
84
85test("NOT", function(){
86 assertEquals(NOT(TRUE()), false);
87 assertEquals(NOT(""), true);
88 catchAndAssertEquals(function() {
89 NOT(" ");
90 }, ERRORS.VALUE_ERROR);
91 assertEquals(NOT(100), false);
92 assertEquals(NOT(0), true);
93 assertEquals(NOT(-1), false);
94 assertEquals(NOT(1), false);
95 catchAndAssertEquals(function() {
96 NOT("0");
97 }, ERRORS.VALUE_ERROR);
98 catchAndAssertEquals(function() {
99 NOT([]);
100 }, ERRORS.REF_ERROR);
101 assertEquals(NOT([10]), false);
102 assertEquals(NOT([0, 0]), true);
103 assertEquals(NOT([0, false]), true);
104 assertEquals(NOT([false, 0]), true);
105 assertEquals(NOT([10, "str"]), false);
106 catchAndAssertEquals(function() {
107 NOT("str");
108 }, ERRORS.VALUE_ERROR);
109 assertEquals(NOT([""]), true);
110 assertEquals(NOT([0]), true);
111 assertEquals(NOT([1]), false);
112 assertEquals(NOT([0, 1]), true);
113 catchAndAssertEquals(function() {
114 NOT("1.2");
115 }, ERRORS.VALUE_ERROR);
116 catchAndAssertEquals(function() {
117 NOT.apply(this, []);
118 }, ERRORS.NA_ERROR);
119 catchAndAssertEquals(function() {
120 NOT.apply(this, [false, false]);
121 }, ERRORS.NA_ERROR);
122});
123
124
125test("OR", function(){
126 assertEquals(OR(true, false), true);
127 assertEquals(OR(false, false), false);
128 assertEquals(OR(1, 0), true);
129 assertEquals(OR([1, 0]), true);
130 assertEquals(OR(false, 0, -10), true);
131 assertEquals(OR([false, 0, -10]), true);
132 assertEquals(OR([false, 0, [-10]]), true);
133 catchAndAssertEquals(function() {
134 OR([false, 0, []]);
135 }, ERRORS.REF_ERROR);
136 catchAndAssertEquals(function() {
137 OR(false, "d");
138 }, ERRORS.VALUE_ERROR);
139 catchAndAssertEquals(function() {
140 OR(false, "10");
141 }, ERRORS.VALUE_ERROR);
142 catchAndAssertEquals(function() {
143 OR(false, "1.1");
144 }, ERRORS.VALUE_ERROR);
145 catchAndAssertEquals(function() {
146 OR.apply(this, []);
147 }, ERRORS.NA_ERROR);
148});
149
150
151test("XOR", function(){
152 assertEquals(XOR(1, 1), false);
153 assertEquals(XOR(1, 0), true);
154 assertEquals(XOR(0, 0, 0), false);
155 assertEquals(XOR(0, 0, 1), true);
156 assertEquals(XOR(0, 0, [0, 0, 1]), true);
157 assertEquals(XOR(0, 1, [0, 0, 1]), false);
158 catchAndAssertEquals(function() {
159 XOR("str");
160 }, ERRORS.VALUE_ERROR);
161 catchAndAssertEquals(function() {
162 XOR();
163 }, ERRORS.NA_ERROR);
164 catchAndAssertEquals(function() {
165 XOR(1, []);
166 }, ERRORS.REF_ERROR);
167 catchAndAssertEquals(function() {
168 XOR([]);
169 }, ERRORS.REF_ERROR);
170});