]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/numeric/ublas/test/test_ticket7296.cpp
bf4d2d8612389ec72a339fd3d1a1037f8f5ee1ec
2 * \file libs/numeric/ublas/test/test_utils.hpp
4 * \brief Test suite for utils.hpp.
6 * Copyright (c) 2012, Marco Guazzone
8 * Distributed under the Boost Software License, Version 1.0. (See
9 * accompanying file LICENSE_1_0.txt or copy at
10 * http://www.boost.org/LICENSE_1_0.txt)
12 * \author Marco Guazzone (marco.guazzone@gmail.com)
15 #include <boost/numeric/ublas/io.hpp>
16 #include <boost/numeric/ublas/matrix.hpp>
17 #include <boost/numeric/ublas/vector.hpp>
23 namespace ublas
= boost::numeric::ublas
;
26 static const float tol(1e-6f
);
27 static const float mul(tol
*10);
30 BOOST_UBLAS_TEST_DEF( check
)
32 BOOST_UBLAS_TEST_TRACE( "Test case: 'check'" );
34 BOOST_UBLAS_TEST_CHECK( true );
37 BOOST_UBLAS_TEST_DEF( check_eq
)
39 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_eq'" );
41 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
42 BOOST_UBLAS_TEST_CHECK_EQ( short(1), short(1) );
43 BOOST_UBLAS_TEST_CHECK_EQ( int(1), int(1) );
44 BOOST_UBLAS_TEST_CHECK_EQ( long(1), long(1) );
45 BOOST_UBLAS_TEST_CHECK_EQ( unsigned(1), unsigned(1) );
47 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
48 BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
49 BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
50 BOOST_UBLAS_TEST_CHECK_EQ( int(1), long(1) );
51 BOOST_UBLAS_TEST_CHECK_EQ( long(1), int(1) );
53 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
54 BOOST_UBLAS_TEST_CHECK_EQUAL( int(1), int(1) );
57 BOOST_UBLAS_TEST_DEF( check_close
)
59 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_close'" );
61 const float c1(1*mul
);
62 const float c2(2*mul
);
65 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
66 BOOST_UBLAS_TEST_CHECK_CLOSE( float(c1
), float(c1
), tol
);
67 BOOST_UBLAS_TEST_CHECK_CLOSE( double(c1
), double(c1
), tol
);
68 BOOST_UBLAS_TEST_CHECK_CLOSE( std::complex<float>(c1
,c2
), std::complex<float>(c1
,c2
), tol
);
69 BOOST_UBLAS_TEST_CHECK_CLOSE( std::complex<double>(c1
,c2
), std::complex<double>(c1
,c2
), tol
);
72 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
73 BOOST_UBLAS_TEST_CHECK_CLOSE( float(c1
), double(c1
), tol
);
74 BOOST_UBLAS_TEST_CHECK_CLOSE( double(c1
), float(c1
), tol
);
75 BOOST_UBLAS_TEST_CHECK_CLOSE( std::complex<float>(c1
,c2
), std::complex<double>(c1
,c2
), tol
);
76 BOOST_UBLAS_TEST_CHECK_CLOSE( std::complex<double>(c1
,c2
), std::complex<float>(c1
,c2
), tol
);
79 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
80 BOOST_UBLAS_TEST_CHECK_PRECISION( float(c1
), float(c1
), tol
);
83 BOOST_UBLAS_TEST_DEF( check_rel_close
)
85 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_rel_close'" );
87 const float c1(1*mul
);
88 const float c2(2*mul
);
91 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
92 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(c1
), float(c1
), tol
);
93 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(c1
), double(c1
), tol
);
94 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( std::complex<float>(c1
,c2
), std::complex<float>(c1
,c2
), tol
);
95 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( std::complex<double>(c1
,c2
), std::complex<double>(c1
,c2
), tol
);
98 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
99 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(c1
), double(c1
), tol
);
100 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(c1
), float(c1
), tol
);
101 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( std::complex<float>(c1
,c2
), std::complex<double>(c1
,c2
), tol
);
102 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( std::complex<double>(c1
,c2
), std::complex<float>(c1
,c2
), tol
);
105 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
106 BOOST_UBLAS_TEST_CHECK_REL_PRECISION( float(c1
), float(c1
), tol
);
109 BOOST_UBLAS_TEST_DEF( check_vector_eq
)
111 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_eq'" );
113 const std::size_t n(5);
115 ublas::vector
<short> sv
= ublas::scalar_vector
<short>(n
, 1);
116 ublas::vector
<int> iv
= ublas::scalar_vector
<int>(n
, 1);
117 ublas::vector
<long> lv
= ublas::scalar_vector
<long>(n
, 1L);
118 ublas::vector
<unsigned> uv
= ublas::scalar_vector
<unsigned>(n
, 1u);
121 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
122 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv
, sv
, n
);
123 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv
, iv
, n
);
124 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv
, lv
, n
);
125 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( uv
, uv
, n
);
128 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
129 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv
, iv
, n
);
130 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv
, sv
, n
);
131 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv
, lv
, n
);
132 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv
, iv
, n
);
135 BOOST_UBLAS_TEST_DEF( check_vector_close
)
137 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_close'" );
139 const std::size_t n(5);
141 ublas::vector
<float> fv
= ublas::scalar_vector
<float>(n
, 1);
142 ublas::vector
<float> dv
= ublas::scalar_vector
<float>(n
, 1);
143 ublas::vector
< std::complex<float> > cfv
= ublas::scalar_vector
< std::complex<float> >(n
, std::complex<float>(1,2));
144 ublas::vector
< std::complex<double> > cdv
= ublas::scalar_vector
< std::complex<double> >(n
, std::complex<double>(1,2));
147 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
148 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv
, fv
, n
, tol
);
149 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv
, dv
, n
, tol
);
150 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv
, cfv
, n
, tol
);
151 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv
, cdv
, n
, tol
);
154 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
155 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv
, dv
, n
, tol
);
156 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv
, fv
, n
, tol
);
157 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv
, cdv
, n
, tol
);
158 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv
, cfv
, n
, tol
);
161 BOOST_UBLAS_TEST_DEF( check_vector_rel_close
)
163 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_rel_close'" );
165 const std::size_t n(5);
166 const float c1(1*mul
);
167 const float c2(2*mul
);
169 ublas::vector
<float> fv
= ublas::scalar_vector
<float>(n
, c1
);
170 ublas::vector
<double> dv
= ublas::scalar_vector
<double>(n
, c1
);
171 ublas::vector
< std::complex<float> > cfv
= ublas::scalar_vector
< std::complex<float> >(n
, std::complex<float>(c1
,c2
));
172 ublas::vector
< std::complex<double> > cdv
= ublas::scalar_vector
< std::complex<double> >(n
, std::complex<double>(c1
,c2
));
175 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
176 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( fv
, fv
, n
, tol
);
177 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( dv
, dv
, n
, tol
);
178 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( cfv
, cfv
, n
, tol
);
179 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( cdv
, cdv
, n
, tol
);
182 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
183 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( fv
, dv
, n
, tol
);
184 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( dv
, fv
, n
, tol
);
185 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( cfv
, cdv
, n
, tol
);
186 BOOST_UBLAS_TEST_CHECK_VECTOR_REL_CLOSE( cdv
, cfv
, n
, tol
);
189 BOOST_UBLAS_TEST_DEF( check_matrix_eq
)
191 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_eq'" );
193 const std::size_t nr(3);
194 const std::size_t nc(4);
196 ublas::matrix
<short> sv
= ublas::scalar_matrix
<short>(nr
, nc
, 1);
197 ublas::matrix
<int> iv
= ublas::scalar_matrix
<int>(nr
, nc
, 1);
198 ublas::matrix
<long> lv
= ublas::scalar_matrix
<long>(nr
, nc
, 1L);
199 ublas::matrix
<unsigned> uv
= ublas::scalar_matrix
<unsigned>(nr
, nc
, 1u);
202 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
203 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv
, sv
, nr
, nc
);
204 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv
, iv
, nr
, nc
);
205 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv
, lv
, nr
, nc
);
206 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( uv
, uv
, nr
, nc
);
209 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
210 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv
, iv
, nr
, nc
);
211 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv
, sv
, nr
, nc
);
212 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv
, lv
, nr
, nc
);
213 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv
, iv
, nr
, nc
);
216 BOOST_UBLAS_TEST_DEF( check_matrix_close
)
218 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_close'" );
220 const std::size_t nr(3);
221 const std::size_t nc(4);
222 const float c1(1*mul
);
223 const float c2(2*mul
);
225 ublas::matrix
<float> fA
= ublas::scalar_matrix
<float>(nr
, nc
, c1
);
226 ublas::matrix
<double> dA
= ublas::scalar_matrix
<double>(nr
, nc
, c1
);
227 ublas::matrix
< std::complex<float> > cfA
= ublas::scalar_matrix
< std::complex<float> >(nr
, nc
, std::complex<float>(c1
,c2
));
228 ublas::matrix
< std::complex<double> > cdA
= ublas::scalar_matrix
< std::complex<double> >(nr
, nc
, std::complex<double>(c1
,c2
));
231 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
232 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA
, fA
, nr
, nc
, tol
);
233 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA
, dA
, nr
, nc
, tol
);
234 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA
, cfA
, nr
, nc
, tol
);
235 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA
, cdA
, nr
, nc
, tol
);
238 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
239 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA
, dA
, nr
, nc
, tol
);
240 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA
, fA
, nr
, nc
, tol
);
241 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA
, cdA
, nr
, nc
, tol
);
242 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA
, cfA
, nr
, nc
, tol
);
246 BOOST_UBLAS_TEST_DEF( check_matrix_rel_close
)
248 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_rel_close'" );
250 const std::size_t nr(3);
251 const std::size_t nc(4);
252 const float c1(1*mul
);
253 const float c2(2*mul
);
255 ublas::matrix
<float> fA
= ublas::scalar_matrix
<float>(nr
, nc
, c1
);
256 ublas::matrix
<double> dA
= ublas::scalar_matrix
<double>(nr
, nc
, c1
);
257 ublas::matrix
< std::complex<float> > cfA
= ublas::scalar_matrix
< std::complex<float> >(nr
, nc
, std::complex<float>(c1
,c2
));
258 ublas::matrix
< std::complex<double> > cdA
= ublas::scalar_matrix
< std::complex<double> >(nr
, nc
, std::complex<double>(c1
,c2
));
261 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
262 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( fA
, fA
, nr
, nc
, tol
);
263 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( dA
, dA
, nr
, nc
, tol
);
264 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( cfA
, cfA
, nr
, nc
, tol
);
265 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( cdA
, cdA
, nr
, nc
, tol
);
268 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
269 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( fA
, dA
, nr
, nc
, tol
);
270 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( dA
, fA
, nr
, nc
, tol
);
271 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( cfA
, cdA
, nr
, nc
, tol
);
272 BOOST_UBLAS_TEST_CHECK_MATRIX_REL_CLOSE( cdA
, cfA
, nr
, nc
, tol
);
278 BOOST_UBLAS_TEST_SUITE( "Test 'utils.hpp' functionalities" );
280 BOOST_UBLAS_TEST_BEGIN();
281 BOOST_UBLAS_TEST_DO( check
);
282 BOOST_UBLAS_TEST_DO( check_eq
);
283 BOOST_UBLAS_TEST_DO( check_close
);
284 BOOST_UBLAS_TEST_DO( check_rel_close
);
285 BOOST_UBLAS_TEST_DO( check_vector_eq
);
286 BOOST_UBLAS_TEST_DO( check_vector_close
);
287 BOOST_UBLAS_TEST_DO( check_vector_rel_close
);
288 BOOST_UBLAS_TEST_DO( check_matrix_eq
);
289 BOOST_UBLAS_TEST_DO( check_matrix_close
);
290 BOOST_UBLAS_TEST_DO( check_matrix_rel_close
);
291 BOOST_UBLAS_TEST_END();