ITK
6.0.0
Insight Toolkit
ITK
Modules
Core
TestKernel
include
itkTestingMacros.h
Go to the documentation of this file.
1
/*=========================================================================
2
*
3
* Copyright NumFOCUS
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* https://www.apache.org/licenses/LICENSE-2.0.txt
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*
17
*=========================================================================*/
18
19
#ifndef itkTestingMacros_h
20
#define itkTestingMacros_h
21
22
#include "
itkMacro.h
"
23
24
#include <cstring>
25
30
namespace
itk
31
{
32
// end namespace itk - this is here for documentation purposes
33
}
34
35
// DEPRECATED: These macros are left here for compatibility.
36
// In the future, they will be removed in favor of the "ITK_" prefixed
37
// versions.
38
#define EXERCISE_BASIC_OBJECT_METHODS \
39
static_assert(false, "Replace EXERCISE_BASIC_OBJECT_METHODS with ITK_EXERCISE_BASIC_OBJECT_METHODS")
40
#define TRY_EXPECT_EXCEPTION static_assert(false, "Replace TRY_EXPECT_EXCEPTION with ITK_TRY_EXPECT_EXCEPTION")
41
#define TRY_EXPECT_NO_EXCEPTION static_assert(fasle, "Replace TRY_EXPECT_NO_EXCEPTION with ITK_TRY_EXPECT_NO_EXCEPTION")
42
#define TEST_EXPECT_TRUE_STATUS_VALUE \
43
static_assert(false, "Replace TEST_EXPECT_TRUE_STATUS_VALUE with ITK_TEST_EXPECT_TRUE_STATUS_VALUE")
44
#define TEST_EXPECT_TRUE static_assert(false, "Replace TEST_EXPECT_TRUE with ITK_TEST_EXPECT_TRUE")
45
#define TEST_EXPECT_EQUAL_STATUS_VALUE "Replace TEST_EXPECT_EQUAL_STATUS_VALUE with ITK_TEST_EXPECT_EQUAL_STATUS_VALUE"
46
#define TEST_EXPECT_EQUAL static_assert(false, "Replace TEST_EXPECT_EQUAL with ITK_TEST_EXPECT_EQUAL")
47
#define TEST_SET_GET static_assert(false, "Replace TEST_SET_GET with ITK_TEST_SET_GET")
48
#define TEST_SET_GET_VALUE static_assert(false, "Replace TEST_SET_GET_VALUE with ITK_TEST_SET_GET_VALUE")
49
#define TEST_SET_GET_NULL_VALUE static_assert(false, "Replace TEST_SET_GET_NULL_VALUE with ITK_TEST_SET_GET_NULL_VALUE")
50
#define TEST_SET_GET_BOOLEAN static_assert(false, "Replace TEST_SET_GET_BOOLEAN with ITK_TEST_SET_GET_BOOLEAN")
51
52
53
/* clang-format off */
54
#if defined(__GNUC__)
55
#define ITK_EXERCISE_BASIC_OBJECT_METHODS(object, ClassName, SuperclassName) \
56
object->Print(std::cout); \
57
std::cout << "Name of Class = " << object->GetNameOfClass() << std::endl; \
58
ITK_MACROEND_NOOP_STATEMENT
59
#else // not GCC
60
#define ITK_EXERCISE_BASIC_OBJECT_METHODS(object, ClassName, SuperclassName) \
61
object->Print(std::cout); \
62
std::cout << "Name of Class = " << object->Self::GetNameOfClass() << std::endl; \
63
std::cout << "Name of Superclass = " << object->Superclass::GetNameOfClass() << std::endl; \
64
if (!std::strcmp(object->Self::GetNameOfClass(), #ClassName)) \
65
{ \
66
std::cout << "Class name is correct" << std::endl; \
67
} \
68
else \
69
{ \
70
std::cerr << "Class name provided does not match object's NameOfClass" << std::endl; \
71
return EXIT_FAILURE; \
72
} \
73
if (!std::strcmp(object->Superclass::GetNameOfClass(), #SuperclassName)) \
74
{ \
75
std::cout << "Superclass name is correct" << std::endl; \
76
} \
77
else \
78
{ \
79
std::cerr << "Superclass name provided does not match object's Superclass::NameOfClass" << std::endl; \
80
return EXIT_FAILURE; \
81
} \
82
ITK_MACROEND_NOOP_STATEMENT
83
#endif // GCC
84
/* clang-format on */
85
86
#define ITK_TRY_EXPECT_EXCEPTION(command) \
87
try \
88
{ \
89
std::cout << "Trying " << #command << std::endl; \
90
command; \
91
std::cerr << "Failed to catch expected exception" << std::endl; \
92
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
93
return EXIT_FAILURE; \
94
} \
95
catch (const itk::ExceptionObject & excp) \
96
{ \
97
std::cout << "Caught expected exception" << std::endl; \
98
std::cout << excp << std::endl; \
99
} \
100
ITK_MACROEND_NOOP_STATEMENT
101
102
103
#define ITK_TRY_EXPECT_NO_EXCEPTION(command) \
104
try \
105
{ \
106
std::cout << "Trying " << #command << std::endl; \
107
command; \
108
} \
109
catch (const itk::ExceptionObject & excp) \
110
{ \
111
std::cerr << excp << std::endl; \
112
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
113
return EXIT_FAILURE; \
114
} \
115
ITK_MACROEND_NOOP_STATEMENT
116
117
#define ITK_TEST_EXPECT_TRUE_STATUS_VALUE(command, statusVal) \
118
{ \
119
ITK_GCC_PRAGMA_PUSH \
120
ITK_GCC_SUPPRESS_Wfloat_equal \
121
bool _ITK_TEST_EXPECT_TRUE_command(command); \
122
ITK_GCC_PRAGMA_POP \
123
if (!(_ITK_TEST_EXPECT_TRUE_command)) \
124
{ \
125
std::cerr << "Error in " << #command << std::endl; \
126
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
127
std::cerr << "Expected true" << std::endl; \
128
std::cerr << " but got " << _ITK_TEST_EXPECT_TRUE_command << std::endl; \
129
statusVal = EXIT_FAILURE; \
130
} \
131
} \
132
ITK_MACROEND_NOOP_STATEMENT
133
134
#define ITK_TEST_EXPECT_TRUE(command) \
135
{ \
136
ITK_GCC_PRAGMA_PUSH \
137
ITK_GCC_SUPPRESS_Wfloat_equal \
138
bool _ITK_TEST_EXPECT_TRUE_command(command); \
139
ITK_GCC_PRAGMA_POP \
140
if (!(_ITK_TEST_EXPECT_TRUE_command)) \
141
{ \
142
std::cerr << "Error in " << #command << std::endl; \
143
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
144
std::cerr << "Expected true" << std::endl; \
145
std::cerr << " but got " << _ITK_TEST_EXPECT_TRUE_command << std::endl; \
146
return EXIT_FAILURE; \
147
} \
148
} \
149
ITK_MACROEND_NOOP_STATEMENT
150
151
152
#define ITK_TEST_EXPECT_EQUAL_STATUS_VALUE(lh, rh, statusVal) \
153
{ \
154
ITK_GCC_PRAGMA_PUSH \
155
ITK_GCC_SUPPRESS_Wfloat_equal \
156
bool _ITK_TEST_EXPECT_EQUAL_result((lh) == (rh)); \
157
ITK_GCC_PRAGMA_POP \
158
if (!(_ITK_TEST_EXPECT_EQUAL_result)) \
159
{ \
160
std::cerr << "Error in " << #lh << " == " << #rh << std::endl; \
161
std::cerr << "\tIn " __FILE__ ", line " << __LINE__ << std::endl; \
162
std::cerr << "\tlh: " << (lh) << std::endl; \
163
std::cerr << "\trh: " << (rh) << std::endl; \
164
std::cerr << "Expression is not equal" << std::endl; \
165
statusVal = EXIT_FAILURE; \
166
} \
167
} \
168
ITK_MACROEND_NOOP_STATEMENT
169
170
#define ITK_TEST_EXPECT_EQUAL(lh, rh) \
171
{ \
172
ITK_GCC_PRAGMA_PUSH \
173
ITK_GCC_SUPPRESS_Wfloat_equal \
174
bool _ITK_TEST_EXPECT_EQUAL_result((lh) == (rh)); \
175
ITK_GCC_PRAGMA_POP \
176
if (!(_ITK_TEST_EXPECT_EQUAL_result)) \
177
{ \
178
std::cerr << "Error in " << #lh << " == " << #rh << std::endl; \
179
std::cerr << "\tIn " __FILE__ ", line " << __LINE__ << std::endl; \
180
std::cerr << "\tlh: " << (lh) << std::endl; \
181
std::cerr << "\trh: " << (rh) << std::endl; \
182
std::cerr << "Expression is not equal" << std::endl; \
183
return EXIT_FAILURE; \
184
} \
185
} \
186
ITK_MACROEND_NOOP_STATEMENT
187
188
189
#define ITK_TEST_SET_GET(variable, command) \
190
if (variable != command) \
191
{ \
192
std::cerr << "Error in " << #command << std::endl; \
193
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
194
std::cerr << "Expected " << variable.GetPointer() << std::endl; \
195
std::cerr << "but got " << command << std::endl; \
196
return EXIT_FAILURE; \
197
} \
198
ITK_MACROEND_NOOP_STATEMENT
199
200
201
#define ITK_TEST_SET_GET_VALUE(variable, command) \
202
ITK_GCC_PRAGMA_PUSH \
203
ITK_GCC_SUPPRESS_Wfloat_equal \
204
if (variable != command) \
205
{ \
206
std::cerr << "Error in " << #command << std::endl; \
207
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
208
std::cerr << "Expected " << variable << std::endl; \
209
std::cerr << "but got " << command << std::endl; \
210
return EXIT_FAILURE; \
211
} \
212
ITK_GCC_PRAGMA_POP \
213
ITK_MACROEND_NOOP_STATEMENT
214
215
#define ITK_TEST_SET_GET_NULL_VALUE(command) \
216
if (nullptr != command) \
217
{ \
218
std::cerr << "Error in " << #command << std::endl; \
219
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
220
std::cerr << "Expected " \
221
<< "nullptr" << std::endl; \
222
std::cerr << "but got " << command << std::endl; \
223
return EXIT_FAILURE; \
224
} \
225
ITK_MACROEND_NOOP_STATEMENT
226
227
#define ITK_TEST_SET_GET_BOOLEAN(object, variable, value) \
228
object->Set##variable(false); \
229
object->Set##variable(true); \
230
if (object->Get##variable() != 1) \
231
{ \
232
std::cerr << "Error in Set/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
233
<< " instead of 1" << std::endl; \
234
return EXIT_FAILURE; \
235
} \
236
object->Set##variable(false); \
237
if (object->Get##variable() != 0) \
238
{ \
239
std::cerr << "Error in Set/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
240
<< " instead of 0" << std::endl; \
241
return EXIT_FAILURE; \
242
} \
243
object->variable##On(); \
244
if (object->Get##variable() != 1) \
245
{ \
246
std::cerr << "Error in On/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
247
<< " instead of 1" << std::endl; \
248
return EXIT_FAILURE; \
249
} \
250
object->variable##Off(); \
251
if (object->Get##variable() != 0) \
252
{ \
253
std::cerr << "Error in Off/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
254
<< " instead of 0" << std::endl; \
255
return EXIT_FAILURE; \
256
} \
257
object->Set##variable(value)
258
262
#define itkNameOfTestExecutableMacro(argv) \
263
[argv](const std::string & functionName) { \
264
return ((argv == nullptr) || (argv[0] == nullptr) || (argv[0][0] == '\0')) ? ("<" + functionName + " executable>") \
265
: argv[0]; \
266
}(__func__)
267
268
#endif
itkMacro.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition:
itkAnatomicalOrientation.h:29
Generated on
unknown
for ITK by
1.8.16