diff -Naur /old/libs/numeric/ublas/test/utils.hpp /new/libs/numeric/ublas/test/utils.hpp
old
|
new
|
|
56 | 56 | #include <boost/numeric/ublas/traits.hpp> |
57 | 57 | #include <cmath> |
58 | 58 | #include <complex> |
| 59 | #include <cstddef> |
59 | 60 | #include <iostream> |
60 | 61 | #include <limits> |
61 | 62 | #include <stdexcept> |
… |
… |
|
143 | 144 | }}}}}} // Namespace boost::numeric::ublas::test::detail::<unnamed> |
144 | 145 | |
145 | 146 | |
146 | | /// Expand its argument. |
| 147 | /// Expand its argument \a x. |
147 | 148 | #define BOOST_UBLAS_TEST_EXPAND_(x) x |
148 | 149 | |
149 | 150 | |
150 | | /// Transform its argument into a string. |
| 151 | /// Expand its argument \a x inside parenthesis. |
| 152 | #define BOOST_UBLAS_TEST_EXPANDP_(x) (x) |
| 153 | |
| 154 | |
| 155 | /// Transform its argument \a x into a string. |
151 | 156 | #define BOOST_UBLAS_TEST_STRINGIFY_(x) #x |
152 | 157 | |
153 | 158 | |
154 | | /// Concatenate its two \e string arguments. |
| 159 | /// Concatenate its two \e string arguments \a x and \a y. |
155 | 160 | #define BOOST_UBLAS_TEST_JOIN_(x,y) x ## y |
156 | 161 | |
157 | 162 | |
158 | 163 | /// Output the message \a x if in debug-mode; otherwise output nothing. |
| 164 | /// Note: we don't use macro expansion inside parenthesis to let \a m be an |
| 165 | /// expression of the form <code>a << b</code>. |
159 | 166 | #ifndef NDEBUG |
160 | 167 | # define BOOST_UBLAS_DEBUG_TRACE(x) ::std::cerr << "[Debug>> " << BOOST_UBLAS_TEST_EXPAND_(x) << ::std::endl |
161 | 168 | #else |
… |
… |
|
163 | 170 | #endif // NDEBUG |
164 | 171 | |
165 | 172 | |
166 | | /// Define the name of the entire test suite. |
167 | | #define BOOST_UBLAS_TEST_SUITE(m) ::std::cerr << "--- Test Suite: " << m << " ---" << ::std::endl; |
| 173 | /// Define the name \a m of the entire test suite. |
| 174 | #define BOOST_UBLAS_TEST_SUITE(m) ::std::cerr << "--- Test Suite: " << BOOST_UBLAS_TEST_EXPAND_(m) << " ---" << ::std::endl; |
168 | 175 | |
169 | 176 | |
170 | 177 | /// Define the beginning of a test suite. |
171 | 178 | #define BOOST_UBLAS_TEST_BEGIN() /* [BOOST_UBLAS_TEST_BEGIN] */ \ |
172 | 179 | { \ |
173 | 180 | /* Begin of Test Suite */ \ |
174 | | unsigned int test_fails__(0) \ |
| 181 | ::std::size_t test_fails__(0) \ |
175 | 182 | /* [/BOOST_UBLAS_TEST_BEGIN] */ |
176 | 183 | |
177 | 184 | |
178 | 185 | /// Define a test case \a x inside the current test suite. |
179 | | #define BOOST_UBLAS_TEST_DEF(x) static void BOOST_UBLAS_TEST_EXPAND_(x)(unsigned int& test_fails__) |
| 186 | #define BOOST_UBLAS_TEST_DEF(x) static void BOOST_UBLAS_TEST_EXPAND_(x)(::std::size_t& test_fails__) |
180 | 187 | |
181 | 188 | |
182 | 189 | /// Call the test case \a x. |
… |
… |
|
212 | 219 | |
213 | 220 | |
214 | 221 | /// Output the message \a m. |
| 222 | /// Note: we don't use macro expansion inside parenthesis to let \a m be an |
| 223 | /// expression of the form <code>a << b</code>. |
215 | 224 | #define BOOST_UBLAS_TEST_TRACE(m) ::std::cerr << "[Info>> " << BOOST_UBLAS_TEST_EXPAND_(m) << ::std::endl |
216 | 225 | |
217 | 226 | |
218 | 227 | /// Check the truth of assertion \a x. |
219 | 228 | #define BOOST_UBLAS_TEST_CHECK(x) /* [BOOST_UBLAS_TEST_CHECK] */ \ |
220 | | if (!(x)) \ |
| 229 | if (!BOOST_UBLAS_TEST_EXPANDP_(x)) \ |
221 | 230 | { \ |
222 | 231 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: " << BOOST_UBLAS_TEST_STRINGIFY_(x) ); \ |
223 | 232 | ++test_fails__; \ |
… |
… |
|
227 | 236 | |
228 | 237 | /// Check for the equality of \a x against \a y. |
229 | 238 | #define BOOST_UBLAS_TEST_CHECK_EQ(x,y) /* [BOOST_UBLAS_TEST_CHECK_EQUAL] */ \ |
230 | | if (!(BOOST_UBLAS_TEST_EXPAND_(x) == BOOST_UBLAS_TEST_EXPAND_(y))) \ |
| 239 | if (!(BOOST_UBLAS_TEST_EXPANDP_(x) == BOOST_UBLAS_TEST_EXPANDP_(y))) \ |
231 | 240 | { \ |
232 | 241 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")" ); \ |
233 | 242 | ++test_fails__; \ |
… |
… |
|
239 | 248 | #define BOOST_UBLAS_TEST_CHECK_EQUAL(x,y) BOOST_UBLAS_TEST_CHECK_EQ(x,y) |
240 | 249 | |
241 | 250 | |
242 | | /// Check that \a x and \a y are close with respect to a given precision. |
243 | | #define BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_PRECISION] */ \ |
| 251 | /// Check that \a x and \a y are close with respect to a given precision \a e. |
| 252 | #define BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_CLOSE] */ \ |
244 | 253 | if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x), BOOST_UBLAS_TEST_EXPAND_(y), BOOST_UBLAS_TEST_EXPAND_(e))) \ |
245 | 254 | { \ |
246 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs(" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPAND_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPAND_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPAND_(e) << "]" ); \ |
| 255 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs(" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPANDP_(e) << "]" ); \ |
247 | 256 | ++test_fails__; \ |
248 | 257 | } \ |
249 | | /* [/BOOST_UBLAS_TEST_CHECK_PRECISION] */ |
| 258 | /* [/BOOST_UBLAS_TEST_CHECK_CLOSE] */ |
250 | 259 | |
251 | 260 | |
252 | 261 | /// Alias for macro \c BOOST_UBLAS_TEST_CHECK_CLOSE (for backward compatibility), |
253 | 262 | #define BOOST_UBLAS_TEST_CHECK_PRECISION(x,y,e) BOOST_UBLAS_TEST_CHECK_CLOSE(x,y,e) |
254 | 263 | |
255 | 264 | |
256 | | /// Check that \a x is close to \a y with respect to a given relative precision. |
257 | | #define BOOST_UBLAS_TEST_CHECK_REL_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_REL_PRECISION] */ \ |
| 265 | /// Check that \a x is close to \a y with respect to a given relative precision \a e. |
| 266 | #define BOOST_UBLAS_TEST_CHECK_REL_CLOSE(x,y,e) /* [BOOST_UBLAS_TEST_CHECK_REL_CLOSE] */ \ |
258 | 267 | if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPAND_(x), BOOST_UBLAS_TEST_EXPAND_(y), BOOST_UBLAS_TEST_EXPAND_(e))) \ |
259 | 268 | { \ |
260 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")/" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPAND_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPAND_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPAND_(e) << "]" ); \ |
| 269 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ")/" << BOOST_UBLAS_TEST_STRINGIFY_(y) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " == " << BOOST_UBLAS_TEST_EXPANDP_(e) << "]" ); \ |
261 | 270 | ++test_fails__; \ |
262 | 271 | } \ |
263 | | /* [/BOOST_UBLAS_TEST_CHECK_REL_PRECISION] */ |
| 272 | /* [/BOOST_UBLAS_TEST_CHECK_REL_CLOSE] */ |
264 | 273 | |
265 | 274 | |
266 | 275 | /// Alias for macro \c BOOST_UBLAS_TEST_CHECK_REL_CLOSE (for backward compatibility), |
… |
… |
|
269 | 278 | |
270 | 279 | /// Check that elements of \a x and \a y are equal. |
271 | 280 | #define BOOST_UBLAS_TEST_CHECK_VECTOR_EQ(x,y,n) /* [BOOST_UBLAS_TEST_CHECK_VECTOR_EQ] */ \ |
272 | | if (BOOST_UBLAS_TEST_EXPAND_(n) > 0) \ |
| 281 | if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \ |
273 | 282 | { \ |
274 | | unsigned long n__ = BOOST_UBLAS_TEST_EXPAND_(n); \ |
275 | | for (unsigned long i__ = n__; i__ > 0; --i__) \ |
| 283 | ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \ |
| 284 | for (::std::size_t i__ = n__; i__ > 0; --i__) \ |
276 | 285 | { \ |
277 | | if (!(BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__]==BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__])) \ |
| 286 | if (!(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__]==BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__])) \ |
278 | 287 | { \ |
279 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "==" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ")" << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \ |
| 288 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "==" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ")" << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \ |
280 | 289 | ++test_fails__; \ |
281 | 290 | } \ |
282 | 291 | } \ |
… |
… |
|
284 | 293 | /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_EQ] */ |
285 | 294 | |
286 | 295 | |
287 | | /// Check that elements of \a x and \a y are close with respect to a given precision. |
| 296 | /// Check that elements of \a x and \a y are close with respect to a given precision \a e. |
288 | 297 | #define BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE(x,y,n,e) /* [BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE] */ \ |
289 | | if (BOOST_UBLAS_TEST_EXPAND_(n) > 0) \ |
| 298 | if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \ |
290 | 299 | { \ |
291 | | unsigned long n__ = BOOST_UBLAS_TEST_EXPAND_(n); \ |
292 | | for (unsigned long i__ = n__; i__ > 0; --i__) \ |
| 300 | ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \ |
| 301 | for (::std::size_t i__ = n__; i__ > 0; --i__) \ |
293 | 302 | { \ |
294 | | if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__], BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__], BOOST_UBLAS_TEST_EXPAND_(e))) \ |
| 303 | if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(e))) \ |
295 | 304 | { \ |
296 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \ |
| 305 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \ |
297 | 306 | ++test_fails__; \ |
298 | 307 | } \ |
299 | 308 | } \ |
… |
… |
|
301 | 310 | /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE] */ |
302 | 311 | |
303 | 312 | |
| 313 | /// Check that elements of \a x and \a y are close with respect to a given relative precision \a e. |
| 314 | #define BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE(x,y,n,e) /* [BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE] */ \ |
| 315 | if (BOOST_UBLAS_TEST_EXPANDP_(n) > 0) \ |
| 316 | { \ |
| 317 | ::std::size_t n__ = BOOST_UBLAS_TEST_EXPAND_(n); \ |
| 318 | for (::std::size_t i__ = n__; i__ > 0; --i__) \ |
| 319 | { \ |
| 320 | if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__], BOOST_UBLAS_TEST_EXPANDP_(e))) \ |
| 321 | { \ |
| 322 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y[i__]) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)[n__-i__] << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << " and " << BOOST_UBLAS_TEST_STRINGIFY_(n) << " == " << n__ << "]" ); \ |
| 323 | ++test_fails__; \ |
| 324 | } \ |
| 325 | } \ |
| 326 | } \ |
| 327 | /* [/BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE] */ |
| 328 | |
| 329 | |
304 | 330 | /// Check that elements of matrices \a x and \a y are equal. |
305 | 331 | #define BOOST_UBLAS_TEST_CHECK_MATRIX_EQ(x,y,nr,nc) /* [BOOST_UBLAS_TEST_CHECK_MATRIX_EQ] */ \ |
306 | | for (unsigned long i__ = 0; i__ < BOOST_UBLAS_TEST_EXPAND_(nr); ++i__) \ |
| 332 | for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \ |
307 | 333 | { \ |
308 | | for (unsigned long j__ = 0; j__ < BOOST_UBLAS_TEST_EXPAND_(nc); ++j__) \ |
| 334 | for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \ |
309 | 335 | { \ |
310 | | if (!(BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__)==BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__))) \ |
| 336 | if (!(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__)==BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__))) \ |
311 | 337 | { \ |
312 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPAND_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPAND_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPAND_(nc) << "]" ); \ |
| 338 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: (" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \ |
| 339 | ++test_fails__; \ |
313 | 340 | } \ |
314 | 341 | } \ |
315 | 342 | } \ |
316 | 343 | /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_EQ] */ |
317 | 344 | |
318 | 345 | |
319 | | /// Check that elements of matrices \a x and \a y are close with respect to a given precision. |
| 346 | /// Check that elements of matrices \a x and \a y are close with respect to a given precision \a e. |
320 | 347 | #define BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE(x,y,nr,nc,e) /* [BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE] */ \ |
321 | | for (unsigned long i__ = 0; i__ < BOOST_UBLAS_TEST_EXPAND_(nr); ++i__) \ |
| 348 | for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \ |
322 | 349 | { \ |
323 | | for (unsigned long j__ = 0; j__ < BOOST_UBLAS_TEST_EXPAND_(nc); ++j__) \ |
| 350 | for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \ |
324 | 351 | { \ |
325 | | if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__), BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__), BOOST_UBLAS_TEST_EXPAND_(e))) \ |
| 352 | if (!::boost::numeric::ublas::test::detail::close_to(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(e))) \ |
326 | 353 | { \ |
327 | | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPAND_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPAND_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPAND_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPAND_(nc) << "]" ); \ |
| 354 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \ |
| 355 | ++test_fails__; \ |
328 | 356 | } \ |
329 | 357 | } \ |
330 | 358 | } \ |
331 | 359 | /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE] */ |
332 | 360 | |
333 | 361 | |
| 362 | /// Check that elements of matrices \a x and \a y are close with respect to a given relative precision \a e. |
| 363 | #define BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE(x,y,nr,nc,e) /* [BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE] */ \ |
| 364 | for (::std::size_t i__ = 0; i__ < BOOST_UBLAS_TEST_EXPANDP_(nr); ++i__) \ |
| 365 | { \ |
| 366 | for (::std::size_t j__ = 0; j__ < BOOST_UBLAS_TEST_EXPANDP_(nc); ++j__) \ |
| 367 | { \ |
| 368 | if (!::boost::numeric::ublas::test::detail::rel_close_to(BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__), BOOST_UBLAS_TEST_EXPANDP_(e))) \ |
| 369 | { \ |
| 370 | BOOST_UBLAS_TEST_ERROR( "Failed assertion: abs((" << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << "-" << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << ") <= " << BOOST_UBLAS_TEST_STRINGIFY_(e) << " [with " << BOOST_UBLAS_TEST_STRINGIFY_(x(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(x)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(y(i__,j__)) << " == " << BOOST_UBLAS_TEST_EXPANDP_(y)(i__,j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(i__) << " == " << i__ << ", " << BOOST_UBLAS_TEST_STRINGIFY_(j__) << " == " << BOOST_UBLAS_TEST_EXPANDP_(j__) << ", " << BOOST_UBLAS_TEST_STRINGIFY_(nr) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nr) << " and " << BOOST_UBLAS_TEST_STRINGIFY_(nc) << " == " << BOOST_UBLAS_TEST_EXPANDP_(nc) << "]" ); \ |
| 371 | ++test_fails__; \ |
| 372 | } \ |
| 373 | } \ |
| 374 | } \ |
| 375 | /* [/BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE] */ |
| 376 | |
| 377 | |
334 | 378 | ///< Output the error message \a x. |
335 | 379 | #define BOOST_UBLAS_TEST_ERROR(x) ::std::cerr << "[Error (" << __FILE__ << ":" << __func__ << ":" << __LINE__ << ")>> " << BOOST_UBLAS_TEST_EXPAND_(x) << ::std::endl |
336 | 380 | |