- #include "UnitTest++/UnitTestPP.h" 
- #include "RecordingReporter.h" 
-   
- #include <cstring> 
-   
- using namespace UnitTest; 
-   
-   
- namespace { 
-   
-   
-    TEST(CheckEqualWithUnsignedLong) 
-    { 
-       TestResults results; 
-       unsigned long something = 2; 
-       CHECK_EQUAL(something, something); 
-    } 
-   
-    TEST(CheckEqualsWithStringsFailsOnDifferentStrings) 
-    { 
-       char txt1[] = "Hello"; 
-       char txt2[] = "Hallo"; 
-       TestResults results; 
-       CheckEqual(results, txt1, txt2, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    char txt1[] = "Hello"; // non-const on purpose so no folding of duplicate data 
-    char txt2[] = "Hello"; 
-   
-    TEST(CheckEqualsWithStringsWorksOnContentsNonConstNonConst) 
-    { 
-       char const* const p1 = txt1; 
-       char const* const p2 = txt2; 
-       TestResults results; 
-       CheckEqual(results, p1, p2, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnContentsConstConst) 
-    { 
-       char* const p1 = txt1; 
-       char* const p2 = txt2; 
-       TestResults results; 
-       CheckEqual(results, p1, p2, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnContentsNonConstConst) 
-    { 
-       char* const p1 = txt1; 
-       char const* const p2 = txt2; 
-       TestResults results; 
-       CheckEqual(results, p1, p2, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnContentsConstNonConst) 
-    { 
-       char const* const p1 = txt1; 
-       char* const p2 = txt2; 
-       TestResults results; 
-       CheckEqual(results, p1, p2, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnContentsWithALiteral) 
-    { 
-       char const* const p1 = txt1; 
-       TestResults results; 
-       CheckEqual(results, "Hello", p1, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnNullExpected) 
-    { 
-       char const* const expected = "hi"; 
-       char const* const actual = NULL; 
-       TestResults results; 
-       CheckEqual(results, expected, actual, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL (1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnNullActual) 
-    { 
-       char const* const expected = NULL; 
-       char const* const actual = "hi"; 
-       TestResults results; 
-       CheckEqual(results, expected, actual, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL (1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualsWithStringsWorksOnNullExpectedAndActual) 
-    { 
-       char const* const expected = NULL; 
-       char const* const actual = NULL; 
-       TestResults results; 
-       CheckEqual(results, expected, actual, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL (0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckEqualFailureIncludesCheckExpectedAndActual) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       const int something = 2; 
-       CheckEqual(results, 1, something, TestDetails("", "", "", 0)); 
-   
-       using namespace std; 
-       CHECK(strstr(reporter.lastFailedMessage, "xpected 1")); 
-       CHECK(strstr(reporter.lastFailedMessage, "was 2")); 
-    } 
-   
-    TEST(CheckEqualFailureIncludesDetails) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       TestDetails const details("mytest", "mysuite", "file.h", 101); 
-   
-       CheckEqual(results, 1, 2, details); 
-   
-       CHECK_EQUAL("mytest", reporter.lastFailedTest); 
-       CHECK_EQUAL("mysuite", reporter.lastFailedSuite); 
-       CHECK_EQUAL("file.h", reporter.lastFailedFile); 
-       CHECK_EQUAL(101, reporter.lastFailedLine); 
-    } 
-   
-    TEST(CheckCloseTrue) 
-    { 
-       TestResults results; 
-       CheckClose(results, 3.001f, 3.0f, 0.1f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseFalse) 
-    { 
-       TestResults results; 
-       CheckClose(results, 3.12f, 3.0f, 0.1f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseWithZeroEpsilonWorksForSameNumber) 
-    { 
-       TestResults results; 
-       CheckClose(results, 0.1f, 0.1f, 0, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseWithNaNFails) 
-    { 
-       const unsigned int bitpattern = 0xFFFFFFFF; 
-       float nan; 
-       UNIITEST_NS_QUAL_STD(memcpy)(&nan, &bitpattern, sizeof(bitpattern)); 
-   
-       TestResults results; 
-       CheckClose(results, 3.0f, nan, 0.1f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseWithNaNAgainstItselfFails) 
-    { 
-       const unsigned int bitpattern = 0xFFFFFFFF; 
-       float nan; 
-       UNIITEST_NS_QUAL_STD(memcpy)(&nan, &bitpattern, sizeof(bitpattern)); 
-   
-       TestResults results; 
-       CheckClose(results, nan, nan, 0.1f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseFailureIncludesCheckExpectedAndActual) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       const float expected = 0.9f; 
-       const float actual = 1.1f; 
-       CheckClose(results, expected, actual, 0.01f, TestDetails("", "", "", 0)); 
-   
-       using namespace std; 
-       CHECK(strstr(reporter.lastFailedMessage, "xpected 0.9")); 
-       CHECK(strstr(reporter.lastFailedMessage, "was 1.1")); 
-    } 
-   
-    TEST(CheckCloseFailureIncludesTolerance) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       CheckClose(results, 2, 3, 0.01f, TestDetails("", "", "", 0)); 
-   
-       using namespace std; 
-       CHECK(strstr(reporter.lastFailedMessage, "0.01")); 
-    } 
-   
-    TEST(CheckCloseFailureIncludesDetails) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       TestDetails const details("mytest", "mysuite", "header.h", 10); 
-   
-       CheckClose(results, 2, 3, 0.01f, details); 
-   
-       CHECK_EQUAL("mytest", reporter.lastFailedTest); 
-       CHECK_EQUAL("mysuite", reporter.lastFailedSuite); 
-       CHECK_EQUAL("header.h", reporter.lastFailedFile); 
-       CHECK_EQUAL(10, reporter.lastFailedLine); 
-    } 
-   
-   
-    TEST(CheckArrayEqualTrue) 
-    { 
-       TestResults results; 
-   
-       int const array[3] = { 1, 2, 3 }; 
-       CheckArrayEqual(results, array, array, 3, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckArrayEqualFalse) 
-    { 
-       TestResults results; 
-   
-       int const array1[3] = { 1, 2, 3 }; 
-       int const array2[3] = { 1, 2, 2 }; 
-       CheckArrayEqual(results, array1, array2, 3, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckArrayCloseTrue) 
-    { 
-       TestResults results; 
-   
-       float const array1[3] = { 1.0f, 1.5f, 2.0f }; 
-       float const array2[3] = { 1.01f, 1.51f, 2.01f }; 
-       CheckArrayClose(results, array1, array2, 3, 0.02f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckArrayCloseFalse) 
-    { 
-       TestResults results; 
-   
-       float const array1[3] = { 1.0f, 1.5f, 2.0f }; 
-       float const array2[3] = { 1.01f, 1.51f, 2.01f }; 
-       CheckArrayClose(results, array1, array2, 3, 0.001f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckArrayCloseFailureIncludesDetails) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       TestDetails const details("arrayCloseTest", "arrayCloseSuite", "file", 1337); 
-   
-       float const array1[3] = { 1.0f, 1.5f, 2.0f }; 
-       float const array2[3] = { 1.01f, 1.51f, 2.01f }; 
-       CheckArrayClose(results, array1, array2, 3, 0.001f, details); 
-   
-       CHECK_EQUAL("arrayCloseTest", reporter.lastFailedTest); 
-       CHECK_EQUAL("arrayCloseSuite", reporter.lastFailedSuite); 
-       CHECK_EQUAL("file", reporter.lastFailedFile); 
-       CHECK_EQUAL(1337, reporter.lastFailedLine); 
-    } 
-   
-   
-    TEST(CheckArray2DCloseTrue) 
-    { 
-       TestResults results; 
-   
-       float const array1[3][3] = { { 1.0f, 1.5f, 2.0f }, 
-                                    { 2.0f, 2.5f, 3.0f }, 
-                                    { 3.0f, 3.5f, 4.0f } }; 
-       float const array2[3][3] = { { 1.01f, 1.51f, 2.01f }, 
-                                    { 2.01f, 2.51f, 3.01f }, 
-                                    { 3.01f, 3.51f, 4.01f } }; 
-       CheckArray2DClose(results, array1, array2, 3, 3, 0.02f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(0, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckArray2DCloseFalse) 
-    { 
-       TestResults results; 
-   
-       float const array1[3][3] = { { 1.0f, 1.5f, 2.0f }, 
-                                    { 2.0f, 2.5f, 3.0f }, 
-                                    { 3.0f, 3.5f, 4.0f } }; 
-       float const array2[3][3] = { { 1.01f, 1.51f, 2.01f }, 
-                                    { 2.01f, 2.51f, 3.01f }, 
-                                    { 3.01f, 3.51f, 4.01f } }; 
-       CheckArray2DClose(results, array1, array2, 3, 3, 0.001f, TestDetails("", "", "", 0)); 
-       CHECK_EQUAL(1, results.GetFailureCount()); 
-    } 
-   
-    TEST(CheckCloseWithDoublesSucceeds) 
-    { 
-       CHECK_CLOSE(0.5, 0.5, 0.0001); 
-    } 
-   
-    TEST(CheckArray2DCloseFailureIncludesDetails) 
-    { 
-       RecordingReporter reporter; 
-       TestResults results(&reporter); 
-       TestDetails const details("array2DCloseTest", "array2DCloseSuite", "file", 1234); 
-   
-       float const array1[3][3] = { { 1.0f, 1.5f, 2.0f }, 
-                                    { 2.0f, 2.5f, 3.0f }, 
-                                    { 3.0f, 3.5f, 4.0f } }; 
-       float const array2[3][3] = { { 1.01f, 1.51f, 2.01f }, 
-                                    { 2.01f, 2.51f, 3.01f }, 
-                                    { 3.01f, 3.51f, 4.01f } }; 
-       CheckArray2DClose(results, array1, array2, 3, 3, 0.001f, details); 
-   
-       CHECK_EQUAL("array2DCloseTest", reporter.lastFailedTest); 
-       CHECK_EQUAL("array2DCloseSuite", reporter.lastFailedSuite); 
-       CHECK_EQUAL("file", reporter.lastFailedFile); 
-       CHECK_EQUAL(1234, reporter.lastFailedLine); 
-    } 
-   
-    class TruthyUnlessCopied 
-    { 
-    public: 
-       TruthyUnlessCopied() 
-       : truthy_(true) 
-       { 
-       } 
-   
-       TruthyUnlessCopied(const TruthyUnlessCopied&) 
-       : truthy_(false) 
-       { 
-       } 
-   
-       operator bool() const 
-       { 
-          return truthy_; 
-       } 
-   
-    private: 
-       bool truthy_; 
-    }; 
-   
-    TEST(CheckProperlyDealsWithOperatorBoolOverrides) 
-    { 
-       TruthyUnlessCopied objectThatShouldBeTruthy; 
-       CHECK(objectThatShouldBeTruthy); 
-    } 
-   
- } 
-