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/CodeExecutorGeneralGreaterThanComparisonTest.ts
-rw-r--r--
7254
  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 - GT Comparison Test", function () {
 10  it("should work with numbers", function () {
 11    assert.deepEqual(run("1 > 1"), false);
 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"), false);
 17  });
 18
 19  it("should work with strings", function () {
 20    assert.deepEqual(run('"Yes" > "Yes"'), false);
 21    assert.deepEqual(run('"Yes" > "No"'), true);
 22    assert.deepEqual(run('"No"> "Yes"'), false);
 23    assert.deepEqual(run('"" > ""'), false);
 24    assert.deepEqual(run('" " > ""'), true);
 25  });
 26
 27  it("should work with booleans", function () {
 28    assert.deepEqual(run("TRUE > TRUE"), false);
 29    assert.deepEqual(run("FALSE > FALSE"), false);
 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}"), false);
 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!}"), false);
 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}"), false);
 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 strings to booleans", function () {
 69    assert.deepEqual(run('"TRUE" > TRUE'), false);
 70    assert.deepEqual(run('"FALSE" > FALSE'), false);
 71    assert.deepEqual(run('"TRUE" > TRUE'), false);
 72    assert.deepEqual(run('"" > TRUE'), false);
 73    assert.deepEqual(run('"" > FALSE'), false);
 74  });
 75
 76  it("should compare numbers to blanks", function () {
 77    const lookup = stub();
 78    const collateralLookup = stub();
 79    collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
 80    collateralLookup.withArgs(CommonModels.A1, 0).returns(0);
 81    collateralLookup.withArgs(CommonModels.A1, 1).returns(1);
 82    collateralLookup.withArgs(CommonModels.A1, -1).returns(-1);
 83    assert.deepEqual(runWithLookups("0 > M44", lookup, collateralLookup), false);
 84    assert.deepEqual(runWithLookups("1 > M44", lookup, collateralLookup), true);
 85    assert.deepEqual(runWithLookups("M44 > 0", lookup, collateralLookup), false);
 86    assert.deepEqual(runWithLookups("M44 > 1", lookup, collateralLookup), false);
 87    assert.deepEqual(runWithLookups("-1 > M44", lookup, collateralLookup), false);
 88    assert.deepEqual(runWithLookups("M44 > -1", lookup, collateralLookup), true);
 89    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
 90    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 0));
 91    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 1));
 92    assert.isTrue(collateralLookup.calledWith(CommonModels.A1, -1));
 93    assert.isTrue(lookup.notCalled);
 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), false);
104    assert.deepEqual(runWithLookups('M44 > ""', lookup, collateralLookup), false);
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), false);
124    assert.deepEqual(runWithLookups("M44 > TRUE", lookup, collateralLookup), false);
125    assert.deepEqual(runWithLookups("M44 > FALSE", lookup, collateralLookup), false);
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"'), false);
134    assert.deepEqual(run('{"A", "B"} > "B"'), false);
135    assert.deepEqual(run('"A" > {"A", "B"}'), false);
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"), false);
141    assert.deepEqual(run("TRUE > {TRUE, FALSE}"), false);
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});