name:
src/test/js/execution/ExecutorTypeCastingTest.ts
-rw-r--r--
6560
1import { RefException } from "../../../main/js/errors/RefException";
2import { runner, it, describe } from "../testutils/TestUtils";
3
4describe("Executor.execute - Type Casting", function () {
5 it("should cast string to int number", function () {
6 runner().addCell("Alpha", "A1", '= "0" * 1').addExpectedValue("Alpha", "A1", 0.0).run();
7 runner().addCell("Alpha", "A1", '= "1" * 1').addExpectedValue("Alpha", "A1", 1.0).run();
8 runner()
9 .addCell("Alpha", "A1", '= "2738281" * 1')
10 .addExpectedValue("Alpha", "A1", 2738281.0)
11 .run();
12 runner()
13 .addCell("Alpha", "A1", '= "0001776" * 1')
14 .addExpectedValue("Alpha", "A1", 1776.0)
15 .run();
16 });
17
18 it("should cast string to decimal number", function () {
19 runner().addCell("Alpha", "A1", '= "0.0" * 1').addExpectedValue("Alpha", "A1", 0.0).run();
20 runner()
21 .addCell("Alpha", "A1", '= "0.187328" * 1')
22 .addExpectedValue("Alpha", "A1", 0.187328)
23 .run();
24 runner()
25 .addCell("Alpha", "A1", '= "38133.09128901" * 1')
26 .addExpectedValue("Alpha", "A1", 38133.09128901)
27 .run();
28 runner()
29 .addCell("Alpha", "A1", '= "4.00000000000001" * 1')
30 .addExpectedValue("Alpha", "A1", 4.00000000000001)
31 .run();
32 runner()
33 .addCell("Alpha", "A1", '= "33.0000000000000" * 1')
34 .addExpectedValue("Alpha", "A1", 33.0)
35 .run();
36 });
37
38 it("should cast string to number (inferred positive sci-notation)", function () {
39 runner()
40 .addCell("Alpha", "A1", '= "12387e0" * 1')
41 .addExpectedValue("Alpha", "A1", 12387.0)
42 .run();
43 runner()
44 .addCell("Alpha", "A1", '= "12387e1" * 1')
45 .addExpectedValue("Alpha", "A1", 123870.0)
46 .run();
47 runner().addCell("Alpha", "A1", '= "1.0e4" * 1').addExpectedValue("Alpha", "A1", 10000.0).run();
48 runner().addCell("Alpha", "A1", '= "0.0009e4" * 1').addExpectedValue("Alpha", "A1", 9.0).run();
49 });
50
51 it("should cast string to number (positive sci-notation)", function () {
52 runner()
53 .addCell("Alpha", "A1", '= "12387e+0" * 1')
54 .addExpectedValue("Alpha", "A1", 12387.0)
55 .run();
56 runner()
57 .addCell("Alpha", "A1", '= "12387e+1" * 1')
58 .addExpectedValue("Alpha", "A1", 123870.0)
59 .run();
60 runner()
61 .addCell("Alpha", "A1", '= "1.0e+4" * 1')
62 .addExpectedValue("Alpha", "A1", 10000.0)
63 .run();
64 runner().addCell("Alpha", "A1", '= "0.0009e+4" * 1').addExpectedValue("Alpha", "A1", 9.0).run();
65 });
66
67 it("should cast string to number (negative sci-notation)", function () {
68 runner()
69 .addCell("Alpha", "A1", '= "12387e-0" * 1')
70 .addExpectedValue("Alpha", "A1", 12387)
71 .run();
72 runner()
73 .addCell("Alpha", "A1", '= "12387e-1" * 1')
74 .addExpectedValue("Alpha", "A1", 12387e-1)
75 .run();
76 runner().addCell("Alpha", "A1", '= "1.0e-4" * 1').addExpectedValue("Alpha", "A1", 1.0e-4).run();
77 runner()
78 .addCell("Alpha", "A1", '= "0.0009e-4" * 1')
79 .addExpectedValue("Alpha", "A1", 0.0009e-4)
80 .run();
81 });
82
83 it("should cast boolean to number", function () {
84 runner().addCell("Alpha", "A1", "= FALSE * 1").addExpectedValue("Alpha", "A1", 0.0).run();
85 runner().addCell("Alpha", "A1", "= TRUE * 1").addExpectedValue("Alpha", "A1", 1.0).run();
86 });
87
88 it("should cast number to int string", function () {
89 runner().addCell("Alpha", "A1", '= 0 & ""').addExpectedValue("Alpha", "A1", "0").run();
90 runner().addCell("Alpha", "A1", '= 1 & ""').addExpectedValue("Alpha", "A1", "1").run();
91 runner()
92 .addCell("Alpha", "A1", '= 2738281 & ""')
93 .addExpectedValue("Alpha", "A1", "2738281")
94 .run();
95 runner().addCell("Alpha", "A1", '= 0001776 & ""').addExpectedValue("Alpha", "A1", "1776").run();
96 });
97
98 it("should cast number to decimal string", function () {
99 runner().addCell("Alpha", "A1", '= 0.0 & ""').addExpectedValue("Alpha", "A1", "0").run();
100 runner()
101 .addCell("Alpha", "A1", '= 0.187328 & ""')
102 .addExpectedValue("Alpha", "A1", "0.187328")
103 .run();
104 runner()
105 .addCell("Alpha", "A1", '= 38133.09128901 & ""')
106 .addExpectedValue("Alpha", "A1", "38133.09128901")
107 .run();
108 runner()
109 .addCell("Alpha", "A1", '= 4.00000000000001 & ""')
110 .addExpectedValue("Alpha", "A1", "4.00000000000001")
111 .run();
112 runner()
113 .addCell("Alpha", "A1", '= 33.0000000000000 & ""')
114 .addExpectedValue("Alpha", "A1", "33")
115 .run();
116 });
117
118 it("should cast number to string with positive scientific notation", function () {
119 runner()
120 .addCell("Alpha", "A1", '= 12387183718789125223e0 & ""')
121 .addExpectedValue("Alpha", "A1", "12387183718789126000")
122 .run();
123 runner()
124 .addCell("Alpha", "A1", '= 31287e42 & ""')
125 .addExpectedValue("Alpha", "A1", "3.1287e+46")
126 .run();
127 runner().addCell("Alpha", "A1", '= 1.0e4 & ""').addExpectedValue("Alpha", "A1", "10000").run();
128 runner().addCell("Alpha", "A1", '= 0.0009e4 & ""').addExpectedValue("Alpha", "A1", "9").run();
129 });
130
131 it("should cast number to boolean false", function () {
132 runner()
133 .addCell("Alpha", "A1", "= IF(0, TRUE, FALSE)")
134 .addExpectedValue("Alpha", "A1", false)
135 .run();
136 });
137
138 it("should cast number to boolean true", function () {
139 runner()
140 .addCell("Alpha", "A1", "= IF(0.00001, TRUE, FALSE)")
141 .addExpectedValue("Alpha", "A1", true)
142 .run();
143 runner()
144 .addCell("Alpha", "A1", "= IF(1, TRUE, FALSE)")
145 .addExpectedValue("Alpha", "A1", true)
146 .run();
147 runner()
148 .addCell("Alpha", "A1", "= IF(2, TRUE, FALSE)")
149 .addExpectedValue("Alpha", "A1", true)
150 .run();
151 runner()
152 .addCell("Alpha", "A1", "= IF(-823178, TRUE, FALSE)")
153 .addExpectedValue("Alpha", "A1", true)
154 .run();
155 runner()
156 .addCell("Alpha", "A1", "= IF(31287e42, TRUE, FALSE)")
157 .addExpectedValue("Alpha", "A1", true)
158 .run();
159 });
160
161 it("should cast array literal to number", function () {
162 runner().addCell("Alpha", "A1", "= {2, 4, 8} * 1").addExpectedValue("Alpha", "A1", 2.0).run();
163 runner()
164 .addCell("Alpha", "A1", '= {2, "Nope."} * 1')
165 .addExpectedValue("Alpha", "A1", 2.0)
166 .run();
167 runner()
168 .addCell("Alpha", "A1", "= {} * 1")
169 .addExpectedValue("Alpha", "A1", new RefException())
170 .run();
171 });
172
173 it("should cast array literal to boolean", function () {
174 runner()
175 .addCell("Alpha", "A1", "= IF({1000, TRUE}, TRUE, FALSE)")
176 .addExpectedValue("Alpha", "A1", true)
177 .run();
178 });
179});