| 26 | namespace arrow::internal { |
| 27 | |
| 28 | TEST(NormalPPF, Basics) { |
| 29 | struct PPFTestCase { |
| 30 | double input; |
| 31 | double expected; |
| 32 | }; |
| 33 | // Test vectors obtained using Scipy's norm.ppf |
| 34 | std::vector<PPFTestCase> cases = { |
| 35 | {0.0, -HUGE_VAL}, |
| 36 | {0.001, -3.090232306167813}, |
| 37 | {0.01, -2.3263478740408408}, |
| 38 | {0.02, -2.053748910631823}, |
| 39 | {0.03, -1.880793608151251}, |
| 40 | {0.04, -1.75068607125217}, |
| 41 | {0.05, -1.6448536269514729}, |
| 42 | {0.06, -1.5547735945968535}, |
| 43 | {0.07, -1.4757910281791706}, |
| 44 | {0.08, -1.4050715603096329}, |
| 45 | {0.09, -1.3407550336902165}, |
| 46 | {0.1, -1.2815515655446004}, |
| 47 | {0.2, -0.8416212335729142}, |
| 48 | {0.3, -0.5244005127080409}, |
| 49 | {0.4, -0.2533471031357997}, |
| 50 | {0.5, 0.0}, |
| 51 | {0.6, 0.2533471031357997}, |
| 52 | {0.7, 0.5244005127080407}, |
| 53 | {0.8, 0.8416212335729143}, |
| 54 | {0.9, 1.2815515655446004}, |
| 55 | {0.91, 1.3407550336902165}, |
| 56 | {0.92, 1.4050715603096329}, |
| 57 | {0.93, 1.475791028179171}, |
| 58 | {0.94, 1.5547735945968535}, |
| 59 | {0.95, 1.6448536269514722}, |
| 60 | {0.96, 1.7506860712521692}, |
| 61 | {0.97, 1.8807936081512509}, |
| 62 | {0.98, 2.0537489106318225}, |
| 63 | {0.99, 2.3263478740408408}, |
| 64 | {0.999, 3.090232306167813}, |
| 65 | {1.0, HUGE_VAL}, |
| 66 | }; |
| 67 | for (auto test_case : cases) { |
| 68 | ARROW_SCOPED_TRACE("p = ", test_case.input); |
| 69 | EXPECT_DOUBLE_EQ(NormalPPF(test_case.input), test_case.expected); |
| 70 | } |
| 71 | // Test vectors from https://doi.org/10.2307/2347330 |
| 72 | cases = { |
| 73 | {0.25, -0.6744897501960817}, |
| 74 | {0.001, -3.090232306167814}, |
| 75 | {1e-20, -9.262340089798408}, |
| 76 | }; |
| 77 | for (auto test_case : cases) { |
| 78 | ARROW_SCOPED_TRACE("p = ", test_case.input); |
| 79 | EXPECT_DOUBLE_EQ(NormalPPF(test_case.input), test_case.expected); |
| 80 | } |
| 81 | } |
| 82 | |
| 83 | TEST(NeumaierSum, Basics) { |
| 84 | ASSERT_EQ(0.0, NeumaierSum(std::vector<double>{})); |
nothing calls this directly
no test coverage detected