|
1 | 1 | const MathParser = require('./MathParser').MathParser;
|
| 2 | +const singlePlusMinusOperationData = require('./testData').singlePlusMinusOperationData; |
| 3 | +const doublePlusMinusOperationData = require('./testData').doublePlusMinusOperationData; |
| 4 | +const triplePlusMinusOperationData = require('./testData').triplePlusMinusOperationData; |
| 5 | +const singleMultiplyDivideOperationData = require('./testData').singleMultiplyDivideOperationData; |
2 | 6 |
|
3 | 7 | describe("Recursive Descent Parser tests", function() {
|
4 | 8 |
|
5 |
| -[ |
6 |
| -{num1: 1, num2: 2, operator: "+", expectedResult: 3}, |
7 |
| -{num1: 10, num2: 2, operator: "+", expectedResult: 12}, |
8 |
| -{num1: 1, num2: 20, operator: "+", expectedResult: 21}, |
9 |
| -{num1: -1, num2: 2, operator: "+", expectedResult: 1}, |
10 |
| -{num1: -10, num2: 2, operator: "+", expectedResult: -8}, |
11 |
| -{num1: -1, num2: 20, operator: "+", expectedResult: 19}, |
12 |
| -{num1: 1, num2: 2, operator: "-", expectedResult: -1}, |
13 |
| -{num1: 10, num2: 2, operator: "-", expectedResult: 8}, |
14 |
| -{num1: 1, num2: 20, operator: "-", expectedResult: -19}, |
15 |
| -{num1: -1, num2: 2, operator: "-", expectedResult: -3}, |
16 |
| -{num1: -10, num2: 2, operator: "-", expectedResult: -12}, |
17 |
| -{num1: -1, num2: 20, operator: "-", expectedResult: -21}, |
18 |
| -{num1: 0, num2: 0, operator: "-", expectedResult: 0}, |
19 |
| -{num1: 00, num2: 0, operator: "-", expectedResult: 0}, |
20 |
| -{num1: 0, num2: 00, operator: "-", expectedResult: 0}, |
21 |
| -{num1: 0, num2: 0, operator: "+", expectedResult: 0}, |
22 |
| -{num1: 00, num2: 0, operator: "+", expectedResult: 0}, |
23 |
| -{num1: 0, num2: 00, operator: "+", expectedResult: 0}, |
24 |
| -] |
25 |
| -.forEach(testData => |
26 |
| -it("Valid two numbers addition/subtraction expression", function() { |
27 |
| -// given |
28 |
| -const expression = `${testData.num1}${testData.operator}${testData.num2}`; |
29 |
| -mathParser = new MathParser(expression); |
| 9 | + |
| 10 | +singlePlusMinusOperationData.forEach(testData => |
| 11 | +it("Valid two numbers addition/subtraction expression", function() { |
| 12 | +// given |
| 13 | +const expression = `${testData.num1}${testData.operator}${testData.num2}`; |
| 14 | +mathParser = new MathParser(expression); |
30 | 15 |
|
31 |
| -// when |
32 |
| -const result = mathParser.parseExpression(); |
| 16 | +// when |
| 17 | +const result = mathParser.parseExpression(); |
33 | 18 |
|
34 |
| -// then |
35 |
| -expect(result).toEqual(testData.expectedResult); |
36 |
| -}) |
37 |
| -); |
| 19 | +// then |
| 20 | +expect(result).toEqual(testData.expectedResult); |
| 21 | +}) |
| 22 | +); |
| 23 | + |
38 | 24 |
|
39 |
| -[ |
40 |
| -{num1: 1, num2: 2, num3: 3, operator1: "+", operator2: "+", expectedResult: 6}, |
41 |
| -{num1: 10, num2: 2, num3: 3, operator1: "+", operator2: "+", expectedResult: 15}, |
42 |
| -{num1: 1, num2: 20, num3: 3, operator1: "+", operator2: "+", expectedResult: 24}, |
43 |
| -{num1: 1, num2: 2, num3: 30, operator1: "+", operator2: "+", expectedResult: 33}, |
44 |
| -{num1: -1, num2: 2, num3: 3, operator1: "+", operator2: "+", expectedResult: 4}, |
45 |
| -{num1: -10, num2: 2, num3: 3, operator1: "+", operator2: "+", expectedResult: -5}, |
46 |
| -{num1: -1, num2: 20, num3: 3, operator1: "+", operator2: "+", expectedResult: 22}, |
47 |
| -{num1: -1, num2: 2, num3: 30, operator1: "+", operator2: "+", expectedResult: 31}, |
48 |
| -{num1: 1, num2: 2, num3: 3, operator1: "-", operator2: "-", expectedResult: -4}, |
49 |
| -{num1: 10, num2: 2, num3: 3, operator1: "-", operator2: "-", expectedResult: 5}, |
50 |
| -{num1: 1, num2: 20, num3: 3, operator1: "-", operator2: "-", expectedResult: -22}, |
51 |
| -{num1: 1, num2: 2, num3: 30, operator1: "-", operator2: "-", expectedResult: -31}, |
52 |
| -{num1: -1, num2: 2, num3: 3, operator1: "-", operator2: "-", expectedResult: -6}, |
53 |
| -{num1: -10, num2: 2, num3: 3, operator1: "-", operator2: "-", expectedResult: -15}, |
54 |
| -{num1: -1, num2: 20, num3: 3, operator1: "-", operator2: "-", expectedResult: -24}, |
55 |
| -{num1: -1, num2: 2, num3: 30, operator1: "-", operator2: "-", expectedResult: -33}, |
56 |
| -{num1: 0, num2: 0, num3: 0, operator1: "-", operator2: "-", expectedResult: 0}, |
57 |
| -{num1: 00, num2: 0, num3: 0, operator1: "-", operator2: "-", expectedResult: 0}, |
58 |
| -{num1: 0, num2: 00, num3: 0, operator1: "-", operator2: "-", expectedResult: 0}, |
59 |
| -{num1: 0, num2: 0, num3: 00, operator1: "-", operator2: "-", expectedResult: 0}, |
60 |
| -{num1: 0, num2: 0, num3: 0, operator1: "+", operator2: "+", expectedResult: 0}, |
61 |
| -{num1: 00, num2: 0, num3: 0, operator1: "+", operator2: "+", expectedResult: 0}, |
62 |
| -{num1: 0, num2: 00, num3: 0, operator1: "+", operator2: "+", expectedResult: 0}, |
63 |
| -{num1: 0, num2: 0, num3: 00, operator1: "+", operator2: "+", expectedResult: 0}, |
64 |
| -{num1: 1, num2: 2, num3: 3, operator1: "+", operator2: "-", expectedResult: 0}, |
65 |
| -{num1: 10, num2: 2, num3: 3, operator1: "+", operator2: "-", expectedResult: 9}, |
66 |
| -{num1: 1, num2: 20, num3: 3, operator1: "+", operator2: "-", expectedResult: 18}, |
67 |
| -{num1: 1, num2: 2, num3: 30, operator1: "+", operator2: "-", expectedResult: -27}, |
68 |
| -{num1: -1, num2: 2, num3: 3, operator1: "+", operator2: "-", expectedResult: -2}, |
69 |
| -{num1: -10, num2: 2, num3: 3, operator1: "+", operator2: "-", expectedResult: -11}, |
70 |
| -{num1: -1, num2: 20, num3: 3, operator1: "+", operator2: "-", expectedResult: 16}, |
71 |
| -{num1: -1, num2: 2, num3: 30, operator1: "+", operator2: "-", expectedResult: -29}, |
72 |
| -{num1: 1, num2: 2, num3: 3, operator1: "-", operator2: "+", expectedResult: 2}, |
73 |
| -{num1: 10, num2: 2, num3: 3, operator1: "-", operator2: "+", expectedResult: 11}, |
74 |
| -{num1: 1, num2: 20, num3: 3, operator1: "-", operator2: "+", expectedResult: -16}, |
75 |
| -{num1: 1, num2: 2, num3: 30, operator1: "-", operator2: "+", expectedResult: 29}, |
76 |
| -{num1: -1, num2: 2, num3: 3, operator1: "-", operator2: "+", expectedResult: 0}, |
77 |
| -{num1: -10, num2: 2, num3: 3, operator1: "-", operator2: "+", expectedResult: -9}, |
78 |
| -{num1: -1, num2: 20, num3: 3, operator1: "-", operator2: "+", expectedResult: -18}, |
79 |
| -{num1: -1, num2: 2, num3: 30, operator1: "-", operator2: "+", expectedResult: 27}, |
80 |
| -] |
81 |
| -.forEach(testData => |
82 |
| -it("Valid three numbers addition/subtraction expression", function() { |
83 |
| -// given |
84 |
| -const expression = `${testData.num1}${testData.operator1}${testData.num2}${testData.operator2}${testData.num3}`; |
85 |
| -mathParser = new MathParser(expression); |
| 25 | +doublePlusMinusOperationData.forEach(testData => |
| 26 | +it("Valid three numbers addition/subtraction expression", function() { |
| 27 | +// given |
| 28 | +const expression = `${testData.num1}${testData.operator1}${testData.num2}${testData.operator2}${testData.num3}`; |
| 29 | +mathParser = new MathParser(expression); |
86 | 30 |
|
87 |
| -// when |
88 |
| -const result = mathParser.parseExpression() |
| 31 | +// when |
| 32 | +const result = mathParser.parseExpression() |
89 | 33 |
|
90 |
| -// then |
91 |
| -expect(result).toEqual(testData.expectedResult); |
92 |
| -}) |
93 |
| -); |
| 34 | +// then |
| 35 | +expect(result).toEqual(testData.expectedResult); |
| 36 | +}) |
| 37 | +); |
94 | 38 |
|
95 |
| -[ |
96 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "+", operator3: "+", expectedResult: 10}, |
97 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "+", operator3: "+", expectedResult: 8}, |
98 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "+", operator3: "+", expectedResult: 6}, |
99 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "+", operator3: "+", expectedResult: 4}, |
100 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "-", operator3: "+", expectedResult: 4}, |
101 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "-", operator3: "+", expectedResult: 2}, |
102 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "+", operator3: "-", expectedResult: 2}, |
103 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "+", operator3: "-", expectedResult: 0}, |
104 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "-", operator3: "+", expectedResult: 0}, |
105 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "-", operator3: "+", expectedResult: -2}, |
106 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "+", operator3: "-", expectedResult: -2}, |
107 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "+", operator3: "-", expectedResult: -4}, |
108 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "-", operator3: "-", expectedResult: -4}, |
109 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "+", operator2: "-", operator3: "-", expectedResult: -6}, |
110 |
| -{num1: 1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "-", operator3: "-", expectedResult: -8}, |
111 |
| -{num1: -1, num2: 2, num3: 3, num4: 4, operator1: "-", operator2: "-", operator3: "-", expectedResult: -10}, |
112 |
| -{num1: 0, num2: 0, num3: 0, num4: 0, operator1: "+", operator2: "+", operator3: "+", expectedResult: 0}, |
113 |
| -{num1: 0, num2: 0, num3: 0, num4: 0, operator1: "-", operator2: "-", operator3: "-", expectedResult: 0}, |
114 |
| -] |
115 |
| -.forEach(testData => |
116 |
| -it("Valid four numbers addition/subtraction expression", function() { |
117 |
| -// given |
118 |
| -const expression = `${testData.num1}${testData.operator1}${testData.num2}${testData.operator2}${testData.num3}${testData.operator3}${testData.num4}`; |
119 |
| -mathParser = new MathParser(expression); |
| 39 | + |
| 40 | +triplePlusMinusOperationData.forEach(testData => |
| 41 | +it("Valid four numbers addition/subtraction expression", function() { |
| 42 | +// given |
| 43 | +const expression = `${testData.num1}${testData.operator1}${testData.num2}${testData.operator2}${testData.num3}${testData.operator3}${testData.num4}`; |
| 44 | +mathParser = new MathParser(expression); |
120 | 45 |
|
121 |
| -// when |
122 |
| -const result = mathParser.parseExpression(); |
| 46 | +// when |
| 47 | +const result = mathParser.parseExpression(); |
123 | 48 |
|
124 |
| -// then |
125 |
| -expect(result).toEqual(testData.expectedResult); |
126 |
| -}) |
127 |
| -); |
| 49 | +// then |
| 50 | +expect(result).toEqual(testData.expectedResult); |
| 51 | +}) |
| 52 | +); |
128 | 53 |
|
129 |
| -[ |
130 |
| -{num1: 1, num2: 2, operator: "*", expectedResult: 2}, |
131 |
| -{num1: -1, num2: 2, operator: "*", expectedResult: -2}, |
132 |
| -{num1: 10, num2: 2, operator: "*", expectedResult: 20}, |
133 |
| -{num1: -10, num2: 2, operator: "*", expectedResult: -20}, |
134 |
| -{num1: 1, num2: 20, operator: "*", expectedResult: 20}, |
135 |
| -{num1: -1, num2: 20, operator: "*", expectedResult: -20}, |
136 |
| -] |
137 |
| -.forEach(testData => |
138 |
| -it("Valid two numbers multiplication expression", function() { |
139 |
| -// given |
140 |
| -const expression = `${testData.num1}${testData.operator}${testData.num2}`; |
141 |
| -mathParser = new MathParser(expression); |
| 54 | + |
| 55 | +singleMultiplyDivideOperationData.forEach(testData => |
| 56 | +it("Valid two numbers multiplication/division expression", function() { |
| 57 | +// given |
| 58 | +const expression = `${testData.num1}${testData.operator}${testData.num2}`; |
| 59 | +mathParser = new MathParser(expression); |
142 | 60 |
|
143 |
| -// when |
144 |
| -const result = mathParser.parseExpression(); |
| 61 | +// when |
| 62 | +const result = mathParser.parseExpression(); |
145 | 63 |
|
146 |
| -// then |
147 |
| -expect(result).toEqual(testData.expectedResult); |
148 |
| -}) |
149 |
| -); |
| 64 | +// then |
| 65 | +expect(result).toEqual(testData.expectedResult); |
| 66 | +}) |
| 67 | +); |
150 | 68 |
|
151 | 69 | });
|
0 commit comments