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
 |