|
5 | 5 | #include <test/unit/math/opencl/util.hpp> |
6 | 6 | #include <vector> |
7 | 7 |
|
8 | | -TEST(ProbDistributionsNormalLccdf, error_checking) { |
9 | | - int N = 3; |
10 | | - |
11 | | - Eigen::VectorXd y(N); |
12 | | - y << 0.3, 0.8, 1.0; |
13 | | - Eigen::VectorXd y_size(N - 1); |
14 | | - y_size << 0.3, 0.8; |
15 | | - Eigen::VectorXd y_value(N); |
16 | | - y_value << 0.3, NAN, 0.5; |
17 | | - |
18 | | - Eigen::VectorXd mu(N); |
19 | | - mu << 0.3, 0.8, 1.0; |
20 | | - Eigen::VectorXd mu_size(N - 1); |
21 | | - mu_size << 0.3, 0.8; |
22 | | - Eigen::VectorXd mu_value(N); |
23 | | - mu_value << 0.3, -INFINITY, 0.5; |
24 | | - |
25 | | - Eigen::VectorXd sigma(N); |
26 | | - sigma << 0.3, 0.8, 1.0; |
27 | | - Eigen::VectorXd sigma_size(N - 1); |
28 | | - sigma_size << 0.3, 0.8; |
29 | | - Eigen::VectorXd sigma_value(N); |
30 | | - sigma_value << 0.3, 0, 0.5; |
31 | | - |
32 | | - stan::math::matrix_cl<double> y_cl(y); |
33 | | - stan::math::matrix_cl<double> y_size_cl(y_size); |
34 | | - stan::math::matrix_cl<double> y_value_cl(y_value); |
35 | | - stan::math::matrix_cl<double> mu_cl(mu); |
36 | | - stan::math::matrix_cl<double> mu_size_cl(mu_size); |
37 | | - stan::math::matrix_cl<double> mu_value_cl(mu_value); |
38 | | - stan::math::matrix_cl<double> sigma_cl(sigma); |
39 | | - stan::math::matrix_cl<double> sigma_size_cl(sigma_size); |
40 | | - stan::math::matrix_cl<double> sigma_value_cl(sigma_value); |
41 | | - |
42 | | - EXPECT_NO_THROW(stan::math::normal_lccdf(y_cl, mu_cl, sigma_cl)); |
43 | | - |
44 | | - EXPECT_THROW(stan::math::normal_lccdf(y_size_cl, mu_cl, sigma_cl), |
45 | | - std::invalid_argument); |
46 | | - EXPECT_THROW(stan::math::normal_lccdf(y_cl, mu_size_cl, sigma_cl), |
47 | | - std::invalid_argument); |
48 | | - EXPECT_THROW(stan::math::normal_lccdf(y_cl, mu_cl, sigma_size_cl), |
49 | | - std::invalid_argument); |
50 | | - |
51 | | - EXPECT_THROW(stan::math::normal_lccdf(y_value_cl, mu_cl, sigma_cl), |
52 | | - std::domain_error); |
53 | | - EXPECT_THROW(stan::math::normal_lccdf(y_cl, mu_value_cl, sigma_cl), |
54 | | - std::domain_error); |
55 | | - EXPECT_THROW(stan::math::normal_lccdf(y_cl, mu_cl, sigma_value_cl), |
56 | | - std::domain_error); |
57 | | -} |
58 | 8 |
|
59 | 9 | auto normal_lccdf_functor |
60 | 10 | = [](const auto& y, const auto& mu, const auto& sigma) { |
61 | 11 | return stan::math::normal_lccdf(y, mu, sigma); |
62 | 12 | }; |
63 | 13 |
|
64 | | -TEST(ProbDistributionsNormalLccdf, opencl_matches_cpu_small) { |
65 | | - int N = 3; |
66 | | - int M = 2; |
67 | 14 |
|
68 | | - Eigen::VectorXd y(N); |
69 | | - y << 0.3, 0.8, 1.0; |
70 | | - Eigen::VectorXd mu(N); |
71 | | - mu << -0.3, -0.8, 1.01; |
72 | | - Eigen::VectorXd sigma(N); |
73 | | - sigma << 0.3, 0.1, 1.0; |
74 | | - |
75 | | - stan::math::test::compare_cpu_opencl_prim_rev(normal_lccdf_functor, y, mu, |
76 | | - sigma); |
77 | | - stan::math::test::compare_cpu_opencl_prim_rev( |
78 | | - normal_lccdf_functor, y.transpose().eval(), mu.transpose().eval(), |
79 | | - sigma.transpose().eval()); |
80 | | -} |
81 | | - |
82 | | -TEST(ProbDistributionsNormalLccdf, opencl_broadcast_y) { |
83 | | - int N = 3; |
84 | | - |
85 | | - double y_scal = 12.3; |
86 | | - Eigen::VectorXd mu(N); |
87 | | - mu << 0.5, 1.2, 1.0; |
88 | | - Eigen::VectorXd sigma(N); |
89 | | - sigma << 0.3, 0.8, 1.0; |
90 | | - |
91 | | - stan::math::test::test_opencl_broadcasting_prim_rev<0>(normal_lccdf_functor, |
92 | | - y_scal, mu, sigma); |
93 | | - stan::math::test::test_opencl_broadcasting_prim_rev<0>( |
94 | | - normal_lccdf_functor, y_scal, mu.transpose().eval(), sigma); |
95 | | -} |
96 | | - |
97 | | -TEST(ProbDistributionsNormalLccdf, opencl_broadcast_mu) { |
98 | | - int N = 3; |
99 | | - |
100 | | - Eigen::VectorXd y(N); |
101 | | - y << 0.3, 0.8, 1.0; |
102 | | - double mu_scal = 12.3; |
103 | | - Eigen::VectorXd sigma(N); |
104 | | - sigma << 0.3, 0.8, 1.0; |
105 | | - |
106 | | - stan::math::test::test_opencl_broadcasting_prim_rev<1>(normal_lccdf_functor, |
107 | | - y, mu_scal, sigma); |
108 | | - stan::math::test::test_opencl_broadcasting_prim_rev<1>( |
109 | | - normal_lccdf_functor, y.transpose().eval(), mu_scal, sigma); |
110 | | -} |
111 | | - |
112 | | -TEST(ProbDistributionsNormalLccdf, opencl_broadcast_sigma) { |
113 | | - int N = 3; |
114 | | - |
115 | | - Eigen::VectorXd y(N); |
116 | | - y << 0.3, 0.8, 1.0; |
117 | | - Eigen::VectorXd mu(N); |
118 | | - mu << 0.3, 0.8, 1.0; |
119 | | - double sigma_scal = 12.3; |
120 | | - |
121 | | - stan::math::test::test_opencl_broadcasting_prim_rev<2>(normal_lccdf_functor, |
122 | | - y, mu, sigma_scal); |
123 | | - stan::math::test::test_opencl_broadcasting_prim_rev<2>( |
124 | | - normal_lccdf_functor, y.transpose().eval(), mu, sigma_scal); |
125 | | -} |
126 | 15 |
|
127 | 16 | TEST(ProbDistributionsNormalLccdf, opencl_matches_cpu_big) { |
128 | 17 | int N = 153; |
129 | 18 |
|
130 | | - Eigen::Matrix<double, Eigen::Dynamic, 1> y |
131 | | - = Eigen::Array<double, Eigen::Dynamic, 1>::Random(N, 1).abs(); |
| 19 | +std::srand(123); |
| 20 | +for (int i = 0; i < 10; ++i) { |
132 | 21 | Eigen::Matrix<double, Eigen::Dynamic, 1> mu |
133 | | - = Eigen::Array<double, Eigen::Dynamic, 1>::Random(N, 1).abs(); |
| 22 | + = Eigen::Array<double, Eigen::Dynamic, 1>::Random(N, 1) + 1.0; |
134 | 23 | Eigen::Matrix<double, Eigen::Dynamic, 1> sigma |
135 | 24 | = Eigen::Array<double, Eigen::Dynamic, 1>::Random(N, 1).abs() + 0.01; |
136 | | - |
| 25 | + Eigen::Matrix<double, Eigen::Dynamic, 1> y = (mu.array() * sigma.array()).matrix(); |
| 26 | + std::cout << "Iter: " << i << " mu, sigma, y" << std::endl; |
| 27 | + for (int j = 0; j < N; j++) { |
| 28 | + std::cout << mu(j) << ", " << sigma(j) << ", " << y(j) << std::endl; |
| 29 | + } |
| 30 | + std::cout << "-----------compare_cpu_opencl_prim_rev" << std::endl; |
137 | 31 | stan::math::test::compare_cpu_opencl_prim_rev(normal_lccdf_functor, y, mu, |
138 | 32 | sigma); |
| 33 | + std::cout << "-----------compare_cpu_opencl_prim_rev transpose" << std::endl; |
139 | 34 | stan::math::test::compare_cpu_opencl_prim_rev( |
140 | 35 | normal_lccdf_functor, y.transpose().eval(), mu.transpose().eval(), |
141 | 36 | sigma.transpose().eval()); |
142 | 37 | } |
| 38 | +} |
143 | 39 | #endif |
0 commit comments