|
6 | 6 | package org.elasticsearch.xpack.sql.parser;
|
7 | 7 |
|
8 | 8 | import org.elasticsearch.test.ESTestCase;
|
| 9 | +import org.elasticsearch.xpack.sql.TestUtils; |
9 | 10 | import org.elasticsearch.xpack.sql.expression.Expression;
|
10 | 11 | import org.elasticsearch.xpack.sql.expression.Literal;
|
11 | 12 | import org.elasticsearch.xpack.sql.expression.function.UnresolvedFunction;
|
@@ -202,26 +203,55 @@ public void testNegativeLiteral() {
|
202 | 203 | Expression expr = parser.createExpression("- 6");
|
203 | 204 | assertEquals(Literal.class, expr.getClass());
|
204 | 205 | assertEquals("- 6", expr.sourceText());
|
| 206 | + assertEquals(-6, expr.fold()); |
| 207 | + |
| 208 | + expr = parser.createExpression("- ( 6.134 )"); |
| 209 | + assertEquals(Literal.class, expr.getClass()); |
| 210 | + assertEquals("- ( 6.134 )", expr.sourceText()); |
| 211 | + assertEquals(-6.134, expr.fold()); |
| 212 | + |
| 213 | + expr = parser.createExpression("- ( ( (1.25) ) )"); |
| 214 | + assertEquals(Literal.class, expr.getClass()); |
| 215 | + assertEquals("- ( ( (1.25) ) )", expr.sourceText()); |
| 216 | + assertEquals(-1.25, expr.fold()); |
| 217 | + |
| 218 | + int numberOfParentheses = randomIntBetween(3, 10); |
| 219 | + double value = randomDouble(); |
| 220 | + StringBuilder sb = new StringBuilder("-"); |
| 221 | + for (int i = 0; i < numberOfParentheses; i++) { |
| 222 | + sb.append("(").append(TestUtils.randomWhitespaces()); |
| 223 | + } |
| 224 | + sb.append(value); |
| 225 | + for (int i = 0; i < numberOfParentheses; i++) { |
| 226 | + sb.append(")"); |
| 227 | + if (i < numberOfParentheses - 1) { |
| 228 | + sb.append(TestUtils.randomWhitespaces()); |
| 229 | + } |
| 230 | + } |
| 231 | + expr = parser.createExpression(sb.toString()); |
| 232 | + assertEquals(Literal.class, expr.getClass()); |
| 233 | + assertEquals(sb.toString(), expr.sourceText()); |
| 234 | + assertEquals(- value, expr.fold()); |
205 | 235 | }
|
206 | 236 |
|
207 | 237 | public void testComplexArithmetic() {
|
208 |
| - String sql = "-(((a-2)-(-3))+b)"; |
| 238 | + String sql = "-(((a-2)- (( - ( ( 3) )) ) )+ b)"; |
209 | 239 | Expression expr = parser.createExpression(sql);
|
210 | 240 | assertEquals(Neg.class, expr.getClass());
|
211 | 241 | Neg neg = (Neg) expr;
|
212 | 242 | assertEquals(sql, neg.sourceText());
|
213 | 243 | assertEquals(1, neg.children().size());
|
214 | 244 | assertEquals(Add.class, neg.children().get(0).getClass());
|
215 | 245 | Add add = (Add) neg.children().get(0);
|
216 |
| - assertEquals("((a-2)-(-3))+b", add.sourceText()); |
| 246 | + assertEquals("((a-2)- (( - ( ( 3) )) ) )+ b", add.sourceText()); |
217 | 247 | assertEquals(2, add.children().size());
|
218 | 248 | assertEquals("?b", add.children().get(1).toString());
|
219 | 249 | assertEquals(Sub.class, add.children().get(0).getClass());
|
220 | 250 | Sub sub1 = (Sub) add.children().get(0);
|
221 |
| - assertEquals("(a-2)-(-3)", sub1.sourceText()); |
| 251 | + assertEquals("(a-2)- (( - ( ( 3) )) )", sub1.sourceText()); |
222 | 252 | assertEquals(2, sub1.children().size());
|
223 | 253 | assertEquals(Literal.class, sub1.children().get(1).getClass());
|
224 |
| - assertEquals("-3", sub1.children().get(1).sourceText()); |
| 254 | + assertEquals("- ( ( 3) )", sub1.children().get(1).sourceText()); |
225 | 255 | assertEquals(Sub.class, sub1.children().get(0).getClass());
|
226 | 256 | Sub sub2 = (Sub) sub1.children().get(0);
|
227 | 257 | assertEquals(2, sub2.children().size());
|
|
0 commit comments