1 #include "../UnitTest++.h"
2 #include "RecordingReporter.h"
3
4 using namespace UnitTest;
5
6
7 namespace {
8
9
TEST(CheckEqualWithUnsignedLong)10 TEST(CheckEqualWithUnsignedLong)
11 {
12 TestResults results;
13 unsigned long something = 2;
14 CHECK_EQUAL(something, something);
15 }
16
TEST(CheckEqualsWithStringsFailsOnDifferentStrings)17 TEST(CheckEqualsWithStringsFailsOnDifferentStrings)
18 {
19 char txt1[] = "Hello";
20 char txt2[] = "Hallo";
21 TestResults results;
22 CheckEqual(results, txt1, txt2, TestDetails("", "", "", 0));
23 CHECK_EQUAL(1, results.GetFailureCount());
24 }
25
26 char txt1[] = "Hello"; // non-const on purpose so no folding of duplicate data
27 char txt2[] = "Hello";
28
TEST(CheckEqualsWithStringsWorksOnContentsNonConstNonConst)29 TEST(CheckEqualsWithStringsWorksOnContentsNonConstNonConst)
30 {
31 char const* const p1 = txt1;
32 char const* const p2 = txt2;
33 TestResults results;
34 CheckEqual(results, p1, p2, TestDetails("", "", "", 0));
35 CHECK_EQUAL(0, results.GetFailureCount());
36 }
37
TEST(CheckEqualsWithStringsWorksOnContentsConstConst)38 TEST(CheckEqualsWithStringsWorksOnContentsConstConst)
39 {
40 char* const p1 = txt1;
41 char* const p2 = txt2;
42 TestResults results;
43 CheckEqual(results, p1, p2, TestDetails("", "", "", 0));
44 CHECK_EQUAL(0, results.GetFailureCount());
45 }
46
TEST(CheckEqualsWithStringsWorksOnContentsNonConstConst)47 TEST(CheckEqualsWithStringsWorksOnContentsNonConstConst)
48 {
49 char* const p1 = txt1;
50 char const* const p2 = txt2;
51 TestResults results;
52 CheckEqual(results, p1, p2, TestDetails("", "", "", 0));
53 CHECK_EQUAL(0, results.GetFailureCount());
54 }
55
TEST(CheckEqualsWithStringsWorksOnContentsConstNonConst)56 TEST(CheckEqualsWithStringsWorksOnContentsConstNonConst)
57 {
58 char const* const p1 = txt1;
59 char* const p2 = txt2;
60 TestResults results;
61 CheckEqual(results, p1, p2, TestDetails("", "", "", 0));
62 CHECK_EQUAL(0, results.GetFailureCount());
63 }
64
TEST(CheckEqualsWithStringsWorksOnContentsWithALiteral)65 TEST(CheckEqualsWithStringsWorksOnContentsWithALiteral)
66 {
67 char const* const p1 = txt1;
68 TestResults results;
69 CheckEqual(results, "Hello", p1, TestDetails("", "", "", 0));
70 CHECK_EQUAL(0, results.GetFailureCount());
71 }
72
TEST(CheckEqualFailureIncludesCheckExpectedAndActual)73 TEST(CheckEqualFailureIncludesCheckExpectedAndActual)
74 {
75 RecordingReporter reporter;
76 TestResults results(&reporter);
77 const int something = 2;
78 CheckEqual(results, 1, something, TestDetails("", "", "", 0));
79
80 using namespace std;
81 CHECK(strstr(reporter.lastFailedMessage, "xpected 1"));
82 CHECK(strstr(reporter.lastFailedMessage, "was 2"));
83 }
84
TEST(CheckEqualFailureIncludesDetails)85 TEST(CheckEqualFailureIncludesDetails)
86 {
87 RecordingReporter reporter;
88 TestResults results(&reporter);
89 TestDetails const details("mytest", "mysuite", "file.h", 101);
90
91 CheckEqual(results, 1, 2, details);
92
93 CHECK_EQUAL("mytest", reporter.lastFailedTest);
94 CHECK_EQUAL("mysuite", reporter.lastFailedSuite);
95 CHECK_EQUAL("file.h", reporter.lastFailedFile);
96 CHECK_EQUAL(101, reporter.lastFailedLine);
97 }
98
TEST(CheckCloseTrue)99 TEST(CheckCloseTrue)
100 {
101 TestResults results;
102 CheckClose(results, 3.001f, 3.0f, 0.1f, TestDetails("", "", "", 0));
103 CHECK_EQUAL(0, results.GetFailureCount());
104 }
105
TEST(CheckCloseFalse)106 TEST(CheckCloseFalse)
107 {
108 TestResults results;
109 CheckClose(results, 3.12f, 3.0f, 0.1f, TestDetails("", "", "", 0));
110 CHECK_EQUAL(1, results.GetFailureCount());
111 }
112
TEST(CheckCloseWithZeroEpsilonWorksForSameNumber)113 TEST(CheckCloseWithZeroEpsilonWorksForSameNumber)
114 {
115 TestResults results;
116 CheckClose(results, 0.1f, 0.1f, 0, TestDetails("", "", "", 0));
117 CHECK_EQUAL(0, results.GetFailureCount());
118 }
119
TEST(CheckCloseWithNaNFails)120 TEST(CheckCloseWithNaNFails)
121 {
122 union
123 {
124 unsigned int bitpattern;
125 float nan;
126 };
127 bitpattern = 0xFFFFFFFF;
128 TestResults results;
129 CheckClose(results, 3.0f, nan, 0.1f, TestDetails("", "", "", 0));
130 CHECK_EQUAL(1, results.GetFailureCount());
131 }
132
TEST(CheckCloseWithNaNAgainstItselfFails)133 TEST(CheckCloseWithNaNAgainstItselfFails)
134 {
135 union
136 {
137 unsigned int bitpattern;
138 float nan;
139 };
140 bitpattern = 0xFFFFFFFF;
141 TestResults results;
142 CheckClose(results, nan, nan, 0.1f, TestDetails("", "", "", 0));
143 CHECK_EQUAL(1, results.GetFailureCount());
144 }
145
TEST(CheckCloseFailureIncludesCheckExpectedAndActual)146 TEST(CheckCloseFailureIncludesCheckExpectedAndActual)
147 {
148 RecordingReporter reporter;
149 TestResults results(&reporter);
150 const float expected = 0.9f;
151 const float actual = 1.1f;
152 CheckClose(results, expected, actual, 0.01f, TestDetails("", "", "", 0));
153
154 using namespace std;
155 CHECK(strstr(reporter.lastFailedMessage, "xpected 0.9"));
156 CHECK(strstr(reporter.lastFailedMessage, "was 1.1"));
157 }
158
TEST(CheckCloseFailureIncludesTolerance)159 TEST(CheckCloseFailureIncludesTolerance)
160 {
161 RecordingReporter reporter;
162 TestResults results(&reporter);
163 CheckClose(results, 2, 3, 0.01f, TestDetails("", "", "", 0));
164
165 using namespace std;
166 CHECK(strstr(reporter.lastFailedMessage, "0.01"));
167 }
168
TEST(CheckCloseFailureIncludesDetails)169 TEST(CheckCloseFailureIncludesDetails)
170 {
171 RecordingReporter reporter;
172 TestResults results(&reporter);
173 TestDetails const details("mytest", "mysuite", "header.h", 10);
174
175 CheckClose(results, 2, 3, 0.01f, details);
176
177 CHECK_EQUAL("mytest", reporter.lastFailedTest);
178 CHECK_EQUAL("mysuite", reporter.lastFailedSuite);
179 CHECK_EQUAL("header.h", reporter.lastFailedFile);
180 CHECK_EQUAL(10, reporter.lastFailedLine);
181 }
182
183
TEST(CheckArrayEqualTrue)184 TEST(CheckArrayEqualTrue)
185 {
186 TestResults results;
187
188 int const array[3] = { 1, 2, 3 };
189 CheckArrayEqual(results, array, array, 3, TestDetails("", "", "", 0));
190 CHECK_EQUAL(0, results.GetFailureCount());
191 }
192
TEST(CheckArrayEqualFalse)193 TEST(CheckArrayEqualFalse)
194 {
195 TestResults results;
196
197 int const array1[3] = { 1, 2, 3 };
198 int const array2[3] = { 1, 2, 2 };
199 CheckArrayEqual(results, array1, array2, 3, TestDetails("", "", "", 0));
200 CHECK_EQUAL(1, results.GetFailureCount());
201 }
202
TEST(CheckArrayCloseTrue)203 TEST(CheckArrayCloseTrue)
204 {
205 TestResults results;
206
207 float const array1[3] = { 1.0f, 1.5f, 2.0f };
208 float const array2[3] = { 1.01f, 1.51f, 2.01f };
209 CheckArrayClose(results, array1, array2, 3, 0.02f, TestDetails("", "", "", 0));
210 CHECK_EQUAL(0, results.GetFailureCount());
211 }
212
TEST(CheckArrayCloseFalse)213 TEST(CheckArrayCloseFalse)
214 {
215 TestResults results;
216
217 float const array1[3] = { 1.0f, 1.5f, 2.0f };
218 float const array2[3] = { 1.01f, 1.51f, 2.01f };
219 CheckArrayClose(results, array1, array2, 3, 0.001f, TestDetails("", "", "", 0));
220 CHECK_EQUAL(1, results.GetFailureCount());
221 }
222
TEST(CheckArrayCloseFailureIncludesDetails)223 TEST(CheckArrayCloseFailureIncludesDetails)
224 {
225 RecordingReporter reporter;
226 TestResults results(&reporter);
227 TestDetails const details("arrayCloseTest", "arrayCloseSuite", "file", 1337);
228
229 float const array1[3] = { 1.0f, 1.5f, 2.0f };
230 float const array2[3] = { 1.01f, 1.51f, 2.01f };
231 CheckArrayClose(results, array1, array2, 3, 0.001f, details);
232
233 CHECK_EQUAL("arrayCloseTest", reporter.lastFailedTest);
234 CHECK_EQUAL("arrayCloseSuite", reporter.lastFailedSuite);
235 CHECK_EQUAL("file", reporter.lastFailedFile);
236 CHECK_EQUAL(1337, reporter.lastFailedLine);
237 }
238
239
TEST(CheckArray2DCloseTrue)240 TEST(CheckArray2DCloseTrue)
241 {
242 TestResults results;
243
244 float const array1[3][3] = { { 1.0f, 1.5f, 2.0f },
245 { 2.0f, 2.5f, 3.0f },
246 { 3.0f, 3.5f, 4.0f } };
247 float const array2[3][3] = { { 1.01f, 1.51f, 2.01f },
248 { 2.01f, 2.51f, 3.01f },
249 { 3.01f, 3.51f, 4.01f } };
250 CheckArray2DClose(results, array1, array2, 3, 3, 0.02f, TestDetails("", "", "", 0));
251 CHECK_EQUAL(0, results.GetFailureCount());
252 }
253
TEST(CheckArray2DCloseFalse)254 TEST(CheckArray2DCloseFalse)
255 {
256 TestResults results;
257
258 float const array1[3][3] = { { 1.0f, 1.5f, 2.0f },
259 { 2.0f, 2.5f, 3.0f },
260 { 3.0f, 3.5f, 4.0f } };
261 float const array2[3][3] = { { 1.01f, 1.51f, 2.01f },
262 { 2.01f, 2.51f, 3.01f },
263 { 3.01f, 3.51f, 4.01f } };
264 CheckArray2DClose(results, array1, array2, 3, 3, 0.001f, TestDetails("", "", "", 0));
265 CHECK_EQUAL(1, results.GetFailureCount());
266 }
267
TEST(CheckCloseWithDoublesSucceeds)268 TEST(CheckCloseWithDoublesSucceeds)
269 {
270 CHECK_CLOSE(0.5, 0.5, 0.0001);
271 }
272
TEST(CheckArray2DCloseFailureIncludesDetails)273 TEST(CheckArray2DCloseFailureIncludesDetails)
274 {
275 RecordingReporter reporter;
276 TestResults results(&reporter);
277 TestDetails const details("array2DCloseTest", "array2DCloseSuite", "file", 1234);
278
279 float const array1[3][3] = { { 1.0f, 1.5f, 2.0f },
280 { 2.0f, 2.5f, 3.0f },
281 { 3.0f, 3.5f, 4.0f } };
282 float const array2[3][3] = { { 1.01f, 1.51f, 2.01f },
283 { 2.01f, 2.51f, 3.01f },
284 { 3.01f, 3.51f, 4.01f } };
285 CheckArray2DClose(results, array1, array2, 3, 3, 0.001f, details);
286
287 CHECK_EQUAL("array2DCloseTest", reporter.lastFailedTest);
288 CHECK_EQUAL("array2DCloseSuite", reporter.lastFailedSuite);
289 CHECK_EQUAL("file", reporter.lastFailedFile);
290 CHECK_EQUAL(1234, reporter.lastFailedLine);
291 }
292
293 }
294