135 lines
4.8 KiB
C++
135 lines
4.8 KiB
C++
#ifndef h_test_framework
|
|
#define h_test_framework
|
|
|
|
#ifndef TOL_EQ_TEST
|
|
#define TOL_EQ_TEST 1e-9
|
|
#endif
|
|
|
|
static size_t num_tests = 0;
|
|
static size_t num_tests_ok = 0;
|
|
static size_t num_tests_ko = 0;
|
|
|
|
#define PRINT_VAR(x) std::cout << #x << "\t= " << (x) << std::endl
|
|
|
|
// EXPECT_EQ macro
|
|
#define EXPECT_EQ(actual, expected) EXPECT_EQ_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_EQ_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
auto&& e = (expected); \
|
|
auto&& a = (actual); \
|
|
if (e != a) { \
|
|
std::cout << file << ":" << line << " : " << "Expected: " << (#expected) << " = " << e << ", actual: " << (#actual) << " = " << a << " " << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
else { \
|
|
num_tests_ok++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_DOUBLE_EQ macro
|
|
#define EXPECT_DOUBLE_EQ(actual, expected) EXPECT_DOUBLE_EQ_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_DOUBLE_EQ_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
double e = (expected); \
|
|
double a = (actual); \
|
|
if (std::abs(e - a) > TOL_EQ_TEST) { \
|
|
std::cout << file << ":" << line << " : " << "Expected: " << (#expected) << " = " << e << ", actual: " << (#actual) << " = " << a << " " << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
else { \
|
|
num_tests_ok++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_LT macro
|
|
#define EXPECT_LT(actual, expected) EXPECT_LT_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_LT_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
auto&& e = (expected); \
|
|
auto&& a = (actual); \
|
|
if (a < e) { \
|
|
num_tests_ok++; \
|
|
} \
|
|
else { \
|
|
std::cout << file << ":" << line << " : " << "Expected " << a << " < " << (#expected) << " = " << e << ", actual: " << (#actual) << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_LE macro
|
|
#define EXPECT_LE(actual, expected) EXPECT_LE_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_LE_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
auto&& e = (expected); \
|
|
auto&& a = (actual); \
|
|
if (a <= e) { \
|
|
num_tests_ok++; \
|
|
} \
|
|
else { \
|
|
std::cout << file << ":" << line << " : " << "Expected " << a << " <= " << (#expected) << " = " << e << ", actual: " << (#actual) << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_GT macro
|
|
#define EXPECT_GT(actual, expected) EXPECT_GT_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_GT_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
auto&& e = (expected); \
|
|
auto&& a = (actual); \
|
|
if (a > e) { \
|
|
num_tests_ok++; \
|
|
} \
|
|
else { \
|
|
std::cout << file << ":" << line << " : " << "Expected " << a << " > " << (#expected) << " = " << e << ", actual: " << (#actual) << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_GE macro
|
|
#define EXPECT_GE(actual, expected) EXPECT_GE_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_GE_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
num_tests++; \
|
|
auto&& e = (expected); \
|
|
auto&& a = (actual); \
|
|
if (a >= e) { \
|
|
num_tests_ok++; \
|
|
} \
|
|
else { \
|
|
std::cout << file << ":" << line << " : " << "Expected " << a << " >= " << (#expected) << " = " << e << ", actual: " << (#actual) << std::endl; \
|
|
num_tests_ko++; \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_VEC_EQ macro
|
|
#define EXPECT_VEC_EQ(actual, expected) EXPECT_VEC_EQ_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_VEC_EQ_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
for(unsigned int i = 0 ; i < (expected).size() ; i++) { \
|
|
EXPECT_DOUBLE_EQ_IMPL((actual)[i], (expected)[i], file, line); \
|
|
} \
|
|
} while (false)
|
|
|
|
// EXPECT_MAT_EQ macro
|
|
#define EXPECT_MAT_EQ(actual, expected) EXPECT_MAT_EQ_IMPL(actual, expected, __FILE__, __LINE__)
|
|
#define EXPECT_MAT_EQ_IMPL(actual, expected, file, line) \
|
|
do { \
|
|
for(unsigned int i = 0 ; i < (expected).rows() ; i++) { \
|
|
for(unsigned int j = 0 ; j < (expected).rows() ; j++) { \
|
|
EXPECT_DOUBLE_EQ_IMPL((actual)(i,j), (expected)(i,j), file, line); \
|
|
} \
|
|
} \
|
|
} while (false)
|
|
|
|
#define PRINT_TESTS_SUMMARY() \
|
|
do { \
|
|
std::cout << "Tests summary: " << num_tests << " tests in total\n " << num_tests_ok << "/" << num_tests << " OK (" << ((100.0*(double)num_tests_ok)/num_tests) << " %)\n " << num_tests_ko << "/" << num_tests << " KO (" << ((100.0*(double)num_tests_ko)/num_tests) << " %)" << std::endl; \
|
|
} while (false)
|
|
|
|
#endif
|