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