G+Smo  24.08.0
Geometry + Simulation Modules
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Checks.h
1 #ifndef UNITTEST_CHECKS_H
2 #define UNITTEST_CHECKS_H
3 
4 #include "Config.h"
5 #include "TestResults.h"
6 #include "MemoryOutStream.h"
7 
8 namespace UnitTest {
9 
10 
11 template< typename Value >
12 bool Check(Value const value)
13 {
14  return !!value; // doing double negative to avoid silly VS warnings
15 }
16 
17 
18 template< typename Expected, typename Actual >
19 void 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 
30 UNITTEST_LINKAGE void CheckEqual(TestResults& results, char const* expected, char const* actual, TestDetails const& details);
31 
32 UNITTEST_LINKAGE void CheckEqual(TestResults& results, char* expected, char* actual, TestDetails const& details);
33 
34 UNITTEST_LINKAGE void CheckEqual(TestResults& results, char* expected, char const* actual, TestDetails const& details);
35 
36 UNITTEST_LINKAGE void CheckEqual(TestResults& results, char const* expected, char* actual, TestDetails const& details);
37 
38 template< typename Expected, typename Actual, typename Tolerance >
39 bool AreClose(Expected const& expected, Actual const& actual, Tolerance const& tolerance)
40 {
41  return (actual >= (expected - tolerance)) && (actual <= (expected + tolerance));
42 }
43 
44 template< typename Expected, typename Actual, typename Tolerance >
45 void 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 
58 template< typename Expected, typename Actual >
59 void 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 
86 template< typename Expected, typename Actual, typename Tolerance >
87 bool 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 
95 template< typename Expected, typename Actual, typename Tolerance >
96 void 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 
118 template< typename Expected, typename Actual, typename Tolerance >
119 void 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