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/js/execution/CodeExecutorGeneralGreaterThanOrEqualToComparisonTest.ts
-rw-r--r--
7304
  1import { assert } from "chai";
  2import { it, describe } from "../testutils/TestUtils";
  3import { stub } from "sinon";
  4import { F7Exception } from "../../../main/js/errors/F7Exception";
  5import { F7ExceptionName } from "../../../main/js/errors/F7ExceptionName";
  6import { CommonModels } from "../testutils/CommonModels";
  7import { run, runWithLookups } from "../testutils/TestUtils";
  8
  9describe("CodeExecutor - GTE Comparison Test", function () {
 10  it("should work with numbers", function () {
 11    assert.deepEqual(run("1 >= 1"), true);
 12    assert.deepEqual(run("1 >= 2"), false);
 13    assert.deepEqual(run("2 >= 1"), true);
 14    assert.deepEqual(run("-10 >= 0"), false);
 15    assert.deepEqual(run("0 >= -10"), true);
 16    assert.deepEqual(run("1.1928731 >= 1.1928731"), true);
 17  });
 18
 19  it("should work with strings", function () {
 20    assert.deepEqual(run('"Yes" >= "Yes"'), true);
 21    assert.deepEqual(run('"Yes" >= "No"'), true);
 22    assert.deepEqual(run('"No">= "Yes"'), false);
 23    assert.deepEqual(run('"" >= ""'), true);
 24    assert.deepEqual(run('" " >= ""'), true);
 25  });
 26
 27  it("should work with booleans", function () {
 28    assert.deepEqual(run("TRUE >= TRUE"), true);
 29    assert.deepEqual(run("FALSE >= FALSE"), true);
 30    assert.deepEqual(run("TRUE >= FALSE"), true);
 31    assert.deepEqual(run("FALSE >= TRUE"), false);
 32  });
 33
 34  it("should work with arrays", function () {
 35    assert.deepEqual(run("{1, 2, 3} >= {1, 2, 3}"), true);
 36    assert.deepEqual(run("{1, 2, 3} >= {44}"), false);
 37    assert.deepEqual(run("{44, 2, 3} >= {1}"), true);
 38    assert.deepEqual(run("{44, #REF!} >= {44, #REF!}"), true);
 39  });
 40
 41  it("should compare numbers to booleans", function () {
 42    assert.deepEqual(run("0 >= TRUE"), false);
 43    assert.deepEqual(run("1 >= TRUE"), false);
 44    assert.deepEqual(run("1 >= FALSE"), false);
 45    assert.deepEqual(run("0 >= FALSE"), false);
 46    assert.deepEqual(run("-1 >= TRUE"), false);
 47    assert.deepEqual(run("-1 >= FALSE"), false);
 48  });
 49
 50  it("should compare numbers to strings", function () {
 51    assert.deepEqual(run('0 >= ""'), false);
 52    assert.deepEqual(run('0 >= "0"'), false);
 53    assert.deepEqual(run('1 >= "0"'), false);
 54    assert.deepEqual(run('1 >= "1"'), false);
 55    assert.deepEqual(run('-1 >= "1"'), false);
 56    assert.deepEqual(run('1000 >= "-100"'), false);
 57    assert.deepEqual(run('1000 >= "Anything in the world."'), false);
 58  });
 59
 60  it("should compare numbers to array literals", function () {
 61    assert.deepEqual(run("-1 >= {0, 1, 2}"), false);
 62    assert.deepEqual(run("0 >= {0, 1, 2}"), true);
 63    assert.deepEqual(run("1 >= {0, 1, 2}"), true);
 64    assert.deepEqual(run("0 >= {1, 1, 2}"), false);
 65    assert.deepEqual(run('0 >= {1, "Ignore me."}'), false);
 66  });
 67
 68  it("should compare numbers to blanks", function () {
 69    const lookup = stub();
 70    const collateralLookup = stub();
 71    collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
 72    collateralLookup.withArgs(CommonModels.A1, 0).returns(0);
 73    collateralLookup.withArgs(CommonModels.A1, 1).returns(1);
 74    collateralLookup.withArgs(CommonModels.A1, -1).returns(-1);
 75    assert.deepEqual(runWithLookups("0 >= M44", lookup, collateralLookup), true);
 76    assert.deepEqual(runWithLookups("1 >= M44", lookup, collateralLookup), true);
 77    assert.deepEqual(runWithLookups("M44 >= 0", lookup, collateralLookup), true);
 78    assert.deepEqual(runWithLookups("M44 >= 1", lookup, collateralLookup), false);
 79    assert.deepEqual(runWithLookups("-1 >= M44", lookup, collateralLookup), false);
 80    assert.deepEqual(runWithLookups("M44 >= -1", lookup, collateralLookup), true);
 81    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
 82    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 0));
 83    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 1));
 84    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, -1));
 85    assert.isTrue(lookup.notCalled);
 86  });
 87
 88  it("should compare strings to booleans", function () {
 89    assert.deepEqual(run('"TRUE" >= TRUE'), false);
 90    assert.deepEqual(run('"FALSE" >= FALSE'), false);
 91    assert.deepEqual(run('"TRUE" >= TRUE'), false);
 92    assert.deepEqual(run('"" >= TRUE'), false);
 93    assert.deepEqual(run('"" >= FALSE'), false);
 94  });
 95
 96  it("should compare strings to blanks", function () {
 97    const lookup = stub();
 98    const collateralLookup = stub();
 99    collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
100    collateralLookup.withArgs(CommonModels.A1, "").returns("");
101    collateralLookup.withArgs(CommonModels.A1, "One").returns("One");
102    collateralLookup.withArgs(CommonModels.A1, " ").returns(" ");
103    assert.deepEqual(runWithLookups('"" >= M44', lookup, collateralLookup), true);
104    assert.deepEqual(runWithLookups('M44 >= ""', lookup, collateralLookup), true);
105    assert.deepEqual(runWithLookups('" " >= M44', lookup, collateralLookup), true);
106    assert.deepEqual(runWithLookups('M44 >= " "', lookup, collateralLookup), false);
107    assert.deepEqual(runWithLookups('"One" >= M44', lookup, collateralLookup), true);
108    assert.deepEqual(runWithLookups('M44 >= "One"', lookup, collateralLookup), false);
109    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
110    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, ""));
111    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, "One"));
112    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, " "));
113    assert.isTrue(lookup.notCalled);
114  });
115
116  it("should compare booleans to blanks", function () {
117    const lookup = stub();
118    const collateralLookup = stub();
119    collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
120    collateralLookup.withArgs(CommonModels.A1, true).returns(true);
121    collateralLookup.withArgs(CommonModels.A1, false).returns(false);
122    assert.deepEqual(runWithLookups("TRUE >= M44", lookup, collateralLookup), true);
123    assert.deepEqual(runWithLookups("FALSE >= M44", lookup, collateralLookup), true);
124    assert.deepEqual(runWithLookups("M44 >= TRUE", lookup, collateralLookup), false);
125    assert.deepEqual(runWithLookups("M44 >= FALSE", lookup, collateralLookup), true);
126    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
127    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, true));
128    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, false));
129    assert.isTrue(lookup.notCalled);
130  });
131
132  it("should compare array literals to strings", function () {
133    assert.deepEqual(run('{"A", "B"} >= "A"'), true);
134    assert.deepEqual(run('{"A", "B"} >= "B"'), false);
135    assert.deepEqual(run('"A" >= {"A", "B"}'), true);
136    assert.deepEqual(run('"B" >= {"A", "B"}'), true);
137  });
138
139  it("should compare array literals to booleans", function () {
140    assert.deepEqual(run("{TRUE, FALSE} >= TRUE"), true);
141    assert.deepEqual(run("TRUE >= {TRUE, FALSE}"), true);
142    assert.deepEqual(run("{FALSE, FALSE} >= TRUE"), false);
143    assert.deepEqual(run("TRUE >= {FALSE, FALSE}"), true);
144  });
145
146  it("should not compare errors", function () {
147    assert.deepEqual((run("TRUE >= #REF!") as F7Exception).name, F7ExceptionName.REF);
148    assert.deepEqual((run("#REF! >= TRUE") as F7Exception).name, F7ExceptionName.REF);
149  });
150});