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());

Reply via email to