Created
October 4, 2019 08:37
-
-
Save andreysolovyev381/b43fc49a66faf9b033971b6674d00c66 to your computer and use it in GitHub Desktop.
Utils for running a simple Unit Test for any func. Usually "void TestSomething()"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* usage: | |
* TestRunner tr; | |
* RUN_TEST(tr, FUNC_NAME); | |
* | |
*/ | |
template<class T, class U> | |
void AssertEqual(const T& t, const U& u, const string& hint = {}) { | |
if (!(t == u)) { | |
ostringstream os; | |
os << "Assertion failed: " << t << " != " << u; | |
if (!hint.empty()) { | |
os << " hint: " << hint; | |
} | |
throw runtime_error(os.str()); | |
} | |
} | |
inline void Assert(bool b, const string& hint) { | |
AssertEqual(b, true, hint); | |
} | |
class TestRunner { | |
public: | |
template <class TestFunc> | |
void RunTest(TestFunc func, const string& test_name) { | |
try { | |
func(); | |
cerr << test_name << " OK" << endl; | |
} catch (exception& e) { | |
++fail_count; | |
cerr << test_name << " fail: " << e.what() << endl; | |
} catch (...) { | |
++fail_count; | |
cerr << "Unknown exception caught" << endl; | |
} | |
} | |
~TestRunner() { | |
if (fail_count > 0) { | |
cerr << fail_count << " unit tests failed. Terminate" << endl; | |
exit(1); | |
} | |
} | |
private: | |
int fail_count = 0; | |
}; | |
#define ASSERT_EQUAL(x, y) { \ | |
ostringstream __os__; \ | |
__os__ << #x << " != " << #y << ", " \ | |
<< __FILE__ << ":" << __LINE__; \ | |
AssertEqual(x, y, __os__.str()); \ | |
} | |
#define ASSERT(x) { \ | |
ostringstream os; \ | |
os << #x << " is false, " \ | |
<< __FILE__ << ":" << __LINE__; \ | |
Assert(x, os.str()); \ | |
} | |
#define RUN_TEST(tr, func) \ | |
tr.RunTest(func, #func) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment