root/library/tests/unittest-cpp/Checks.h @ 418

Revision 418, 4.8 kB (checked in by vbarta, 15 years ago)

#27: added UnitTest?++ to bdm sources, changed test_user_data to use it

Line 
1#ifndef UNITTEST_CHECKS_H
2#define UNITTEST_CHECKS_H
3
4#include "Config.h"
5#include "TestResults.h"
6#include "MemoryOutStream.h"
7
8namespace UnitTest {
9
10
11template< typename Value >
12bool Check(Value const value)
13{
14    return !!value; // doing double negative to avoid silly VS warnings
15}
16
17
18template< typename Expected, typename Actual >
19void CheckEqual(TestResults& results, Expected const& expected, Actual const& actual, TestDetails const& details)
20{
21    if (!(expected == actual))
22    {
23        UnitTest::MemoryOutStream stream;
24        stream << "Expected " << expected << " but was " << actual;
25
26        results.OnTestFailure(details, stream.GetText());
27    }
28}
29
30void CheckEqual(TestResults& results, char const* expected, char const* actual, TestDetails const& details);
31
32void CheckEqual(TestResults& results, char* expected, char* actual, TestDetails const& details);
33
34void CheckEqual(TestResults& results, char* expected, char const* actual, TestDetails const& details);
35
36void CheckEqual(TestResults& results, char const* expected, char* actual, TestDetails const& details);
37
38template< typename Expected, typename Actual, typename Tolerance >
39bool AreClose(Expected const& expected, Actual const& actual, Tolerance const& tolerance)
40{
41    return (actual >= (expected - tolerance)) && (actual <= (expected + tolerance));
42}
43
44template< typename Expected, typename Actual, typename Tolerance >
45void CheckClose(TestResults& results, Expected const& expected, Actual const& actual, Tolerance const& tolerance,
46                TestDetails const& details)
47{
48    if (!AreClose(expected, actual, tolerance))
49    { 
50        UnitTest::MemoryOutStream stream;
51        stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual;
52
53        results.OnTestFailure(details, stream.GetText());
54    }
55}
56
57
58template< typename Expected, typename Actual >
59void CheckArrayEqual(TestResults& results, Expected const& expected, Actual const& actual,
60                int const count, TestDetails const& details)
61{
62    bool equal = true;
63    for (int i = 0; i < count; ++i)
64        equal &= (expected[i] == actual[i]);
65
66    if (!equal)
67    {
68        UnitTest::MemoryOutStream stream;
69
70                stream << "Expected [ ";
71
72                for (int expectedIndex = 0; expectedIndex < count; ++expectedIndex)
73            stream << expected[expectedIndex] << " ";
74
75                stream << "] but was [ ";
76
77                for (int actualIndex = 0; actualIndex < count; ++actualIndex)
78            stream << actual[actualIndex] << " ";
79
80                stream << "]";
81
82        results.OnTestFailure(details, stream.GetText());
83    }
84}
85
86template< typename Expected, typename Actual, typename Tolerance >
87bool ArrayAreClose(Expected const& expected, Actual const& actual, int const count, Tolerance const& tolerance)
88{
89    bool equal = true;
90    for (int i = 0; i < count; ++i)
91        equal &= AreClose(expected[i], actual[i], tolerance);
92    return equal;
93}
94
95template< typename Expected, typename Actual, typename Tolerance >
96void CheckArrayClose(TestResults& results, Expected const& expected, Actual const& actual,
97                   int const count, Tolerance const& tolerance, TestDetails const& details)
98{
99    bool equal = ArrayAreClose(expected, actual, count, tolerance);
100
101    if (!equal)
102    {
103        UnitTest::MemoryOutStream stream;
104
105        stream << "Expected [ ";
106        for (int expectedIndex = 0; expectedIndex < count; ++expectedIndex)
107            stream << expected[expectedIndex] << " ";
108        stream << "] +/- " << tolerance << " but was [ ";
109
110                for (int actualIndex = 0; actualIndex < count; ++actualIndex)
111            stream << actual[actualIndex] << " ";
112        stream << "]";
113
114        results.OnTestFailure(details, stream.GetText());
115    }
116}
117
118template< typename Expected, typename Actual, typename Tolerance >
119void CheckArray2DClose(TestResults& results, Expected const& expected, Actual const& actual,
120                   int const rows, int const columns, Tolerance const& tolerance, TestDetails const& details)
121{
122    bool equal = true;
123    for (int i = 0; i < rows; ++i)
124        equal &= ArrayAreClose(expected[i], actual[i], columns, tolerance);
125
126    if (!equal)
127    {
128        UnitTest::MemoryOutStream stream;
129
130        stream << "Expected [ ";   
131
132                for (int expectedRow = 0; expectedRow < rows; ++expectedRow)
133        {
134            stream << "[ ";
135            for (int expectedColumn = 0; expectedColumn < columns; ++expectedColumn)
136                stream << expected[expectedRow][expectedColumn] << " ";
137            stream << "] ";
138        }
139
140                stream << "] +/- " << tolerance << " but was [ ";
141
142                for (int actualRow = 0; actualRow < rows; ++actualRow)
143        {
144            stream << "[ ";
145            for (int actualColumn = 0; actualColumn < columns; ++actualColumn)
146                stream << actual[actualRow][actualColumn] << " ";
147            stream << "] ";
148        }
149
150                stream << "]";
151
152        results.OnTestFailure(details, stream.GetText());
153    }
154}
155
156}
157
158#endif
Note: See TracBrowser for help on using the browser.