blob: d6bb811f901974d5ef4aca642256462193377008 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.exec.fn.impl;
import org.apache.commons.io.FileUtils;
import org.apache.drill.exec.ExecConstants;
import org.apache.drill.test.BaseTestQuery;
import org.junit.Ignore;
import org.junit.Test;
import java.io.File;
public class TestMathFunctionsWithNanInf extends BaseTestQuery {
@Test
public void testIsNulFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select isnull(nan_col) as nan_col, isnull(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {false, false};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testIsNotNulFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select isnotnull(nan_col) as nan_col, isnotnull(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {true, true};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testEqualFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select equal(nan_col, nan_col) as nan_col, equal(inf_col, inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {true, true};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testNotEqualFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select not_equal(nan_col, nan_col) as nan_col, not_equal(inf_col, inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {false, false};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testLessThanFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select less_than(nan_col, 5) as nan_col, less_than(inf_col, 5) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {false, false};
evalTest(table_name, json, query, columns, values);
}
@Test
public void tesGreaterThanFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select greater_than(nan_col, 5) as nan_col, greater_than(inf_col, 5) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {true, true};
evalTest(table_name, json, query, columns, values);
}
@Test
@Ignore // see DRILL-6018
public void tesGreaterThanOrEqualToFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select greater_than_or_equal_to(nan_col, 5) as nan_col, " +
"greater_than_or_equal_to(inf_col, cast('Infinity' as float)) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {false, true};
evalTest(table_name, json, query, columns, values);
}
@Test
@Ignore // see DRILL-6018
public void testLessThanOrEqualToFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select less_than_or_equal_to(nan_col, 5) as nan_col," +
" less_than_or_equal_to(inf_col, cast('Infinity' as float)) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {false, true};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testHashFunctions() throws Exception {
test("select hash(cast('NaN' as double)) from (values(1))");
test("select hash32(cast('NaN' as double)) from (values(1))");
test("select hash32(cast('NaN' as double), 4) from (values(1))");
test("select hash(cast('Infinity' as double)) from (values(1))");
test("select hash32(cast('Infinity' as double)) from (values(1))");
test("select hash32(cast('Infinity' as double), 4) from (values(1))");
test("select hash64AsDouble(cast('NaN' as float)) from (values(1))");
test("select hash64AsDouble(cast('NaN' as float), 4) from (values(1))");
test("select hash64AsDouble(cast('Infinity' as float)) from (values(1))");
test("select hash64AsDouble(cast('Infinity' as float), 4) from (values(1))");
test("select hash32AsDouble(cast('NaN' as float)) from (values(1))");
test("select hash32AsDouble(cast('NaN' as float), 4) from (values(1))");
test("select hash32AsDouble(cast('Infinity' as float)) from (values(1))");
test("select hash32AsDouble(cast('Infinity' as float), 4) from (values(1))");
test("select hash64(cast('NaN' as float)) from (values(1))");
test("select hash64(cast('NaN' as float), 4) from (values(1))");
test("select hash64(cast('Infinity' as float)) from (values(1))");
test("select hash64(cast('Infinity' as float), 4) from (values(1))");
}
@Test
public void testSignFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select sign(nan_col) as nan_col, sign(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {0, 1};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testLogFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select log(nan_col) as nan_col, log(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAddFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select add(nan_col, 3) as nan_col, add(inf_col, 3) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSubtractFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select subtract(nan_col, 3) as nan_col, subtract(inf_col, 3) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testDivideFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select divide(nan_col, 3) as nan_col, divide(inf_col, 3) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testMultiplyFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select multiply(nan_col, 3) as nan_col, multiply(inf_col, 3) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testTanhFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select tanh(nan_col) as nan_col, tanh(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, 1.0};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testTanFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select tan(nan_col) as nan_col, tan(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAtanFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select atan(nan_col) as nan_col, atan(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, 1.5707963267948966};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSinFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select sin(nan_col) as nan_col, sin(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAsinFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select asin(nan_col) as nan_col, asin(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSinhFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select sinh(nan_col) as nan_col, sinh(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCosFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select cos(nan_col) as nan_col, cos(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAcosFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select acos(nan_col) as nan_col, acos(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCotFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select cot(nan_col) as nan_col, cot(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCoshFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select cosh(nan_col) as nan_col, cosh(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSqrtFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":-Infinity, \"pos_inf_col\":Infinity}";
String query = String.format("select sqrt(nan_col) as nan_col, sqrt(inf_col) as inf_col, sqrt(pos_inf_col) as pos_inf from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col", "pos_inf"};
Object[] values = {Double.NaN, Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSqrtNestedFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":-Infinity, \"pos_inf_col\":Infinity}";
String query = String.format("select sqrt(sin(nan_col)) as nan_col, sqrt(sin(inf_col)) as inf_col, sqrt(sin(pos_inf_col)) as pos_inf from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col", "pos_inf"};
Object[] values = {Double.NaN, Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCeilFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select ceil(nan_col) as nan_col, ceil(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testNegativeFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select negative(nan_col) as nan_col, negative(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NEGATIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAbsFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select abs(nan_col) as nan_col, abs(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testFloorFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select floor(nan_col) as nan_col, floor(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testExpFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select exp(nan_col) as nan_col, exp(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCbrtFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select cbrt(nan_col) as nan_col, cbrt(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testModFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select mod(nan_col,1) as nan_col, mod(inf_col,1) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testDegreesFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select degrees(nan_col) as nan_col, degrees(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testTruncFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select trunc(nan_col,3) as nan_col, trunc(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testPowerFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select power(nan_col, 2) as nan_col, power(inf_col, 2) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testRadiansFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select radians(nan_col) as nan_col, radians(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testRoundFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select round(nan_col) as nan_col, round(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {0.0, Double.valueOf(Long.MAX_VALUE)};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCasthighFunction() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select casthigh(nan_col) as nan_col, casthigh(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testCastfloat4Function() throws Exception {
String table_name = "nan_test.json";
String json = "{\"nan_col\":NaN, \"inf_col\":Infinity}";
String query = String.format("select castfloat4(nan_col) as nan_col, castfloat4(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Float.NaN, Float.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testVarpopFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5, \"inf_col\":5}]";
String query = String.format("select var_pop(nan_col) as nan_col, var_pop(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testStddevsampFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5, \"inf_col\":5}]";
String query = String.format("select stddev_samp(nan_col) as nan_col, stddev_samp(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testVarsampFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5, \"inf_col\":5}]";
String query = String.format("select var_samp(nan_col) as nan_col, var_samp(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testStddevpopFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5, \"inf_col\":5}]";
String query = String.format("select stddev_pop(nan_col) as nan_col, stddev_pop(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.NaN};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testMinFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5.0, \"inf_col\":5.0}]";
String query = String.format("select min(nan_col) as nan_col, min(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {5.0, 5.0};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testMaxFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5.0, \"inf_col\":5.0}]";
String query = String.format("select max(nan_col) as nan_col, max(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testSumFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5.0, \"inf_col\":5.0}]";
String query = String.format("select sum(nan_col) as nan_col, sum(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testAvgFunction() throws Exception {
String table_name = "nan_test.json";
String json = "[{\"nan_col\":NaN, \"inf_col\":Infinity}," +
"{\"nan_col\":5.0, \"inf_col\":5.0}]";
String query = String.format("select avg(nan_col) as nan_col, avg(inf_col) as inf_col from dfs.`%s`", table_name);
String[] columns = {"nan_col", "inf_col"};
Object[] values = {Double.NaN, Double.POSITIVE_INFINITY};
evalTest(table_name, json, query, columns, values);
}
@Test
public void testNanInfLiteralConversion() throws Exception {
String query =
"select " +
" cast('Infinity' as float) float_inf, " +
" cast('-Infinity' as float) float_ninf, " +
" cast('NaN' as float) float_nan, " +
" cast('Infinity' as double) double_inf, " +
" cast('-Infinity' as double) double_ninf, " +
" cast('NaN' as double) double_nan";
String[] columns = {
"float_inf", "float_ninf", "float_nan",
"double_inf", "double_ninf", "double_nan"
};
Object[] values = {
Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NaN,
Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN
};
testBuilder()
.sqlQuery(query)
.ordered()
.baselineColumns(columns)
.baselineValues(values)
.build()
.run();
}
private void evalTest(String table_name, String json, String query, String[] columns, Object[] values) throws Exception {
File file = new File(dirTestWatcher.getRootDir(), table_name);
try {
FileUtils.writeStringToFile(file, json);
test("alter session set `%s` = true", ExecConstants.JSON_READ_NUMBERS_AS_DOUBLE);
testBuilder()
.sqlQuery(query)
.ordered()
.baselineColumns(columns)
.baselineValues(values)
.build()
.run();
} finally {
test("alter session set `%s` = false", ExecConstants.JSON_READ_NUMBERS_AS_DOUBLE);
FileUtils.deleteQuietly(file);
}
}
}