asuhan commented on a change in pull request #11793:
URL: https://github.com/apache/arrow/pull/11793#discussion_r759844871



##########
File path: cpp/src/arrow/compute/kernels/scalar_compare_test.cc
##########
@@ -1310,6 +1348,208 @@ TYPED_TEST(TestVarArgsCompareParametricTemporal, 
MinElementWise) {
                {this->array("[1, null, 3, 4]"), this->array("[2, 2, null, 
2]")});
 }
 
+TYPED_TEST(TestVarArgsCompareBinary, MinElementWise) {
+  this->AssertNullScalar(MinElementWise, {});
+  this->AssertNullScalar(MinElementWise, {this->scalar("null"), 
this->scalar("null")});
+
+  this->Assert(MinElementWise, this->scalar(R"("0")"), 
{this->scalar(R"("0")")});
+  this->Assert(MinElementWise, this->scalar(R"("0")"),
+               {this->scalar(R"("2")"), this->scalar(R"("0")"), 
this->scalar(R"("1")")});
+  this->Assert(MinElementWise, this->scalar(R"("0")"),
+               {this->scalar(R"("2")"), this->scalar(R"("0")"), 
this->scalar(R"("1")"),
+                this->scalar("null")});
+  this->Assert(MinElementWise, this->scalar(R"("1")"),
+               {this->scalar("null"), this->scalar("null"), 
this->scalar(R"("1")"),
+                this->scalar("null")});
+
+  this->Assert(MinElementWise, (this->array("[]")), {this->array("[]")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "3", null])"),
+               {this->array(R"(["1", "2", "3", null])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", "2", "3", "4"])"), 
this->scalar(R"("2")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), 
this->scalar(R"("2")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), 
this->scalar(R"("2")"),
+                this->scalar(R"("4")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), this->scalar("null"),
+                this->scalar(R"("2")")});
+
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array(R"(["2", "2", "2", 
"2"])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array(R"(["2", null, "2", 
"2"])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", null, "3", "4"])"), this->array(R"(["2", "2", "2", 
"2"])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "2", null, "6"])"),
+               {this->array(R"(["1", "2", null, null])"),
+                this->array(R"(["4", null, null, "6"])")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", null, "6"])"),
+               {this->array(R"(["4", null, null, "6"])"),
+                this->array(R"(["1", "2", null, null])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "3", "4"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array("[null, null, null, 
null]")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "3", "4"])"),
+      {this->array("[null, null, null, null]"), this->array(R"(["1", "2", "3", 
"4"])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar(R"("1")"), this->array(R"(["1", "2", "3", 
"4"])")});
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar(R"("1")"), this->array("[null, null, null, 
null]")});
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar("null"), this->array(R"(["1", "1", "1", "1"])")});
+  this->Assert(MinElementWise, this->array("[null, null, null, null]"),
+               {this->scalar("null"), this->array("[null, null, null, 
null]")});
+
+  // Test null handling
+  this->element_wise_aggregate_options_.skip_nulls = false;
+  this->AssertNullScalar(MinElementWise, {this->scalar("null"), 
this->scalar("null")});
+  this->AssertNullScalar(MinElementWise, {this->scalar(R"("0")"), 
this->scalar("null")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", null, "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), 
this->scalar(R"("2")"),
+                this->scalar(R"("4")")});
+  this->Assert(MinElementWise, this->array("[null, null, null, null]"),
+               {this->array(R"(["1", null, "3", "4"])"), this->scalar("null"),
+                this->scalar(R"("2")")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", null, "2", "2"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array(R"(["2", null, "2", 
"2"])")});
+
+  this->Assert(MinElementWise, this->array("[null, null, null, null]"),
+               {this->scalar(R"("1")"), this->array("[null, null, null, 
null]")});
+  this->Assert(MinElementWise, this->array("[null, null, null, null]"),
+               {this->scalar("null"), this->array(R"(["1", "1", "1", "1"])")});
+
+  this->Assert(MinElementWise, this->array(R"([null, null, null, "bb"])"),
+               {this->array(R"([null, "a", "bb", "cccc"])"),
+                this->array(R"(["gg", null, "h", "iii"])"),
+                this->array(R"(["foo", "bar", null, "bb"])")});
+}
+
+TYPED_TEST(TestVarArgsCompareFixedSizeBinary, MinElementWise) {
+  this->AssertNullScalar(MinElementWise, {});
+  this->AssertNullScalar(MinElementWise, {this->scalar("null"), 
this->scalar("null")});
+
+  this->Assert(MinElementWise, this->scalar(R"("0")"), 
{this->scalar(R"("0")")});
+  this->Assert(MinElementWise, this->scalar(R"("0")"),
+               {this->scalar(R"("2")"), this->scalar(R"("0")"), 
this->scalar(R"("1")")});
+  this->Assert(MinElementWise, this->scalar(R"("0")"),
+               {this->scalar(R"("2")"), this->scalar(R"("0")"), 
this->scalar(R"("1")"),
+                this->scalar("null")});
+  this->Assert(MinElementWise, this->scalar(R"("1")"),
+               {this->scalar("null"), this->scalar("null"), 
this->scalar(R"("1")"),
+                this->scalar("null")});
+
+  this->Assert(MinElementWise, (this->array("[]")), {this->array("[]")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "3", null])"),
+               {this->array(R"(["1", "2", "3", null])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", "2", "3", "4"])"), 
this->scalar(R"("2")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), 
this->scalar(R"("2")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), 
this->scalar(R"("2")"),
+                this->scalar(R"("4")")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+               {this->array(R"(["1", null, "3", "4"])"), this->scalar("null"),
+                this->scalar(R"("2")")});
+
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array(R"(["2", "2", "2", 
"2"])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array(R"(["2", null, "2", 
"2"])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "2", "2"])"),
+      {this->array(R"(["1", null, "3", "4"])"), this->array(R"(["2", "2", "2", 
"2"])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "2", null, "6"])"),
+               {this->array(R"(["1", "2", null, null])"),
+                this->array(R"(["4", null, null, "6"])")});
+  this->Assert(MinElementWise, this->array(R"(["1", "2", null, "6"])"),
+               {this->array(R"(["4", null, null, "6"])"),
+                this->array(R"(["1", "2", null, null])")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "3", "4"])"),
+      {this->array(R"(["1", "2", "3", "4"])"), this->array("[null, null, null, 
null]")});
+  this->Assert(
+      MinElementWise, this->array(R"(["1", "2", "3", "4"])"),
+      {this->array("[null, null, null, null]"), this->array(R"(["1", "2", "3", 
"4"])")});
+
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar(R"("1")"), this->array(R"(["1", "2", "3", 
"4"])")});
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar(R"("1")"), this->array("[null, null, null, 
null]")});
+  this->Assert(MinElementWise, this->array(R"(["1", "1", "1", "1"])"),
+               {this->scalar("null"), this->array(R"(["1", "1", "1", "1"])")});
+  this->Assert(MinElementWise, this->array("[null, null, null, null]"),
+               {this->scalar("null"), this->array("[null, null, null, 
null]")});
+
+  this->Assert(MinElementWise,
+               this->array(R"(["abc", "abc", "abc", "abc", "abc"])", 
/*byte_width=*/3),
+               {this->array(R"(["abc", "abc", "abd", null, "abc"])", 
/*byte_width=*/3),
+                this->array(R"(["abc", "abd", "abc", "abc", null])", 
/*byte_width=*/3)});
+  this->Assert(MinElementWise, this->scalar(R"("abc")", /*byte_width=*/3),
+               {this->scalar(R"("abe")", /*byte_width=*/3),
+                this->scalar(R"("abc")", /*byte_width=*/3),
+                this->scalar(R"("abd")", /*byte_width=*/3)});
+
+  this->Assert(MinElementWise,
+               this->array(R"(["abc", "abc", "abc", "abc", "abc"])", 
/*byte_width=*/3),
+               {this->array(R"(["abc", "abc", "abd", null, "abc"])", 
/*byte_width=*/3),
+                this->scalar(R"("abc")", /*byte_width=*/3)});
+  this->Assert(MinElementWise,
+               this->array(R"(["abc", "abc", "abc", "abc", "abc"])", 
/*byte_width=*/3),
+               {this->array(R"(["abc", null, "abd", null, "abc"])", 
/*byte_width=*/3),
+                this->scalar(R"("abc")", /*byte_width=*/3)});
+  this->Assert(MinElementWise,
+               this->array(R"(["abc", "abc", "abc", "abc", "abc"])", 
/*byte_width=*/3),
+               {this->array(R"(["abc", null, "abd", null, "abc"])", 
/*byte_width=*/3),
+                this->scalar(R"("abc")", /*byte_width=*/3),
+                this->scalar(R"("abd")", /*byte_width=*/3)});
+  this->Assert(MinElementWise,
+               this->array(R"(["abc", "abc", "abc", "abc", "abc"])", 
/*byte_width=*/3),
+               {this->array(R"(["abc", null, "abd", null, "abc"])", 
/*byte_width=*/3),
+                this->scalar("null", /*byte_width=*/3),
+                this->scalar(R"("abc")", /*byte_width=*/3)});
+
+  // Test null handling
+  this->element_wise_aggregate_options_.skip_nulls = false;
+  this->AssertNullScalar(MinElementWise, {this->scalar("null"), 
this->scalar("null")});
+  this->AssertNullScalar(MinElementWise, {this->scalar(R"("0")"), 
this->scalar("null")});

Review comment:
       We can't do this for fixed binary size, it expects a string with the 
same length as the byte width of the type or null.




-- 
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