@@ -27,31 +27,38 @@ namespace internal {
27
27
*/
28
28
template <typename T1, typename T2, require_all_stan_scalar_t <T1, T2>...>
29
29
void 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") {
32
33
double tol_val = tol.inexact (x1, x2);
33
34
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;
35
37
}
36
38
37
39
template <typename EigMat1, typename EigMat2,
38
40
require_all_eigen_t <EigMat1, EigMat2>...>
39
41
void 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" ) {
41
44
EXPECT_EQ (x1.rows (), x2.rows ());
42
45
EXPECT_EQ (x1.cols (), x2.cols ());
43
46
auto x1_eval = x1.eval ();
44
47
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
+ }
47
51
}
48
52
49
53
template <typename T1, typename T2>
50
54
void 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" ) {
52
58
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
+ }
55
62
}
56
63
57
64
} // namespace internal
@@ -72,17 +79,20 @@ void expect_near_rel_finite(const std::string& msg, const std::vector<T1>& x1,
72
79
*/
73
80
template <typename T1, typename T2, require_all_stan_scalar_t <T1, T2>...>
74
81
void 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)) {
77
85
EXPECT_TRUE (stan::math::is_nan (x1) && stan::math::is_nan (x2))
78
86
<< " 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)) {
81
89
EXPECT_EQ (x1, x2) << " expect_near_rel(" << x1 << " , " << x2 << " )"
82
90
<< 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
+ }
86
96
}
87
97
88
98
/* *
@@ -103,17 +113,18 @@ void expect_near_rel(const std::string& msg, const T1& x1, const T2& x2,
103
113
template <typename EigMat1, typename EigMat2,
104
114
require_all_eigen_t <EigMat1, EigMat2>...>
105
115
void 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
+
112
124
EXPECT_EQ (x1.cols (), x2.cols ())
113
125
<< " 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
117
128
<< msg << std::endl;
118
129
auto x1_eval = x1.eval ();
119
130
auto x2_eval = x2.eval ();
@@ -128,7 +139,8 @@ void expect_near_rel(const std::string& msg, EigMat1&& x1, EigMat2&& x2,
128
139
msg2 += std::to_string (i) + " , " + std::to_string (j) + " ) = x2("
129
140
+ std::to_string (i) + " , " + std::to_string (j) + " ): " + msg;
130
141
}
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);
132
144
sentinal_val++;
133
145
}
134
146
}
@@ -156,15 +168,17 @@ void expect_near_rel(const std::string& msg, EigMat1&& x1, EigMat2&& x2,
156
168
template <typename T1, typename T2>
157
169
void expect_near_rel (const std::string& msg, const std::vector<T1>& x1,
158
170
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;
166
180
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 );
168
182
}
169
183
170
184
/* *
@@ -182,9 +196,10 @@ void expect_near_rel(const std::string& msg, const std::vector<T1>& x1,
182
196
template <typename T1, typename T2>
183
197
void expect_near_rel (const std::string& msg, const std::complex<T1>& z1,
184
198
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);
188
203
}
189
204
190
205
/* *
@@ -203,9 +218,10 @@ void expect_near_rel(const std::string& msg, const std::complex<T1>& z1,
203
218
template <typename T1, typename T2>
204
219
void expect_near_rel (const std::string& msg, const T1& x1,
205
220
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);
209
225
}
210
226
211
227
/* *
@@ -224,9 +240,10 @@ void expect_near_rel(const std::string& msg, const T1& x1,
224
240
template <typename T1, typename T2>
225
241
void expect_near_rel (const std::string& msg, const std::complex<T1>& z1,
226
242
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);
230
247
}
231
248
232
249
} // namespace test
0 commit comments