bkmgit commented on a change in pull request #11882:
URL: https://github.com/apache/arrow/pull/11882#discussion_r787035464



##########
File path: cpp/src/arrow/compute/kernels/scalar_compare_test.cc
##########
@@ -1865,5 +1867,683 @@ TEST(TestMaxElementWiseMinElementWise, CommonTemporal) {
               ResultWith(ScalarFromJSON(date64(), "86400000")));
 }
 
+template <typename ArrowType>
+static void ValidateBetween(BetweenOptions options, const Datum& val, const 
Datum& lhs,
+                            const Datum& rhs, const Datum& expected) {
+  ASSERT_OK_AND_ASSIGN(Datum result, Between(val, lhs, rhs, options, nullptr));
+  AssertArraysEqual(*expected.make_array(), *result.make_array(),
+                    /*verbose=*/true);
+}
+
+template <typename ArrowType>
+void ValidateBetween(BetweenOptions options, const Datum& val, const Datum& 
lhs,
+                     const Datum& rhs) {
+  CompareOperator lhs_val;
+  CompareOperator val_rhs;
+  BetweenOptions::Inclusive include_endpoints = options.inclusive;
+
+  if (include_endpoints == BetweenOptions::Inclusive::NEITHER) {
+    lhs_val = LESS;
+    val_rhs = LESS;
+  } else if (include_endpoints == BetweenOptions::Inclusive::LEFT) {
+    lhs_val = LESS_EQUAL;
+    val_rhs = LESS;
+  } else if (include_endpoints == BetweenOptions::Inclusive::RIGHT) {
+    lhs_val = LESS;
+    val_rhs = LESS_EQUAL;
+  } else {
+    lhs_val = LESS_EQUAL;
+    val_rhs = LESS_EQUAL;
+  }
+
+  ASSERT_OK_AND_ASSIGN(Datum resultl,
+                       CallFunction(CompareOperatorToFunctionName(lhs_val), 
{lhs, val}));
+  ASSERT_OK_AND_ASSIGN(Datum resultr,
+                       CallFunction(CompareOperatorToFunctionName(val_rhs), 
{val, rhs}));
+  ASSERT_OK_AND_ASSIGN(Datum expected, CallFunction("and", {resultl, 
resultr}));
+
+  ValidateBetween<ArrowType>(options, val, lhs, rhs, expected);
+}
+
+template <typename ArrowType>
+class TestNumericBetweenKernel : public ::testing::Test {};
+
+TYPED_TEST_SUITE(TestNumericBetweenKernel, NumericArrowTypes);
+TYPED_TEST(TestNumericBetweenKernel, SimpleBetweenArrayScalarScalar) {
+  using ScalarType = typename TypeTraits<TypeParam>::ScalarType;
+  using CType = typename TypeTraits<TypeParam>::CType;
+
+  Datum zero(std::make_shared<ScalarType>(CType(0)));
+  Datum four(std::make_shared<ScalarType>(CType(4)));
+  Datum null(std::make_shared<ScalarType>());
+  BetweenOptions InclusiveBoth(BetweenOptions::Inclusive::BOTH);
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"), zero,
+      four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      zero, four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,1,2,2]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[1,1,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,3,4,5]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[1,1,1,1,1,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,1,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null,0,1,1]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
null, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, null,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  BetweenOptions InclusiveLeft(BetweenOptions::Inclusive::LEFT);
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"), zero,
+      four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      zero, four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,1,2,2]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[1,1,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,3,4,5]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[1,1,1,1,0,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,0,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null,0,1,1]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
null, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, null,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  BetweenOptions InclusiveRight(BetweenOptions::Inclusive::RIGHT);
+  ValidateBetween<TypeParam>(
+      InclusiveRight, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"), zero,
+      four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      zero, four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,1,2,2]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,0,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,3,4,5]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,1,1,1,1,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,1,1,1,1,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null,0,1,1]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null,0,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
null, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, null,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  BetweenOptions InclusiveNeither(BetweenOptions::Inclusive::NEITHER);
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"),
+      zero, four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      zero, four, ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,1,2,2]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,0,1,1,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,3,4,5]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,1,1,1,0,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[0,0,1,1,1,0]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null,0,1,1]"), 
zero, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), 
"[null,0,1,1]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
null, four,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[5,4,3,2,1,0]"), 
zero, null,
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[null,null,null,null,null,null]"));
+}
+
+TYPED_TEST(TestNumericBetweenKernel, SimpleBetweenScalarArrayArray) {
+  using ScalarType = typename TypeTraits<TypeParam>::ScalarType;
+  using CType = typename TypeTraits<TypeParam>::CType;
+
+  Datum one(std::make_shared<ScalarType>(CType(1)));
+
+  BetweenOptions InclusiveBoth(BetweenOptions::Inclusive::BOTH);
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, one, 
ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,true,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,true,null,false,false]"));
+  BetweenOptions InclusiveLeft(BetweenOptions::Inclusive::LEFT);
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, one, 
ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,true,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,true,null,false,false]"));
+  BetweenOptions InclusiveRight(BetweenOptions::Inclusive::RIGHT);
+  ValidateBetween<TypeParam>(
+      InclusiveRight, one, 
ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,false,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,false,null,false,false]"));
+  BetweenOptions InclusiveNeither(BetweenOptions::Inclusive::NEITHER);
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, one, 
ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,false,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, one,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,false,null,false,false]"));
+}
+
+TYPED_TEST(TestNumericBetweenKernel, SimpleBetweenArrayArrayArray) {
+  BetweenOptions InclusiveBoth(BetweenOptions::Inclusive::BOTH);
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[1,1,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,true,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveBoth,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,true,null,false,false]"));
+  BetweenOptions InclusiveLeft(BetweenOptions::Inclusive::LEFT);
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[1,1,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,false,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveLeft,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,false,null,false,false]"));
+  BetweenOptions InclusiveRight(BetweenOptions::Inclusive::RIGHT);
+  ValidateBetween<TypeParam>(
+      InclusiveRight, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[1,1,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,true,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveRight,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,true,null,false,false]"));
+  BetweenOptions InclusiveNeither(BetweenOptions::Inclusive::NEITHER);
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither, ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[null]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(), "[null]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[1,1,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,0,1,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[10,10,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[true,true,false,false,false]"));
+  ValidateBetween<TypeParam>(
+      InclusiveNeither,
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,1,2,2,2,2]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), 
"[0,0,1,null,3,3]"),
+      ArrayFromJSON(TypeTraits<TypeParam>::type_singleton(), "[0,10,2,2,5,5]"),
+      ArrayFromJSON(TypeTraits<BooleanType>::type_singleton(),
+                    "[false,true,false,null,false,false]"));
+}

Review comment:
       No, will add the other variants, they were tested in the Python code.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to