| GCC Code Coverage Report | |||||||||||||||||||||
|
|||||||||||||||||||||
| Line | Branch | Exec | Source |
1 |
// Copyright 2010 Thomas Moulard. |
||
2 |
// |
||
3 |
|||
4 |
#include <dynamic-graph/debug.h> |
||
5 |
#include <dynamic-graph/eigen-io.h> |
||
6 |
#include <dynamic-graph/entity.h> |
||
7 |
#include <dynamic-graph/factory.h> |
||
8 |
#include <dynamic-graph/linear-algebra.h> |
||
9 |
#include <dynamic-graph/pool.h> |
||
10 |
#include <dynamic-graph/signal.h> |
||
11 |
|||
12 |
#include <boost/foreach.hpp> |
||
13 |
#include <boost/format.hpp> |
||
14 |
#include <string> |
||
15 |
|||
16 |
#include "signal-cast-register-test.h" |
||
17 |
#include "signal-cast-registerer-libA.hh" |
||
18 |
#include "signal-cast-registerer-libB.hh" |
||
19 |
|||
20 |
#define BOOST_TEST_MODULE signal_cast_registerer |
||
21 |
|||
22 |
#if BOOST_VERSION >= 105900 |
||
23 |
#include <boost/test/tools/output_test_stream.hpp> |
||
24 |
#else |
||
25 |
#include <boost/test/output_test_stream.hpp> |
||
26 |
#endif |
||
27 |
#include <boost/test/unit_test.hpp> |
||
28 |
#include <iostream> |
||
29 |
|||
30 |
using boost::test_tools::output_test_stream; |
||
31 |
|||
32 |
typedef Eigen::VectorXd Vector; |
||
33 |
typedef Eigen::MatrixXd Matrix; |
||
34 |
|||
35 |
// Check standard double cast registerer. |
||
36 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗ |
4 |
BOOST_AUTO_TEST_CASE(standard_double_registerer) { |
37 |
✓✗✓✗ |
6 |
dynamicgraph::Signal<double, int> mySignal("out"); |
38 |
|||
39 |
typedef std::pair<std::string, std::string> test_t; |
||
40 |
4 |
std::vector<test_t> values; |
|
41 |
|||
42 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("42.0", "42")); |
43 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("42.5", "42.5")); |
44 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("-12.", "-12")); |
45 |
|||
46 |
// Double special values. |
||
47 |
// FIXME: these tests are failing :( |
||
48 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("inf", "inf")); |
49 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("-inf", "-inf")); |
50 |
✓✗✓✗ ✓✗ |
2 |
values.push_back(std::make_pair("nan", "nan")); |
51 |
|||
52 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✓✓✓ ✓✗✓✗ ✓✓✓✗ ✓✗ |
26 |
BOOST_FOREACH (const test_t &test, values) { |
53 |
// Set |
||
54 |
✓✗ | 24 |
std::istringstream value(test.first); |
55 |
✓✗ | 12 |
mySignal.set(value); |
56 |
|||
57 |
// Get |
||
58 |
{ |
||
59 |
✓✗✓✗ |
24 |
output_test_stream output; |
60 |
✓✗ | 12 |
mySignal.get(output); |
61 |
✓✗✓✗ ✓✗✓✗ ✓✗✗✓ |
12 |
BOOST_CHECK_EQUAL(output.str(), test.second); |
62 |
} |
||
63 |
|||
64 |
// Trace |
||
65 |
{ |
||
66 |
✓✗✓✗ |
24 |
output_test_stream output; |
67 |
✓✗ | 12 |
mySignal.trace(output); |
68 |
✓✗✓✗ ✓✗✓✗ ✓✗✗✓ |
12 |
BOOST_CHECK_EQUAL(output.str(), test.second); |
69 |
} |
||
70 |
} |
||
71 |
|||
72 |
// Check invalid values. |
||
73 |
// FIXME: this test is failing for now. |
||
74 |
✓✗✓✗ |
6 |
std::istringstream value("This is not a valid double."); |
75 |
✓✗✓✗ ✗✓✗✗ ✗✗✗✗ ✗✗✗✗ ✗✗✗✓ ✓✗✓✗ ✓✗✓✗ ✓✗✗✓ |
6 |
BOOST_CHECK_THROW(mySignal.set(value), std::exception); |
76 |
2 |
} |
|
77 |
|||
78 |
// Check a custom cast registerer for Boost uBLAS vectors. |
||
79 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗ |
4 |
BOOST_AUTO_TEST_CASE(custom_vector_registerer) { |
80 |
✓✗✓✗ |
6 |
dynamicgraph::Signal<dynamicgraph::Vector, int> myVectorSignal("vector"); |
81 |
|||
82 |
// Print the signal name. |
||
83 |
{ |
||
84 |
✓✗✓✗ |
4 |
output_test_stream output; |
85 |
✓✗ | 2 |
output << myVectorSignal; |
86 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✗✓ |
2 |
BOOST_CHECK(output.is_equal("Sig:vector (Type Cst)")); |
87 |
} |
||
88 |
|||
89 |
✓✓ | 12 |
for (unsigned int i = 0; i < 5; ++i) { |
90 |
✓✗✓✗ |
20 |
Vector v = Vector::Unit(5, i); |
91 |
✓✗ | 20 |
std::ostringstream os; |
92 |
✓✗ | 10 |
os << v; |
93 |
✓✗✓✗ ✓✗✓✗ |
30 |
std::istringstream ss("[5](" + os.str() + ")"); |
94 |
|||
95 |
// Set signal value. |
||
96 |
✓✗ | 10 |
myVectorSignal.set(ss); |
97 |
|||
98 |
// Print out signal value. |
||
99 |
✓✗✓✗ |
20 |
output_test_stream output; |
100 |
✓✗ | 10 |
myVectorSignal.get(output); |
101 |
|||
102 |
✓✗ | 20 |
boost::format fmt("%d %d %d %d %d"); |
103 |
✓✗✓✗ ✓✗✓✗ ✓✗ |
10 |
fmt % (i == 0) % (i == 1) % (i == 2) % (i == 3) % (i == 4); |
104 |
|||
105 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✗✓ |
10 |
BOOST_CHECK(output.is_equal(fmt.str())); |
106 |
} |
||
107 |
|||
108 |
// Catch Exception of ss (not good input) |
||
109 |
|||
110 |
// ss[0] != "[" |
||
111 |
try { |
||
112 |
✓✗✓✗ |
6 |
std::istringstream ss("test"); |
113 |
✗✓ | 2 |
myVectorSignal.set(ss); |
114 |
4 |
} catch (ExceptionSignal &e) { |
|
115 |
✓✗ | 2 |
std::cout << "Test passed : ss[0] != \"[\""; |
116 |
} |
||
117 |
|||
118 |
// ss[1] != %i |
||
119 |
try { |
||
120 |
✓✗✓✗ |
6 |
std::istringstream ss("[test"); |
121 |
✗✓ | 2 |
myVectorSignal.set(ss); |
122 |
4 |
} catch (ExceptionSignal &e) { |
|
123 |
✓✗ | 2 |
std::cout << "Test passed : ss[1] != %i"; |
124 |
} |
||
125 |
|||
126 |
// ss[2] != "]" |
||
127 |
try { |
||
128 |
✓✗✓✗ |
6 |
std::istringstream ss("[5["); |
129 |
✗✓ | 2 |
myVectorSignal.set(ss); |
130 |
4 |
} catch (ExceptionSignal &e) { |
|
131 |
✓✗ | 2 |
std::cout << "Test passed : ss[2] != \"]\""; |
132 |
} |
||
133 |
|||
134 |
// ss[3] != "(" |
||
135 |
try { |
||
136 |
✓✗✓✗ |
6 |
std::istringstream ss("[5]test"); |
137 |
✗✓ | 2 |
myVectorSignal.set(ss); |
138 |
4 |
} catch (ExceptionSignal &e) { |
|
139 |
✓✗ | 2 |
std::cout << "Test passed : ss[3] != \"(\""; |
140 |
} |
||
141 |
|||
142 |
// ss[4] != ' ' || ',' |
||
143 |
try { |
||
144 |
✓✗✓✗ |
6 |
std::istringstream ss("[5](1, "); |
145 |
✗✓ | 2 |
myVectorSignal.set(ss); |
146 |
4 |
} catch (ExceptionSignal &e) { |
|
147 |
✓✗ | 2 |
std::cout << "Test passed : ss[4] != \" \" || \",\""; |
148 |
} |
||
149 |
|||
150 |
// ss[-1] != ")" |
||
151 |
try { |
||
152 |
✓✗✓✗ |
6 |
std::istringstream ss("[5](1,2,3,4,5]"); |
153 |
✗✓ | 2 |
myVectorSignal.set(ss); |
154 |
4 |
} catch (ExceptionSignal &e) { |
|
155 |
✓✗ | 2 |
std::cout << "Test passed : ss[-1] != \")\""; |
156 |
} |
||
157 |
|||
158 |
try { |
||
159 |
✓✗✓✗ |
4 |
output_test_stream output; |
160 |
✓✗ | 2 |
myVectorSignal.trace(output); |
161 |
} catch (ExceptionSignal &e) { |
||
162 |
std::cout << "Test passed : ss[-1] != \")\""; |
||
163 |
} |
||
164 |
2 |
} |
|
165 |
|||
166 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗ |
4 |
BOOST_AUTO_TEST_CASE(custom_matrix_registerer) { |
167 |
✓✗✓✗ |
6 |
dynamicgraph::Signal<dynamicgraph::Matrix, int> myMatrixSignal("matrix"); |
168 |
|||
169 |
// Print the signal name. |
||
170 |
{ |
||
171 |
✓✗✓✗ |
4 |
output_test_stream output; |
172 |
✓✗ | 2 |
output << myMatrixSignal; |
173 |
✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✗✓ |
2 |
BOOST_CHECK(output.is_equal("Sig:matrix (Type Cst)")); |
174 |
} |
||
175 |
|||
176 |
// Catch Exception of ss (not good input) |
||
177 |
|||
178 |
// ss[0] != "[" |
||
179 |
try { |
||
180 |
✓✗✓✗ |
6 |
std::istringstream ss("test"); |
181 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
182 |
4 |
} catch (ExceptionSignal &e) { |
|
183 |
✓✗ | 2 |
std::cout << "Test passed : ss[0] != \"[\""; |
184 |
} |
||
185 |
|||
186 |
// ss[1] != %i |
||
187 |
try { |
||
188 |
✓✗✓✗ |
6 |
std::istringstream ss("[test"); |
189 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
190 |
4 |
} catch (ExceptionSignal &e) { |
|
191 |
✓✗ | 2 |
std::cout << "Test passed : ss[1] != %i"; |
192 |
} |
||
193 |
|||
194 |
// ss[2] != "," |
||
195 |
try { |
||
196 |
✓✗✓✗ |
6 |
std::istringstream ss("[5["); |
197 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
198 |
4 |
} catch (ExceptionSignal &e) { |
|
199 |
✓✗ | 2 |
std::cout << "Test passed : ss[2] != \",\""; |
200 |
} |
||
201 |
|||
202 |
// ss[3] != %i |
||
203 |
try { |
||
204 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,c"); |
205 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
206 |
4 |
} catch (ExceptionSignal &e) { |
|
207 |
✓✗ | 2 |
std::cout << "Test passed : ss[3] != %i"; |
208 |
} |
||
209 |
|||
210 |
// ss[4] != "]" |
||
211 |
try { |
||
212 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,3["); |
213 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
214 |
4 |
} catch (ExceptionSignal &e) { |
|
215 |
✓✗ | 2 |
std::cout << "Test passed : ss[4] != \"]\""; |
216 |
} |
||
217 |
|||
218 |
// ss[5] != "(" |
||
219 |
try { |
||
220 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,3]test"); |
221 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
222 |
4 |
} catch (ExceptionSignal &e) { |
|
223 |
✓✗ | 2 |
std::cout << "Test passed : ss[5] != \"(\""; |
224 |
} |
||
225 |
|||
226 |
// ss[6] != "(" |
||
227 |
try { |
||
228 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,3](test"); |
229 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
230 |
4 |
} catch (ExceptionSignal &e) { |
|
231 |
✓✗ | 2 |
std::cout << "Test passed : ss[6] != \"(\""; |
232 |
} |
||
233 |
|||
234 |
// ss[8] != " " || "," |
||
235 |
try { |
||
236 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,3]((1,"); |
237 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
238 |
4 |
} catch (ExceptionSignal &e) { |
|
239 |
✓✗ | 2 |
std::cout << "Test passed : ss[8] != \" \" || \",\""; |
240 |
} |
||
241 |
|||
242 |
// ss[6+n] != ")" |
||
243 |
try { |
||
244 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,3]((1,2,3]"); |
245 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
246 |
4 |
} catch (ExceptionSignal &e) { |
|
247 |
✓✗ | 2 |
std::cout << ("ss[6+n] != \")\""); |
248 |
} |
||
249 |
|||
250 |
// ss[-3] != ")" |
||
251 |
try { |
||
252 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,1]((1)(2)(3["); |
253 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
254 |
4 |
} catch (ExceptionSignal &e) { |
|
255 |
✓✗ | 2 |
std::cout << "Test passed : ss[5] != \")\""; |
256 |
} |
||
257 |
|||
258 |
// ss[-3] != ")" |
||
259 |
try { |
||
260 |
✓✗✓✗ |
6 |
std::istringstream ss("[5,1]((1)(2)(3)["); |
261 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
262 |
4 |
} catch (ExceptionSignal &e) { |
|
263 |
✓✗ | 2 |
std::cout << "Test passed : ss[5] != \")\""; |
264 |
} |
||
265 |
|||
266 |
// ss[-1]!= ")" |
||
267 |
try { |
||
268 |
✓✗✓✗ |
6 |
std::istringstream ss("[3,1]((1)(2),(3)["); |
269 |
✗✓ | 2 |
myMatrixSignal.set(ss); |
270 |
4 |
} catch (ExceptionSignal &e) { |
|
271 |
✓✗ | 2 |
std::cout << "Test passed : ss[5] != \")\" and ignore \",\""; |
272 |
} |
||
273 |
|||
274 |
//[...]((...)) |
||
275 |
2 |
} |
| Generated by: GCOVR (Version 4.2) |