spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← All files
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});