This is an automated email from the ASF dual-hosted git repository. wesm pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/arrow.git
commit 17ebd46bd03386aaa1ca1d2b76816d29a6467ff2 Author: Pindikura Ravindra <[email protected]> AuthorDate: Fri Sep 21 11:24:38 2018 +0530 [Gandiva] fix a bug caused due to fake cache hits - for doubles/floats, print in hex to avoid loss of precision --- cpp/src/gandiva/tests/projector_test.cc | 44 +++++++++++++++++++++++++++++++++ cpp/src/gandiva/tests/to_string_test.cc | 3 ++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/cpp/src/gandiva/tests/projector_test.cc b/cpp/src/gandiva/tests/projector_test.cc index 5a676b2..743bab2 100644 --- a/cpp/src/gandiva/tests/projector_test.cc +++ b/cpp/src/gandiva/tests/projector_test.cc @@ -77,6 +77,50 @@ TEST_F(TestProjector, TestProjectCache) { EXPECT_TRUE(cached_projector.get() != should_be_new_projector1.get()); } +TEST_F(TestProjector, TestProjectCacheDouble) { + auto schema = arrow::schema({}); + auto res = field("result", arrow::float64()); + + double d0 = 1.23456788912345677E18; + double d1 = 1.23456789012345677E18; + + auto literal0 = TreeExprBuilder::MakeLiteral(d0); + auto expr0 = TreeExprBuilder::MakeExpression(literal0, res); + std::shared_ptr<Projector> projector0; + auto status = Projector::Make(schema, {expr0}, &projector0); + EXPECT_TRUE(status.ok()) << status.message(); + + auto literal1 = TreeExprBuilder::MakeLiteral(d1); + auto expr1 = TreeExprBuilder::MakeExpression(literal1, res); + std::shared_ptr<Projector> projector1; + status = Projector::Make(schema, {expr1}, &projector1); + EXPECT_TRUE(status.ok()) << status.message(); + + EXPECT_TRUE(projector0.get() != projector1.get()); +} + +TEST_F(TestProjector, TestProjectCacheFloat) { + auto schema = arrow::schema({}); + auto res = field("result", arrow::float32()); + + float f0 = 12345678891.000000; + float f1 = f0 - 1000; + + auto literal0 = TreeExprBuilder::MakeLiteral(f0); + auto expr0 = TreeExprBuilder::MakeExpression(literal0, res); + std::shared_ptr<Projector> projector0; + auto status = Projector::Make(schema, {expr0}, &projector0); + EXPECT_TRUE(status.ok()) << status.message(); + + auto literal1 = TreeExprBuilder::MakeLiteral(f1); + auto expr1 = TreeExprBuilder::MakeExpression(literal1, res); + std::shared_ptr<Projector> projector1; + status = Projector::Make(schema, {expr1}, &projector1); + EXPECT_TRUE(status.ok()) << status.message(); + + EXPECT_TRUE(projector0.get() != projector1.get()); +} + TEST_F(TestProjector, TestIntSumSub) { // schema for input fields auto field0 = field("f0", int32()); diff --git a/cpp/src/gandiva/tests/to_string_test.cc b/cpp/src/gandiva/tests/to_string_test.cc index ebd4a98..38c2783 100644 --- a/cpp/src/gandiva/tests/to_string_test.cc +++ b/cpp/src/gandiva/tests/to_string_test.cc @@ -68,7 +68,8 @@ TEST_F(TestToString, TestAll) { auto if_node = TreeExprBuilder::MakeIf(cond_node, then_node, else_node, int64()); auto if_expr = TreeExprBuilder::MakeExpression(if_node, f1); CHECK_EXPR_TO_STRING( - if_expr, "if (bool lesser_than(double, (float) 0)) { int64 } else { int64 }"); + if_expr, + "if (bool lesser_than(double, (float) 0 raw(0))) { int64 } else { int64 }"); auto f1_gt_100 = TreeExprBuilder::MakeFunction("greater_than", {f1_node, literal_node}, boolean());
