@@ -27,31 +27,38 @@ namespace internal {
2727 */
2828template <typename T1 , typename T2 , require_all_stan_scalar_t <T1 , T2 >...>
2929void expect_near_rel_finite (const std::string& msg, const T1 & x1, const T2 & x2,
30- const relative_tolerance tol
31- = relative_tolerance()) {
30+ const relative_tolerance tol = relative_tolerance(),
31+ const char* x1_name = "x1",
32+ const char* x2_name = "x2") {
3233 double tol_val = tol.inexact (x1, x2);
3334 EXPECT_NEAR (x1, x2, tol_val)
34- << " expect_near_rel_finite in: " << msg << std::endl;
35+ << " expect_near_rel_finite in: " << msg << " for " << x1_name << " vs "
36+ << x2_name << std::endl;
3537}
3638
3739template <typename EigMat1, typename EigMat2,
3840 require_all_eigen_t <EigMat1, EigMat2>...>
3941void expect_near_rel_finite (const std::string& msg, const EigMat1& x1,
40- const EigMat2& x2) {
42+ const EigMat2& x2, const char * x1_name = " x1" ,
43+ const char * x2_name = " x2" ) {
4144 EXPECT_EQ (x1.rows (), x2.rows ());
4245 EXPECT_EQ (x1.cols (), x2.cols ());
4346 auto x1_eval = x1.eval ();
4447 auto x2_eval = x2.eval ();
45- for (int i = 0 ; i < x1.size (); ++i)
46- expect_near_rel_finite (msg, x1_eval (i), x2_eval (i));
48+ for (int i = 0 ; i < x1.size (); ++i) {
49+ expect_near_rel_finite (msg, x1_eval (i), x2_eval (i), x1_name, x2_name);
50+ }
4751}
4852
4953template <typename T1 , typename T2 >
5054void expect_near_rel_finite (const std::string& msg, const std::vector<T1 >& x1,
51- const std::vector<T2 >& x2) {
55+ const std::vector<T2 >& x2,
56+ const char * x1_name = " x1" ,
57+ const char * x2_name = " x2" ) {
5258 EXPECT_EQ (x1.size (), x2.size ());
53- for (size_t i = 0 ; i < x1.size (); ++i)
54- expect_near_rel_finite (x1[i], x2[i]);
59+ for (size_t i = 0 ; i < x1.size (); ++i) {
60+ expect_near_rel_finite (x1[i], x2[i], x1_name, x2_name);
61+ }
5562}
5663
5764} // namespace internal
@@ -72,17 +79,20 @@ void expect_near_rel_finite(const std::string& msg, const std::vector<T1>& x1,
7279 */
7380template <typename T1 , typename T2 , require_all_stan_scalar_t <T1 , T2 >...>
7481void expect_near_rel (const std::string& msg, const T1 & x1, const T2 & x2,
75- relative_tolerance tol = relative_tolerance()) {
76- if (stan::math::is_nan (x1) || stan::math::is_nan (x2))
82+ relative_tolerance tol = relative_tolerance(),
83+ const char* x1_name = "x1", const char* x2_name = "x2") {
84+ if (stan::math::is_nan (x1) || stan::math::is_nan (x2)) {
7785 EXPECT_TRUE (stan::math::is_nan (x1) && stan::math::is_nan (x2))
7886 << " expect_near_rel(" << x1 << " , " << x2 << " )" << std::endl
79- << msg << std::endl;
80- else if (stan::math::is_inf (x1) || stan::math::is_inf (x2))
87+ << msg << " for " << x1_name << " vs " << x2_name << std::endl;
88+ } else if (stan::math::is_inf (x1) || stan::math::is_inf (x2)) {
8189 EXPECT_EQ (x1, x2) << " expect_near_rel(" << x1 << " , " << x2 << " )"
8290 << std::endl
83- << msg << std::endl;
84- else
85- internal::expect_near_rel_finite (msg, x1, x2, tol);
91+ << msg << " for " << x1_name << " vs " << x2_name
92+ << std::endl;
93+ } else {
94+ internal::expect_near_rel_finite (msg, x1, x2, tol, x1_name, x2_name);
95+ }
8696}
8797
8898/* *
@@ -103,17 +113,18 @@ void expect_near_rel(const std::string& msg, const T1& x1, const T2& x2,
103113template <typename EigMat1, typename EigMat2,
104114 require_all_eigen_t <EigMat1, EigMat2>...>
105115void expect_near_rel (const std::string& msg, EigMat1&& x1, EigMat2&& x2,
106- relative_tolerance tol = relative_tolerance()) {
107- EXPECT_EQ (x1.rows (), x2.rows ()) << " expect_near_rel (Eigen::Matrix)"
108- << " rows must be same size."
109- << " x1.rows() = " << x1.rows ()
110- << " ; x2.rows() = " << x2.rows () << std::endl
111- << msg << std::endl;
116+ relative_tolerance tol = relative_tolerance(),
117+ const char* x1_name = "x1", const char* x2_name = "x2") {
118+ EXPECT_EQ (x1.rows (), x2.rows ())
119+ << " expect_near_rel (Eigen::Matrix)"
120+ << " rows must be same size." << x1_name << " .rows() = " << x1.rows ()
121+ << " ; " << x2_name << " .rows() = " << x2.rows () << std::endl
122+ << msg << std::endl;
123+
112124 EXPECT_EQ (x1.cols (), x2.cols ())
113125 << " expect_near_rel:"
114- << " cols must be same size."
115- << " x1.cols() = " << x1.cols () << " x2.cols() = " << x2.cols () << " )"
116- << std::endl
126+ << " cols must be same size." << x1_name << " .cols() = " << x1.cols ()
127+ << " ; " << x2_name << " .cols() = " << x2.cols () << std::endl
117128 << msg << std::endl;
118129 auto x1_eval = x1.eval ();
119130 auto x2_eval = x2.eval ();
@@ -128,7 +139,8 @@ void expect_near_rel(const std::string& msg, EigMat1&& x1, EigMat2&& x2,
128139 msg2 += std::to_string (i) + " , " + std::to_string (j) + " ) = x2("
129140 + std::to_string (i) + " , " + std::to_string (j) + " ): " + msg;
130141 }
131- expect_near_rel (msg2, x1_eval (sentinal_val), x2_eval (sentinal_val), tol);
142+ expect_near_rel (msg2, x1_eval (sentinal_val), x2_eval (sentinal_val), tol,
143+ x1_name, x2_name);
132144 sentinal_val++;
133145 }
134146 }
@@ -156,15 +168,17 @@ void expect_near_rel(const std::string& msg, EigMat1&& x1, EigMat2&& x2,
156168template <typename T1 , typename T2 >
157169void expect_near_rel (const std::string& msg, const std::vector<T1 >& x1,
158170 const std::vector<T2 >& x2,
159- relative_tolerance tol = relative_tolerance()) {
160- EXPECT_EQ (x1.size (), x2.size ()) << " expect_near_rel (std::vector):"
161- << " vectors must be same size."
162- << " x1.size() = " << x1.size ()
163- << " ; x2.size() = " << x2.size () << std::endl
164- << msg << std::endl;
165- std::string msg2 = " expect_near_rel; requite items x1[i] = x2[i]: " + msg;
171+ relative_tolerance tol = relative_tolerance(),
172+ const char* x1_name = "x1", const char* x2_name = "x2") {
173+ EXPECT_EQ (x1.size (), x2.size ())
174+ << " expect_near_rel (std::vector):"
175+ << " vectors must be same size. " << x1_name << " .size() = " << x1.size ()
176+ << " ; " << x2_name << " .size() = " << x2.size () << std::endl
177+ << msg << std::endl;
178+ std::string msg2 = std::string (" expect_near_rel; require items " ) + " x1[i] = "
179+ + " x2[i]: " + msg + " for " + x1_name + " vs " + x2_name;
166180 for (size_t i = 0 ; i < x1.size (); ++i)
167- expect_near_rel (msg2, x1[i], x2[i], tol);
181+ expect_near_rel (msg2, x1[i], x2[i], tol, x1_name, x2_name );
168182}
169183
170184/* *
@@ -182,9 +196,10 @@ void expect_near_rel(const std::string& msg, const std::vector<T1>& x1,
182196template <typename T1 , typename T2 >
183197void expect_near_rel (const std::string& msg, const std::complex <T1 >& z1,
184198 const std::complex <T2 >& z2,
185- relative_tolerance tol = relative_tolerance()) {
186- expect_near_rel (msg, z1.real (), z2.real (), tol);
187- expect_near_rel (msg, z1.imag (), z2.imag (), tol);
199+ relative_tolerance tol = relative_tolerance(),
200+ const char* x1_name = "x1", const char* x2_name = "x2") {
201+ expect_near_rel (msg, z1.real (), z2.real (), tol, x1_name, x2_name);
202+ expect_near_rel (msg, z1.imag (), z2.imag (), tol, x1_name, x2_name);
188203}
189204
190205/* *
@@ -203,9 +218,10 @@ void expect_near_rel(const std::string& msg, const std::complex<T1>& z1,
203218template <typename T1 , typename T2 >
204219void expect_near_rel (const std::string& msg, const T1 & x1,
205220 const std::complex <T2 >& z2,
206- relative_tolerance tol = relative_tolerance()) {
207- expect_near_rel (msg, x1, z2.real (), tol);
208- expect_near_rel (msg, 0 , z2.imag (), tol);
221+ relative_tolerance tol = relative_tolerance(),
222+ const char* x1_name = "x1", const char* x2_name = "x2") {
223+ expect_near_rel (msg, x1, z2.real (), tol, x1_name, x2_name);
224+ expect_near_rel (msg, 0 , z2.imag (), tol, x1_name, x2_name);
209225}
210226
211227/* *
@@ -224,9 +240,10 @@ void expect_near_rel(const std::string& msg, const T1& x1,
224240template <typename T1 , typename T2 >
225241void expect_near_rel (const std::string& msg, const std::complex <T1 >& z1,
226242 const T2 & x2,
227- relative_tolerance tol = relative_tolerance()) {
228- expect_near_rel (msg, z1.real (), x2, tol);
229- expect_near_rel (msg, z1.imag (), 0 , tol);
243+ relative_tolerance tol = relative_tolerance(),
244+ const char* x1_name = "x1", const char* x2_name = "x2") {
245+ expect_near_rel (msg, z1.real (), x2, tol, x1_name, x2_name);
246+ expect_near_rel (msg, z1.imag (), 0 , tol, x1_name, x2_name);
230247}
231248
232249} // namespace test
0 commit comments