Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   [Snippet] a Recursive Descent Parser via TDD - test.h (http://www.velocityreviews.com/forums/t284771-snippet-a-recursive-descent-parser-via-tdd-test-h.html)

Phlip 08-02-2004 07:59 PM

[Snippet] a Recursive Descent Parser via TDD - test.h
 
C++ newsgroupies:

I wrote a parser to solve math expressions like "3.0 ^(4 - 5)", or "3 / 8".
Below my sig is test.h, the file containing a tiny test framework. Using it
and Test-Driven Development, I produced the test suite and the parser,
appearing in parallel posts.

--
Phlip
http://industrialxp.org/community/bi...UserInterfaces


// a NanoCppUnit in one header...

#ifndef TEST_

# include <list>
# include <iostream>
# include <sstream>
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# include <math.h>

using std::cout;
using std::endl;
using std::stringstream;

class
TestCase
{
public:
typedef std::list<TestCase *> TestCases_t;
TestCases_t static cases; // TODO make me private

TestCase() { cases.push_back(this); }
virtual void setUp() {}
virtual void runCase() = 0;
virtual void tearDown() {}
static bool runTests();

protected:
static bool all_tests_passed;
};

bool
TestCase::runTests()
{
TestCase::TestCases_t::iterator it(TestCase::cases.begin());

for ( ; it != TestCase::cases.end(); ++it )
{
TestCase & aCase = **it;
aCase.setUp();
aCase.runCase();
aCase.tearDown();
}
return TestCase::all_tests_passed;
}

#define TEST_(suite, target) \
struct suite##target: virtual suite \
{ void runCase(); } \
a##suite##target; \
void suite##target::runCase()

#define CPPUNIT_ASSERT_EQUAL(sample, result) \
if ((sample) != (result)) { stringstream out; \
out << __FILE__ << "(" << __LINE__ << ") : "; \
out << #sample << "(" << (sample) << ") != "; \
out << #result << "(" << (result) << ")"; \
cout << out.str() << endl; \
OutputDebugStringA(out.str().c_str()); \
OutputDebugStringA("\n"); \
all_tests_passed = false; \
__asm { int 3 } }

bool tolerance(double Subject, double Reference)
{
return fabs(Subject - Reference) < (0.001 + fabs(Subject)) / 100;
}

#define CPPUNIT_ASSERT_CLOSE(sample, result) \
if (!tolerance(sample, result)) { stringstream out; \
out << __FILE__ << "(" << __LINE__ << ") : "; \
out << #sample << "(" << (sample) << ") != "; \
out << #result << "(" << (result) << ")"; \
cout << out.str() << endl; \
OutputDebugStringA(out.str().c_str()); \
OutputDebugStringA("\n"); \
all_tests_passed = false; \
__asm { int 3 } }

#endif





All times are GMT. The time now is 09:09 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.