23#include <boost/optional.hpp>
35 if(expected != actual) {
36 std::cout <<
"Not equal:\nexpected: " << expected <<
"\nactual: " << actual << std::endl;
51 const boost::optional<V>& actual,
double tol = 1e-9) {
52 if (!expected && actual) {
53 std::cout <<
"expected is boost::none, while actual is not" << std::endl;
56 if (expected && !actual) {
57 std::cout <<
"actual is boost::none, while expected is not" << std::endl;
60 if (!expected && !actual)
66bool assert_equal(
const V& expected,
const boost::optional<V>& actual,
double tol = 1e-9) {
68 std::cout <<
"actual is boost::none" << std::endl;
75bool assert_equal(
const V& expected,
const boost::optional<const V&>& actual,
double tol = 1e-9) {
77 std::cout <<
"actual is boost::none" << std::endl;
83#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
89bool GTSAM_DEPRECATED
assert_equal(
const std::vector<V>& expected,
const std::vector<V>& actual,
double tol = 1e-9) {
91 if (expected.size() != actual.size())
95 for(
const V& a: expected) {
103 std::cout <<
"expected: " << std::endl;
104 for(
const V& a: expected) { std::cout << a <<
" "; }
105 std::cout <<
"\nactual: " << std::endl;
106 for(
const V& a: actual) { std::cout << a <<
" "; }
107 std::cout << std::endl;
118template<
class V1,
class V2>
120 typedef typename std::map<V1,V2> Map;
122 if (expected.size() != actual.size())
124 typename Map::const_iterator
125 itExp = expected.begin(),
126 itAct = actual.begin();
128 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
137 std::cout <<
"expected: " << std::endl;
138 for(
const typename Map::value_type& a: expected) {
139 a.first.print(
"key");
140 a.second.print(
" value");
142 std::cout <<
"\nactual: " << std::endl;
143 for(
const typename Map::value_type& a: actual) {
144 a.first.print(
"key");
145 a.second.print(
" value");
147 std::cout << std::endl;
158 typedef typename std::map<size_t,V2> Map;
160 if (expected.size() != actual.size())
162 typename Map::const_iterator
163 itExp = expected.begin(),
164 itAct = actual.begin();
166 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
167 if (itExp->first != itAct->first ||
175 std::cout <<
"expected: " << std::endl;
176 for(
const typename Map::value_type& a: expected) {
177 std::cout <<
"Key: " << a.first << std::endl;
178 a.second.print(
" value");
180 std::cout <<
"\nactual: " << std::endl;
181 for(
const typename Map::value_type& a: actual) {
182 std::cout <<
"Key: " << a.first << std::endl;
183 a.second.print(
" value");
185 std::cout << std::endl;
194template<
class V1,
class V2>
196 const std::vector<std::pair<V1,V2> >& actual,
double tol = 1e-9) {
197 typedef typename std::vector<std::pair<V1,V2> > VectorPair;
199 if (expected.size() != actual.size())
201 typename VectorPair::const_iterator
202 itExp = expected.begin(),
203 itAct = actual.begin();
205 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
214 std::cout <<
"expected: " << std::endl;
215 for(
const typename VectorPair::value_type& a: expected) {
216 a.first.print(
" first ");
217 a.second.print(
" second");
219 std::cout <<
"\nactual: " << std::endl;
220 for(
const typename VectorPair::value_type& a: actual) {
221 a.first.print(
" first ");
222 a.second.print(
" second");
224 std::cout << std::endl;
237 typename V::const_iterator
238 itExp = expected.begin(),
239 itAct = actual.begin();
241 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
247 if(itExp != expected.end() || itAct != actual.end())
251 std::cout <<
"expected: " << std::endl;
252 for(
const typename V::value_type& a: expected) { a.print(
" "); }
253 std::cout <<
"\nactual: " << std::endl;
254 for(
const typename V::value_type& a: actual) { a.print(
" "); }
255 std::cout << std::endl;
267 typedef typename std::map<size_t,V2> Map;
269 if (expected.size() != actual.size())
271 typename Map::const_iterator
272 itExp = expected.begin(),
273 itAct = actual.begin();
275 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
276 if (itExp->first != itAct->first || itExp->second != itAct->second) {
283 std::cout <<
"expected: " << std::endl;
284 for(
const typename Map::value_type& a: expected) {
285 std::cout <<
"Key: " << a.first << std::endl;
286 std::cout <<
"Value: " << a.second << std::endl;
288 std::cout <<
"\nactual: " << std::endl;
289 for(
const typename Map::value_type& a: actual) {
290 std::cout <<
"Key: " << a.first << std::endl;
291 std::cout <<
"Value: " << a.second << std::endl;
293 std::cout << std::endl;
306 if (expected.size() != actual.size())
308 typename V::const_iterator
309 itExp = expected.begin(),
310 itAct = actual.begin();
312 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
313 if (*itExp != *itAct) {
320 std::cout <<
"expected: " << std::endl;
321 for(
const typename V::value_type& a: expected) { std::cout << a <<
" "; }
322 std::cout <<
"\nactual: " << std::endl;
323 for(
const typename V::value_type& a: actual) { std::cout << a <<
" "; }
324 std::cout << std::endl;
333inline bool assert_equal(
const std::string& expected,
const std::string& actual) {
334 if (expected == actual)
336 printf(
"Not equal:\n");
337 std::cout <<
"expected: [" << expected <<
"]\n";
338 std::cout <<
"actual: [" << actual <<
"]" << std::endl;
347 if (!actual.equals(expected, tol))
349 printf(
"Erroneously equal:\n");
350 expected.print(
"expected");
351 actual.print(
"actual");
361 std::stringstream buffer;
363 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
369 std::string actual_ = buffer.str();
370 std::cout.rdbuf(old);
382 const std::string& s =
"") {
384 std::stringstream buffer;
386 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
392 std::string actual_ = buffer.str();
393 std::cout.rdbuf(old);
Concept check for values that can be used in unit tests.
Included from all GTSAM files.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
bool assert_stdout_equal(const std::string &expected, const V &actual)
Capture std out via cout stream and compare against string.
Definition: TestableAssertions.h:359
bool assert_container_equal(const std::map< V1, V2 > &expected, const std::map< V1, V2 > &actual, double tol=1e-9)
Function for comparing maps of testable->testable TODO: replace with more generalized version.
Definition: TestableAssertions.h:119
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition: Matrix.cpp:43
bool assert_container_equality(const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual)
Function for comparing maps of size_t->testable Types are assumed to have operator ==.
Definition: TestableAssertions.h:266
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition: Matrix.cpp:63
bool assert_print_equal(const std::string &expected, const V &actual, const std::string &s="")
Capture print function output and compare against string.
Definition: TestableAssertions.h:381
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:100