// Source: "Software Design ...", John A Robinson, Newnes, 2004, page 392. // Testing functions for stable class (v 0.1) // John Robinson, 25 August 2003 #include #include using namespace std; template int testval(T actual, T expected, char *name) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << " = " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } int test(int actual, int expected, char *name) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "() returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } template int test(int actual, int expected, char *name, T param1) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "(" << param1 << ") returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } template int test(int actual, int expected, char *name, S param1, T param2) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "(" << param1; cout << "," << param2 << ") returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } template int test(int actual, int expected, char *name, R param1, S param2, T param3) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "(" << param1 << "," << param2; cout << "," << param3 << ") returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } template int test(int actual, int expected, char *name, Q param1, R param2, S param3, T param4) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "(" << param1 << "," << param2; cout << "," << param3 << "," << param4; cout << ") returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } template int test(int actual, int expected, char *name, P param1, Q param2, R param3, S param4, T param5) { if (actual == expected) cout << " OK "; else cout << "**ERROR** "; cout << name << "(" << param1 << "," << param2; cout << "," << param3 << "," << param4; cout << "," << param5 << ") returned " << actual; if (actual != expected) cout << "(expected " << expected << ")"; cout << endl; } // See info cpp for explanation of syntax of next line #define TEST(a,b, ...) test( b ( __VA_ARGS__ ) , a , #b , __VA_ARGS__ ) #define TESTVAL(a,b) testval( b , a , #b )