| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #ifndef UNITTEST_CHECKS_H
- #define UNITTEST_CHECKS_H
- #include "Config.h"
- #include "TestResults.h"
- #include "MemoryOutStream.h"
- namespace UnitTest {
- template< typename Value >
- bool Check(Value const value)
- {
- return !!value; // doing double negative to avoid silly VS warnings
- }
- template< typename Expected, typename Actual >
- void CheckEqual(TestResults& results, Expected const& expected, Actual const& actual, TestDetails const& details)
- {
- if (!(expected == actual))
- {
- UnitTest::MemoryOutStream stream;
- stream << "Expected " << expected << " but was " << actual;
- results.OnTestFailure(details, stream.GetText());
- }
- }
- void CheckEqual(TestResults& results, char const* expected, char const* actual, TestDetails const& details);
- void CheckEqual(TestResults& results, char* expected, char* actual, TestDetails const& details);
- void CheckEqual(TestResults& results, char* expected, char const* actual, TestDetails const& details);
- void CheckEqual(TestResults& results, char const* expected, char* actual, TestDetails const& details);
- template< typename Expected, typename Actual, typename Tolerance >
- bool AreClose(Expected const& expected, Actual const& actual, Tolerance const& tolerance)
- {
- return (actual >= (expected - tolerance)) && (actual <= (expected + tolerance));
- }
- template< typename Expected, typename Actual, typename Tolerance >
- void CheckClose(TestResults& results, Expected const& expected, Actual const& actual, Tolerance const& tolerance,
- TestDetails const& details)
- {
- if (!AreClose(expected, actual, tolerance))
- {
- UnitTest::MemoryOutStream stream;
- stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual;
- results.OnTestFailure(details, stream.GetText());
- }
- }
- template< typename Expected, typename Actual >
- void CheckArrayEqual(TestResults& results, Expected const& expected, Actual const& actual,
- int const count, TestDetails const& details)
- {
- bool equal = true;
- for (int i = 0; i < count; ++i)
- equal &= (expected[i] == actual[i]);
- if (!equal)
- {
- UnitTest::MemoryOutStream stream;
- stream << "Expected [ ";
- for (int expectedIndex = 0; expectedIndex < count; ++expectedIndex)
- stream << expected[expectedIndex] << " ";
- stream << "] but was [ ";
- for (int actualIndex = 0; actualIndex < count; ++actualIndex)
- stream << actual[actualIndex] << " ";
- stream << "]";
- results.OnTestFailure(details, stream.GetText());
- }
- }
- template< typename Expected, typename Actual, typename Tolerance >
- bool ArrayAreClose(Expected const& expected, Actual const& actual, int const count, Tolerance const& tolerance)
- {
- bool equal = true;
- for (int i = 0; i < count; ++i)
- equal &= AreClose(expected[i], actual[i], tolerance);
- return equal;
- }
- template< typename Expected, typename Actual, typename Tolerance >
- void CheckArrayClose(TestResults& results, Expected const& expected, Actual const& actual,
- int const count, Tolerance const& tolerance, TestDetails const& details)
- {
- bool equal = ArrayAreClose(expected, actual, count, tolerance);
- if (!equal)
- {
- UnitTest::MemoryOutStream stream;
- stream << "Expected [ ";
- for (int expectedIndex = 0; expectedIndex < count; ++expectedIndex)
- stream << expected[expectedIndex] << " ";
- stream << "] +/- " << tolerance << " but was [ ";
- for (int actualIndex = 0; actualIndex < count; ++actualIndex)
- stream << actual[actualIndex] << " ";
- stream << "]";
- results.OnTestFailure(details, stream.GetText());
- }
- }
- template< typename Expected, typename Actual, typename Tolerance >
- void CheckArray2DClose(TestResults& results, Expected const& expected, Actual const& actual,
- int const rows, int const columns, Tolerance const& tolerance, TestDetails const& details)
- {
- bool equal = true;
- for (int i = 0; i < rows; ++i)
- equal &= ArrayAreClose(expected[i], actual[i], columns, tolerance);
- if (!equal)
- {
- UnitTest::MemoryOutStream stream;
- stream << "Expected [ ";
- for (int expectedRow = 0; expectedRow < rows; ++expectedRow)
- {
- stream << "[ ";
- for (int expectedColumn = 0; expectedColumn < columns; ++expectedColumn)
- stream << expected[expectedRow][expectedColumn] << " ";
- stream << "] ";
- }
- stream << "] +/- " << tolerance << " but was [ ";
- for (int actualRow = 0; actualRow < rows; ++actualRow)
- {
- stream << "[ ";
- for (int actualColumn = 0; actualColumn < columns; ++actualColumn)
- stream << actual[actualRow][actualColumn] << " ";
- stream << "] ";
- }
- stream << "]";
- results.OnTestFailure(details, stream.GetText());
- }
- }
- }
- #endif
|