0001 #ifndef INTERNAL_CPP_ASSERTIONS_HEADER
0002 #define INTERNAL_CPP_ASSERTIONS_HEADER
0003
0004 #include <cgreen/constraint.h>
0005 #include <stdint.h>
0006 #include <string>
0007 #include <typeinfo>
0008
0009 namespace cgreen {
0010
0011 #define assert_that_constraint(actual, constraint) assert_that_(__FILE__, __LINE__, #actual, actual, constraint)
0012
0013 void assert_that_(const char *file, int line, const char *actual_string, const std::string& actual, Constraint *constraint);
0014 void assert_that_(const char *file, int line, const char *actual_string, const std::string *actual, Constraint *constraint);
0015
0016
0017 void assert_that_(const char *file, int line, const char *actual_string, intptr_t actual, Constraint *constraint);
0018
0019 template <typename T> void assert_that_(const char *file, int line, const char *actual_string, T actual, Constraint *constraint) {
0020
0021 if (typeid(actual) == typeid(std::string&) ||
0022 typeid(actual) == typeid(const std::string&) ||
0023 typeid(actual) == typeid(const std::string*) ||
0024 typeid(actual) == typeid(std::string*)) {
0025
0026 assert_that_(file, line, actual_string, reinterpret_cast<const std::string *>(actual), constraint);
0027
0028 } else if (typeid(actual) == typeid(std::string)) {
0029
0030 assert_that_(file, line, actual_string, (const std::string *)&actual, constraint);
0031
0032 } else {
0033
0034 assert_that_(file, line, actual_string, (intptr_t)actual, constraint);
0035 }
0036 }
0037 }
0038
0039 #endif