87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // TEST.H
 | |
| // 
 | |
| // This file contains the Test class along with the macros which make effective
 | |
| // in the harness.
 | |
| //
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef TEST_H
 | |
| #define TEST_H
 | |
| 
 | |
| 
 | |
| #include <cmath>
 | |
| #include "SimpleString.h"
 | |
| 
 | |
| class TestResult;
 | |
| 
 | |
| 
 | |
| 
 | |
| class Test
 | |
| {
 | |
| public:
 | |
| 	Test (const SimpleString& testName);
 | |
|   virtual ~Test() {};
 | |
| 
 | |
| 	virtual void	run (TestResult& result) = 0;
 | |
| 
 | |
| 
 | |
| 	void			setNext(Test *test);
 | |
| 	Test			*getNext () const;
 | |
| 
 | |
| protected:
 | |
| 
 | |
| 	bool check (long expected, long actual, TestResult& result, const SimpleString& fileName, long lineNumber);
 | |
| 	bool check (const SimpleString& expected, const SimpleString& actual, TestResult& result, const SimpleString& fileName, long lineNumber);
 | |
| 
 | |
| 	SimpleString	name_;
 | |
| 	Test			*next_;
 | |
| 
 | |
| };
 | |
| 
 | |
| 
 | |
| #define TEST(testName, testGroup)\
 | |
|   class testGroup##testName##Test : public Test \
 | |
| 	{ public: testGroup##testName##Test () : Test (#testName "Test") {} \
 | |
|             void run (TestResult& result_);} \
 | |
|     testGroup##testName##Instance; \
 | |
| 	void testGroup##testName##Test::run (TestResult& result_) 
 | |
| 
 | |
| 
 | |
| 
 | |
| #define CHECK(condition)\
 | |
| { if (!(condition)) \
 | |
| { result_.addFailure (Failure (name_, __FILE__,__LINE__, #condition)); return; } }
 | |
| 
 | |
| 
 | |
| 
 | |
| #define CHECK_EQUAL(expected,actual)\
 | |
| { if ((expected) == (actual)) return; result_.addFailure(Failure(name_, __FILE__, __LINE__, StringFrom(expected), StringFrom(actual))); }
 | |
| 
 | |
| 
 | |
| #define LONGS_EQUAL(expected,actual)\
 | |
| { long actualTemp = actual; \
 | |
|   long expectedTemp = expected; \
 | |
|   if ((expectedTemp) != (actualTemp)) \
 | |
| { result_.addFailure (Failure (name_, __FILE__, __LINE__, StringFrom(expectedTemp), \
 | |
| StringFrom(actualTemp))); return; } }
 | |
| 
 | |
| 
 | |
| 
 | |
| #define DOUBLES_EQUAL(expected,actual,threshold)\
 | |
| { double actualTemp = actual; \
 | |
|   double expectedTemp = expected; \
 | |
|   if (fabs ((expectedTemp)-(actualTemp)) > threshold) \
 | |
| { result_.addFailure (Failure (name_, __FILE__, __LINE__, \
 | |
| StringFrom((double)expectedTemp), StringFrom((double)actualTemp))); return; } }
 | |
| 
 | |
| 
 | |
| 
 | |
| #define FAIL(text) \
 | |
| { result_.addFailure (Failure (name_, __FILE__, __LINE__,(text))); return; }
 | |
| 
 | |
| 
 | |
| 
 | |
| #endif
 |