diff --git a/cpp/src/arrow/compute/kernels/vector_rank.cc b/cpp/src/arrow/compute/kernels/vector_rank.cc index 81b7640b0fe..1338ebedbe9 100644 --- a/cpp/src/arrow/compute/kernels/vector_rank.cc +++ b/cpp/src/arrow/compute/kernels/vector_rank.cc @@ -381,9 +381,13 @@ class RankMetaFunction : public RankMetaFunctionBase { } RankMetaFunction() - : RankMetaFunctionBase("rank", Arity::Unary(), rank_doc, &kDefaultOptions) {} + : RankMetaFunctionBase("rank", Arity::Unary(), rank_doc, GetDefaultOptions()) {} - static inline const auto kDefaultOptions = RankOptions::Defaults(); + private: + static const RankOptions* GetDefaultOptions() { + static const auto kDefaultOptions = RankOptions::Defaults(); + return &kDefaultOptions; + } }; class RankQuantileMetaFunction : public RankMetaFunctionBase { @@ -398,9 +402,13 @@ class RankQuantileMetaFunction : public RankMetaFunctionBase { @@ -415,9 +423,13 @@ class RankNormalMetaFunction : public RankMetaFunctionBaseGetFunction("rank")); + ASSERT_STREQ(function->default_options()->type_name(), "RankOptions"); +} + TEST_F(TestRank, Real) { for (auto real_type : ::arrow::FloatingPointTypes()) { SetInput(ArrayFromJSON(real_type, "[2.1, 3.2, 1.0, 0.0, 5.5]")); @@ -2635,6 +2641,12 @@ class TestRankQuantile : public BaseTestRank { } }; +TEST_F(TestRankQuantile, DefaultOptions) { + ASSERT_OK_AND_ASSIGN(auto function, + GetFunctionRegistry()->GetFunction("rank_quantile")); + ASSERT_STREQ(function->default_options()->type_name(), "RankQuantileOptions"); +} + TEST_F(TestRankQuantile, Real) { for (auto type : ::arrow::FloatingPointTypes()) { AssertRankQuantileNumeric(type); @@ -2675,5 +2687,12 @@ TEST_F(TestRankQuantile, FixedSizeBinary) { AssertRankQuantile_N1N2N(); } +class TestRankNormal : public BaseTestRank {}; + +TEST_F(TestRankNormal, DefaultOptions) { + ASSERT_OK_AND_ASSIGN(auto function, GetFunctionRegistry()->GetFunction("rank_normal")); + ASSERT_STREQ(function->default_options()->type_name(), "RankQuantileOptions"); +} + } // namespace compute } // namespace arrow