TestChecks.cpp 8.3 KB

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