@@ -2205,7 +2205,7 @@ TEST_F(TestNestedSortIndices, SortRecordBatch) { TestSort(GetRecordBatch()); }
22052205TEST_F (TestNestedSortIndices, SortTable) { TestSort (GetTable ()); }
22062206
22072207// ----------------------------------------------------------------------
2208- // Tests for Rank and Quantile Rank
2208+ // Tests for Rank, Quantile Rank and Normal Rank
22092209
22102210class BaseTestRank : public ::testing::Test {
22112211 protected:
@@ -2471,43 +2471,84 @@ TEST_F(TestRank, EmptyChunks) {
24712471
24722472class TestRankQuantile : public BaseTestRank {
24732473 public:
2474- void AssertRankQuantile (const DatumVector& datums, SortOrder order,
2475- NullPlacement null_placement,
2476- const std::shared_ptr<Array>& expected) {
2474+ void AssertRankQuantileGeneric (const std::string& function_name,
2475+ const DatumVector& datums, SortOrder order,
2476+ NullPlacement null_placement,
2477+ const std::shared_ptr<Array>& expected) {
2478+ ARROW_SCOPED_TRACE (" function = " , function_name);
24772479 const std::vector<SortKey> sort_keys{SortKey (" foo" , order)};
24782480 RankQuantileOptions options (sort_keys, null_placement);
24792481 ARROW_SCOPED_TRACE (" options = " , options.ToString ());
24802482 for (const auto & datum : datums) {
2481- ASSERT_OK_AND_ASSIGN (auto actual, CallFunction (" rank_quantile " , {datum}, &options));
2483+ ASSERT_OK_AND_ASSIGN (auto actual, CallFunction (function_name , {datum}, &options));
24822484 ValidateOutput (actual);
2483- AssertDatumsEqual (expected, actual, /* verbose=*/ true );
2485+ if (function_name == " rank_normal" ) {
2486+ // Normal PPF results can only be approximate
2487+ auto equal_options = EqualOptions ().atol (1e-8 );
2488+ AssertDatumsApproxEqual (expected, actual, /* verbose=*/ true , equal_options);
2489+ } else {
2490+ AssertDatumsEqual (expected, actual, /* verbose=*/ true );
2491+ }
24842492 }
24852493 }
24862494
2487- void AssertRankQuantile (const DatumVector& datums, SortOrder order,
2488- NullPlacement null_placement, const std::string& expected) {
2489- AssertRankQuantile (datums, order, null_placement, ArrayFromJSON (float64 (), expected));
2495+ void AssertRankQuantileGeneric (const std::string& function_name, const Datum& datum,
2496+ SortOrder order, NullPlacement null_placement,
2497+ const std::shared_ptr<Array>& expected) {
2498+ AssertRankQuantileGeneric (function_name, DatumVector{datum}, order, null_placement,
2499+ expected);
24902500 }
24912501
2492- void AssertRankQuantile (SortOrder order, NullPlacement null_placement,
2493- const std::shared_ptr<Array>& expected) {
2494- AssertRankQuantile (datums_, order, null_placement, expected);
2502+ void AssertRankQuantileGeneric (const std::string& function_name,
2503+ const DatumVector& datums, SortOrder order,
2504+ NullPlacement null_placement,
2505+ const std::string& expected) {
2506+ AssertRankQuantileGeneric (function_name, datums, order, null_placement,
2507+ ArrayFromJSON (float64 (), expected));
24952508 }
24962509
2497- void AssertRankQuantile (SortOrder order, NullPlacement null_placement,
2498- const std::string& expected) {
2499- AssertRankQuantile (datums_, order, null_placement,
2500- ArrayFromJSON (float64 (), expected));
2510+ void AssertRankQuantileGeneric (const std::string& function_name, const Datum& datum,
2511+ SortOrder order, NullPlacement null_placement,
2512+ const std::string& expected) {
2513+ AssertRankQuantileGeneric (function_name, DatumVector{datum}, order, null_placement,
2514+ ArrayFromJSON (float64 (), expected));
2515+ }
2516+
2517+ void AssertRankQuantileGeneric (const std::string& function_name, SortOrder order,
2518+ NullPlacement null_placement,
2519+ const std::shared_ptr<Array>& expected) {
2520+ AssertRankQuantileGeneric (function_name, datums_, order, null_placement, expected);
2521+ }
2522+
2523+ void AssertRankQuantileGeneric (const std::string& function_name, SortOrder order,
2524+ NullPlacement null_placement,
2525+ const std::string& expected) {
2526+ AssertRankQuantileGeneric (function_name, datums_, order, null_placement,
2527+ ArrayFromJSON (float64 (), expected));
2528+ }
2529+
2530+ template <typename ... Args>
2531+ void AssertRankQuantile (Args&&... args) {
2532+ AssertRankQuantileGeneric (" rank_quantile" , std::forward<Args>(args)...);
2533+ }
2534+
2535+ template <typename ... Args>
2536+ void AssertRankNormal (Args&&... args) {
2537+ AssertRankQuantileGeneric (" rank_normal" , std::forward<Args>(args)...);
25012538 }
25022539
25032540 void AssertRankQuantileEmpty (std::shared_ptr<DataType> type) {
25042541 for (auto null_placement : AllNullPlacements ()) {
25052542 for (auto order : AllOrders ()) {
2506- AssertRankQuantile ({ArrayFromJSON (type, " []" )}, order, null_placement, " []" );
2507- AssertRankQuantile ({ArrayFromJSON (type, " [null]" )}, order, null_placement,
2508- " [0.5]" );
2509- AssertRankQuantile ({ArrayFromJSON (type, " [null, null, null]" )}, order,
2543+ AssertRankQuantile (ArrayFromJSON (type, " []" ), order, null_placement, " []" );
2544+ AssertRankQuantile (ArrayFromJSON (type, " [null]" ), order, null_placement, " [0.5]" );
2545+ AssertRankQuantile (ArrayFromJSON (type, " [null, null, null]" ), order,
25102546 null_placement, " [0.5, 0.5, 0.5]" );
2547+
2548+ AssertRankNormal (ArrayFromJSON (type, " []" ), order, null_placement, " []" );
2549+ AssertRankNormal (ArrayFromJSON (type, " [null]" ), order, null_placement, " [0.0]" );
2550+ AssertRankNormal (ArrayFromJSON (type, " [null, null, null]" ), order, null_placement,
2551+ " [0.0, 0.0, 0.0]" );
25112552 }
25122553 }
25132554 }
@@ -2519,6 +2560,12 @@ class TestRankQuantile : public BaseTestRank {
25192560 " [0.3, 0.8, 0.3, 0.8, 0.3]" );
25202561 AssertRankQuantile (SortOrder::Descending, null_placement,
25212562 " [0.7, 0.2, 0.7, 0.2, 0.7]" );
2563+ AssertRankNormal (SortOrder::Ascending, null_placement,
2564+ " [-0.5244005127080409, 0.8416212335729143, -0.5244005127080409, "
2565+ " 0.8416212335729143, -0.5244005127080409]" );
2566+ AssertRankNormal (SortOrder::Descending, null_placement,
2567+ " [0.5244005127080407, -0.8416212335729142, 0.5244005127080407, "
2568+ " -0.8416212335729142, 0.5244005127080407]" );
25222569 }
25232570 }
25242571
@@ -2532,6 +2579,19 @@ class TestRankQuantile : public BaseTestRank {
25322579 " [0.3, 0.9, 0.3, 0.7, 0.3]" );
25332580 AssertRankQuantile (SortOrder::Descending, NullPlacement::AtEnd,
25342581 " [0.7, 0.3, 0.7, 0.1, 0.7]" );
2582+
2583+ AssertRankNormal (SortOrder::Ascending, NullPlacement::AtStart,
2584+ " [-0.5244005127080409, 0.5244005127080407, -0.5244005127080409, "
2585+ " 1.2815515655446004, -0.5244005127080409]" );
2586+ AssertRankNormal (SortOrder::Ascending, NullPlacement::AtEnd,
2587+ " [0.5244005127080407, -1.2815515655446004, 0.5244005127080407, "
2588+ " -0.5244005127080409, 0.5244005127080407]" );
2589+ AssertRankNormal (SortOrder::Descending, NullPlacement::AtStart,
2590+ " [-0.5244005127080409, 1.2815515655446004, -0.5244005127080409, "
2591+ " 0.5244005127080407, -0.5244005127080409]" );
2592+ AssertRankNormal (SortOrder::Descending, NullPlacement::AtEnd,
2593+ " [0.5244005127080407, -0.5244005127080409, 0.5244005127080407, "
2594+ " -1.2815515655446004, 0.5244005127080407]" );
25352595 }
25362596
25372597 void AssertRankQuantileNumeric (std::shared_ptr<DataType> type) {
@@ -2545,6 +2605,17 @@ class TestRankQuantile : public BaseTestRank {
25452605 " [0.95, 0.8, 0.8, 0.6, 0.6, 0.35, 0.35, 0.35, 0.15, 0.05]" );
25462606 AssertRankQuantile (SortOrder::Descending, null_placement,
25472607 " [0.05, 0.2, 0.2, 0.4, 0.4, 0.65, 0.65, 0.65, 0.85, 0.95]" );
2608+
2609+ AssertRankNormal (SortOrder::Ascending, null_placement,
2610+ " [1.6448536269514722, 0.8416212335729143, 0.8416212335729143, "
2611+ " 0.2533471031357997, 0.2533471031357997, -0.38532046640756773, "
2612+ " -0.38532046640756773, -0.38532046640756773, -1.0364333894937898, "
2613+ " -1.6448536269514729]" );
2614+ AssertRankNormal (SortOrder::Descending, null_placement,
2615+ " [-1.6448536269514729, -0.8416212335729142, -0.8416212335729142, "
2616+ " -0.2533471031357997, -0.2533471031357997, 0.38532046640756773, "
2617+ " 0.38532046640756773, 0.38532046640756773, 1.0364333894937898, "
2618+ " 1.6448536269514722]" );
25482619 }
25492620
25502621 // With nulls
0 commit comments