Ticket #7296: test_ticket7296.cpp

File test_ticket7296.cpp, 8.1 KB (added by Marco Guazzone <marco.guazzone@…>, 10 years ago)

Test case for utils.hpp. It also shows that now utils.hpp works with complex value types.

Line 
1/**
2 * \file libs/numeric/ublas/test/test_utils.hpp
3 *
4 * \brief Test suite for utils.hpp.
5 *
6 * Copyright (c) 2012, Marco Guazzone
7 *
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)
11 *
12 * \author Marco Guazzone (marco.guazzone@gmail.com)
13 */
14
15#include <boost/numeric/ublas/io.hpp>
16#include <boost/numeric/ublas/matrix.hpp>
17#include <boost/numeric/ublas/vector.hpp>
18#include <complex>
19#include <cstddef>
20#include <libs/numeric/ublas/test/utils.hpp>
21
22
23namespace ublas = boost::numeric::ublas;
24
25
26static const double tol(1e-6);
27
28
29BOOST_UBLAS_TEST_DEF( check )
30{
31 BOOST_UBLAS_TEST_TRACE( "Test case: 'check'" );
32
33 BOOST_UBLAS_TEST_CHECK( true );
34}
35
36BOOST_UBLAS_TEST_DEF( check_eq )
37{
38 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_eq'" );
39
40 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
41 BOOST_UBLAS_TEST_CHECK_EQ( short(1), short(1) );
42 BOOST_UBLAS_TEST_CHECK_EQ( int(1), int(1) );
43 BOOST_UBLAS_TEST_CHECK_EQ( long(1), long(1) );
44 BOOST_UBLAS_TEST_CHECK_EQ( unsigned(1), unsigned(1) );
45
46 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
47 BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
48 BOOST_UBLAS_TEST_CHECK_EQ( short(1), int(1) );
49 BOOST_UBLAS_TEST_CHECK_EQ( int(1), long(1) );
50 BOOST_UBLAS_TEST_CHECK_EQ( long(1), int(1) );
51
52 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
53 BOOST_UBLAS_TEST_CHECK_EQUAL( int(1), int(1) );
54}
55
56BOOST_UBLAS_TEST_DEF( check_close )
57{
58 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_close'" );
59
60 // Check T vs. T
61 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
62 BOOST_UBLAS_TEST_CHECK_CLOSE( float(1), float(1), tol );
63 BOOST_UBLAS_TEST_CHECK_CLOSE( double(1), double(1), tol );
64 BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<float>(1,2), ::std::complex<float>(1,2), tol );
65 BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<double>(1,2), ::std::complex<double>(1,2), tol );
66
67 // Check T1 vs. T2
68 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
69 BOOST_UBLAS_TEST_CHECK_CLOSE( float(1), double(1), tol );
70 BOOST_UBLAS_TEST_CHECK_CLOSE( double(1), float(1), tol );
71 BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<float>(1,2), ::std::complex<double>(1,2), tol );
72 BOOST_UBLAS_TEST_CHECK_CLOSE( ::std::complex<double>(1,2), ::std::complex<float>(1,2), tol );
73
74 // Check alias
75 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
76 BOOST_UBLAS_TEST_CHECK_PRECISION( float(1), float(1), tol );
77}
78
79BOOST_UBLAS_TEST_DEF( check_rel_close )
80{
81 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_rel_close'" );
82
83 // Check T vs. T
84 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
85 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(1), float(1), tol );
86 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(1), double(1), tol );
87 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<float>(1,2), ::std::complex<float>(1,2), tol );
88 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<double>(1,2), ::std::complex<double>(1,2), tol );
89
90 // Check T1 vs. T2
91 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
92 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( float(1), double(1), tol );
93 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( double(1), float(1), tol );
94 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<float>(1,2), ::std::complex<double>(1,2), tol );
95 BOOST_UBLAS_TEST_CHECK_REL_CLOSE( ::std::complex<double>(1,2), ::std::complex<float>(1,2), tol );
96
97 // Check alias
98 BOOST_UBLAS_DEBUG_TRACE( "-- Test aliases." );
99 BOOST_UBLAS_TEST_CHECK_REL_PRECISION( float(1), float(1), tol );
100}
101
102BOOST_UBLAS_TEST_DEF( check_vector_eq )
103{
104 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_eq'" );
105
106 const ::std::size_t n(5);
107
108 ublas::vector<short> sv = ublas::scalar_vector<short>(n, 1);
109 ublas::vector<int> iv = ublas::scalar_vector<int>(n, 1);
110 ublas::vector<long> lv = ublas::scalar_vector<long>(n, 1L);
111 ublas::vector<unsigned> uv = ublas::scalar_vector<unsigned>(n, 1u);
112
113 // Check T vs. T
114 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
115 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv, sv, n );
116 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, iv, n );
117 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv, lv, n );
118 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( uv, uv, n );
119
120 // Check T1 vs. T2
121 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
122 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( sv, iv, n );
123 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, sv, n );
124 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( iv, lv, n );
125 BOOST_UBLAS_TEST_CHECK_VECTOR_EQ( lv, iv, n );
126}
127
128BOOST_UBLAS_TEST_DEF( check_vector_close )
129{
130 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_vector_close'" );
131
132 const ::std::size_t n(5);
133
134 ublas::vector<float> fv = ublas::scalar_vector<float>(n, 1);
135 ublas::vector<float> dv = ublas::scalar_vector<float>(n, 1);
136 ublas::vector< ::std::complex<float> > cfv = ublas::scalar_vector< ::std::complex<float> >(n, ::std::complex<float>(1,2));
137 ublas::vector< ::std::complex<double> > cdv = ublas::scalar_vector< ::std::complex<double> >(n, ::std::complex<double>(1,2));
138
139 // Check T vs. T
140 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
141 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv, fv, n, tol );
142 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv, dv, n, tol );
143 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv, cfv, n, tol );
144 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv, cdv, n, tol );
145
146 // Check T1 vs. T2
147 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
148 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( fv, dv, n, tol );
149 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( dv, fv, n, tol );
150 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cfv, cdv, n, tol );
151 BOOST_UBLAS_TEST_CHECK_VECTOR_CLOSE( cdv, cfv, n, tol );
152}
153
154BOOST_UBLAS_TEST_DEF( check_matrix_eq )
155{
156 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_eq'" );
157
158 const ::std::size_t nr(3);
159 const ::std::size_t nc(4);
160
161 ublas::matrix<short> sv = ublas::scalar_matrix<short>(nr, nc, 1);
162 ublas::matrix<int> iv = ublas::scalar_matrix<int>(nr, nc, 1);
163 ublas::matrix<long> lv = ublas::scalar_matrix<long>(nr, nc, 1L);
164 ublas::matrix<unsigned> uv = ublas::scalar_matrix<unsigned>(nr, nc, 1u);
165
166 // Check T vs. T
167 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
168 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv, sv, nr, nc );
169 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, iv, nr, nc );
170 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv, lv, nr, nc );
171 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( uv, uv, nr, nc );
172
173 // Check T1 vs. T2
174 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
175 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( sv, iv, nr, nc );
176 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, sv, nr, nc );
177 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( iv, lv, nr, nc );
178 BOOST_UBLAS_TEST_CHECK_MATRIX_EQ( lv, iv, nr, nc );
179}
180
181BOOST_UBLAS_TEST_DEF( check_matrix_close )
182{
183 BOOST_UBLAS_TEST_TRACE( "Test case: 'check_matrix_close'" );
184
185 const ::std::size_t nr(3);
186 const ::std::size_t nc(4);
187
188 ublas::matrix<float> fA = ublas::scalar_matrix<float>(nr, nc, 1);
189 ublas::matrix<float> dA = ublas::scalar_matrix<float>(nr, nc, 1);
190 ublas::matrix< ::std::complex<float> > cfA = ublas::scalar_matrix< ::std::complex<float> >(nr, nc, ::std::complex<float>(1,2));
191 ublas::matrix< ::std::complex<double> > cdA = ublas::scalar_matrix< ::std::complex<double> >(nr, nc, ::std::complex<double>(1,2));
192
193 // Check T vs. T
194 BOOST_UBLAS_DEBUG_TRACE( "-- Test against same types." );
195 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA, fA, nr, nc, tol );
196 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA, dA, nr, nc, tol );
197 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA, cfA, nr, nc, tol );
198 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA, cdA, nr, nc, tol );
199
200 // Check T1 vs. T2
201 BOOST_UBLAS_DEBUG_TRACE( "-- Test against different types." );
202 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( fA, dA, nr, nc, tol );
203 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( dA, fA, nr, nc, tol );
204 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cfA, cdA, nr, nc, tol );
205 BOOST_UBLAS_TEST_CHECK_MATRIX_CLOSE( cdA, cfA, nr, nc, tol );
206}
207
208
209int main()
210{
211 BOOST_UBLAS_TEST_SUITE( "Test 'utils.hpp' functionalities" );
212
213 BOOST_UBLAS_TEST_BEGIN();
214 BOOST_UBLAS_TEST_DO( check );
215 BOOST_UBLAS_TEST_DO( check_eq );
216 BOOST_UBLAS_TEST_DO( check_close );
217 BOOST_UBLAS_TEST_DO( check_rel_close );
218 BOOST_UBLAS_TEST_DO( check_vector_eq );
219 BOOST_UBLAS_TEST_DO( check_vector_close );
220 BOOST_UBLAS_TEST_DO( check_matrix_eq );
221 BOOST_UBLAS_TEST_DO( check_matrix_close );
222 BOOST_UBLAS_TEST_END();
223}