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});