name:
src/test/js/execution/ExecutorExponentTest.ts
-rw-r--r--
3962
1import { NumException } from "../../../main/js/errors/NumException";
2import { runner, it, describe } from "../testutils/TestUtils";
3
4describe("Executor.execute - Exponents", function () {
5 it("should work with positive number, positive exponent", function () {
6 runner().addCell("Alpha", "A1", "= 3^5").addExpectedValue("Alpha", "A1", 243.0).run();
7 runner().addCell("Alpha", "A1", "= 4^5").addExpectedValue("Alpha", "A1", 1024.0).run();
8 runner().addCell("Alpha", "A1", "= 1^1").addExpectedValue("Alpha", "A1", 1.0).run();
9 runner().addCell("Alpha", "A1", "= 1^5").addExpectedValue("Alpha", "A1", 1.0).run();
10 runner().addCell("Alpha", "A1", "= 2^0").addExpectedValue("Alpha", "A1", 1.0).run();
11 runner().addCell("Alpha", "A1", "= 0^10").addExpectedValue("Alpha", "A1", 0.0).run();
12 });
13
14 it("should work with positive number, negative exponent", function () {
15 runner()
16 .addCell("Alpha", "A1", "= 3^-5")
17 .addExpectedValue("Alpha", "A1", 0.00411522633744856)
18 .run();
19 runner().addCell("Alpha", "A1", "= 4^-5").addExpectedValue("Alpha", "A1", 9.765625e-4).run();
20 runner().addCell("Alpha", "A1", "= 1^-1").addExpectedValue("Alpha", "A1", 1.0).run();
21 runner().addCell("Alpha", "A1", "= 1^-5").addExpectedValue("Alpha", "A1", 1.0).run();
22 runner().addCell("Alpha", "A1", "= 2^-0").addExpectedValue("Alpha", "A1", 1.0).run();
23 // TODO/HACK: This is different in Excel and Google Sheets.
24 runner()
25 .addCell("Alpha", "A1", "= 0^-10")
26 .addExpectedValue("Alpha", "A1", new NumException())
27 .run();
28 });
29
30 it("should work with negative number, negative exponent", function () {
31 runner()
32 .addCell("Alpha", "A1", "= -3^-1")
33 .addExpectedValue("Alpha", "A1", -0.3333333333333333)
34 .run();
35 runner()
36 .addCell("Alpha", "A1", "= -3^-2")
37 .addExpectedValue("Alpha", "A1", 0.1111111111111111)
38 .run();
39 runner()
40 .addCell("Alpha", "A1", "= -3^-3")
41 .addExpectedValue("Alpha", "A1", -0.037037037037037035)
42 .run();
43 runner().addCell("Alpha", "A1", "= -2^-3").addExpectedValue("Alpha", "A1", -0.125).run();
44 runner().addCell("Alpha", "A1", "= -1^-3").addExpectedValue("Alpha", "A1", -1.0).run();
45 runner().addCell("Alpha", "A1", "= -1^-2").addExpectedValue("Alpha", "A1", 1.0).run();
46 });
47
48 it("should work with negative number, positive exponent", function () {
49 runner().addCell("Alpha", "A1", "= -3^1").addExpectedValue("Alpha", "A1", -3.0).run();
50 runner().addCell("Alpha", "A1", "= -3^2").addExpectedValue("Alpha", "A1", 9.0).run();
51 runner().addCell("Alpha", "A1", "= -3^3").addExpectedValue("Alpha", "A1", -27.0).run();
52 runner().addCell("Alpha", "A1", "= -2^3").addExpectedValue("Alpha", "A1", -8.0).run();
53 runner().addCell("Alpha", "A1", "= -1^3").addExpectedValue("Alpha", "A1", -1.0).run();
54 runner().addCell("Alpha", "A1", "= -1^2").addExpectedValue("Alpha", "A1", 1.0).run();
55 });
56
57 it("should follow the order of operations correctly with respect to left-association", function () {
58 runner().addCell("Alpha", "A1", "= 2 ^ 3 ^ 4").addExpectedValue("Alpha", "A1", 4096.0).run();
59 runner().addCell("Alpha", "A1", "= 3 ^ 2 ^ 4").addExpectedValue("Alpha", "A1", 6561.0).run();
60 runner().addCell("Alpha", "A1", "= 4 ^ 2 ^ 3").addExpectedValue("Alpha", "A1", 4096.0).run();
61 });
62
63 it("should work with booleans", function () {
64 runner().addCell("Alpha", "A1", "= 9 ^ TRUE").addExpectedValue("Alpha", "A1", 9.0).run();
65 runner().addCell("Alpha", "A1", "= 9 ^ FALSE").addExpectedValue("Alpha", "A1", 1.0).run();
66 });
67
68 it("should work with strings", function () {
69 runner().addCell("Alpha", "A1", '= 2 ^ "3"').addExpectedValue("Alpha", "A1", 8.0).run();
70 runner()
71 .addCell("Alpha", "A1", '= 2 ^ "3e1"')
72 .addExpectedValue("Alpha", "A1", 1.073741824e9)
73 .run();
74 runner().addCell("Alpha", "A1", '= 2 ^ "2"').addExpectedValue("Alpha", "A1", 4.0).run();
75 });
76});