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