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/CodeExecutorGeneralArrayLiteralTest.ts
-rw-r--r--
4395
  1import { assert } from "chai";
  2import { it, describe } from "../testutils/TestUtils";
  3import { F7Exception } from "../../../main/js/errors/F7Exception";
  4import { F7ExceptionName } from "../../../main/js/errors/F7ExceptionName";
  5import { RefException } from "../../../main/js/errors/RefException";
  6import { Grid } from "../../../main/js/models/common/Grid";
  7import { run } from "../testutils/TestUtils";
  8
  9describe("CodeExecutor -  General Array Literal Test", function () {
 10  it("should work return REF error for empty array literal", function () {
 11    assert.deepEqual((run("{}") as F7Exception).name, F7ExceptionName.REF);
 12  });
 13
 14  it("should work with single strings", function () {
 15    assert.deepEqual(run("{1}"), Grid.builder().add(0, 0, 1.0).build());
 16  });
 17
 18  it("should work with nested single strings", function () {
 19    assert.deepEqual(run("{{{{{{1}}}}}}"), Grid.builder().add(0, 0, 1.0).build());
 20  });
 21
 22  it("should work with column-wise projections", function () {
 23    assert.deepEqual(
 24      run("{1, 2, 3, 4}"),
 25      Grid.builder().add(0, 0, 1.0).add(1, 0, 2.0).add(2, 0, 3.0).add(3, 0, 4.0).build()
 26    );
 27  });
 28
 29  it("should work with nested column-wise projections", function () {
 30    assert.deepEqual(
 31      run("{1, {2, {3, {4}}}}"),
 32      Grid.builder().add(0, 0, 1.0).add(1, 0, 2.0).add(2, 0, 3.0).add(3, 0, 4.0).build()
 33    );
 34  });
 35
 36  it("should work with row-wise projections", function () {
 37    assert.deepEqual(
 38      run("{1; 2; 3; 4}"),
 39      Grid.builder().add(0, 0, 1.0).add(0, 1, 2.0).add(0, 2, 3.0).add(0, 3, 4.0).build()
 40    );
 41    assert.deepEqual(
 42      run("{11; 9; 5; 3; 1}"),
 43      Grid.builder()
 44        .add(0, 0, 11.0)
 45        .add(0, 1, 9.0)
 46        .add(0, 2, 5.0)
 47        .add(0, 3, 3.0)
 48        .add(0, 4, 1.0)
 49        .build()
 50    );
 51  });
 52
 53  it("should work with nested row-wise projections", function () {
 54    assert.deepEqual(
 55      run("{1; {2; {3; {4}}}}"),
 56      Grid.builder().add(0, 0, 1.0).add(0, 1, 2.0).add(0, 2, 3.0).add(0, 3, 4.0).build()
 57    );
 58    assert.deepEqual(
 59      run("{1;{2;{3;4}};{5}}"),
 60      Grid.builder()
 61        .add(0, 0, 1.0)
 62        .add(0, 1, 2.0)
 63        .add(0, 2, 3.0)
 64        .add(0, 3, 4.0)
 65        .add(0, 4, 5.0)
 66        .build()
 67    );
 68  });
 69
 70  it("should work with column and row projections - row first", function () {
 71    assert.deepEqual(
 72      run("{1, 2; 3, 4}"),
 73      Grid.builder().add(0, 0, 1.0).add(1, 0, 2.0).add(0, 1, 3.0).add(1, 1, 4.0).build()
 74    );
 75    assert.deepEqual(
 76      run("{1, 2, 3;4, 5, 6}"),
 77      Grid.builder()
 78        .add(0, 0, 1.0)
 79        .add(1, 0, 2.0)
 80        .add(2, 0, 3.0)
 81        .add(0, 1, 4.0)
 82        .add(1, 1, 5.0)
 83        .add(2, 1, 6.0)
 84        .build()
 85    );
 86  });
 87
 88  it("should work with column and row projections - column first", function () {
 89    assert.deepEqual(
 90      run("{{1; 2},{3; 4}}"),
 91      Grid.builder().add(0, 0, 1.0).add(1, 0, 3.0).add(0, 1, 2.0).add(1, 1, 4.0).build()
 92    );
 93    assert.deepEqual(
 94      run("{{{}; {}},{{}; {}}}"),
 95      Grid.builder()
 96        .add(0, 0, new RefException("Range does not exist."))
 97        .add(1, 0, new RefException("Range does not exist."))
 98        .add(0, 1, new RefException("Range does not exist."))
 99        .add(1, 1, new RefException("Range does not exist."))
100        .build()
101    );
102    assert.deepEqual(
103      run(
104        "{{{0.0, 1.0, 2.0};{0.1, 1.1, 2.1}};{{0.2, 1.2, 2.2};{0.3, 1.3, 2.3}};{{0.4, 1.4, 2.4};{0.5, 1.5, 2.5}}}"
105      ),
106      Grid.builder()
107        .add(0, 0, 0.0)
108        .add(0, 1, 0.1)
109        .add(0, 2, 0.2)
110        .add(0, 3, 0.3)
111        .add(0, 4, 0.4)
112        .add(0, 5, 0.5)
113        .add(1, 0, 1.0)
114        .add(1, 1, 1.1)
115        .add(1, 2, 1.2)
116        .add(1, 3, 1.3)
117        .add(1, 4, 1.4)
118        .add(1, 5, 1.5)
119        .add(2, 0, 2.0)
120        .add(2, 1, 2.1)
121        .add(2, 2, 2.2)
122        .add(2, 3, 2.3)
123        .add(2, 4, 2.4)
124        .add(2, 5, 2.5)
125        .build()
126    );
127  });
128
129  it("should return error when columns and rows result in empty values for the projected range", function () {
130    assert.deepEqual((run("{1,2;3}") as F7Exception).name, F7ExceptionName.VALUE);
131    assert.deepEqual((run("{1,2;3,4,5}") as F7Exception).name, F7ExceptionName.VALUE);
132    assert.deepEqual((run("{11;9;5;3;1,2}") as F7Exception).name, F7ExceptionName.VALUE);
133    assert.deepEqual((run("{{};{};{},{}}") as F7Exception).name, F7ExceptionName.VALUE);
134  });
135});