ITK
5.4.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
#if defined(ITK_FUTURE_LEGACY_REMOVE)
39
40
# if defined(__clang__) || defined(__GNUC__)
41
# pragma GCC poison EXERCISE_BASIC_OBJECT_METHODS
42
# pragma GCC poison TRY_EXPECT_EXCEPTION
43
# pragma GCC poison TRY_EXPECT_NO_EXCEPTION
44
# pragma GCC poison TEST_EXPECT_TRUE_STATUS_VALUE
45
# pragma GCC poison TEST_EXPECT_TRUE
46
# pragma GCC poison TEST_EXPECT_EQUAL_STATUS_VALUE
47
# pragma GCC poison TEST_EXPECT_EQUAL
48
# pragma GCC poison TEST_SET_GET
49
# pragma GCC poison TEST_SET_GET_VALUE
50
# pragma GCC poison TEST_SET_GET_NULL_VALUE
51
# pragma GCC poison TEST_SET_GET_BOOLEAN
52
# else
53
# define EXERCISE_BASIC_OBJECT_METHODS "Replace EXERCISE_BASIC_OBJECT_METHODS with ITK_EXERCISE_BASIC_OBJECT_METHODS"
54
# define TRY_EXPECT_EXCEPTION "Replace TRY_EXPECT_EXCEPTION with ITK_TRY_EXPECT_EXCEPTION"
55
# define TRY_EXPECT_NO_EXCEPTION "Replace TRY_EXPECT_NO_EXCEPTION with ITK_TRY_EXPECT_NO_EXCEPTION"
56
# define TEST_EXPECT_TRUE_STATUS_VALUE "Replace TEST_EXPECT_TRUE_STATUS_VALUE with ITK_TEST_EXPECT_TRUE_STATUS_VALUE"
57
# define TEST_EXPECT_TRUE "Replace TEST_EXPECT_TRUE with ITK_TEST_EXPECT_TRUE"
58
# define TEST_EXPECT_EQUAL_STATUS_VALUE \
59
"Replace TEST_EXPECT_EQUAL_STATUS_VALUE with ITK_TEST_EXPECT_EQUAL_STATUS_VALUE"
60
# define TEST_EXPECT_EQUAL "Replace TEST_EXPECT_EQUAL with ITK_TEST_EXPECT_EQUAL"
61
# define TEST_SET_GET "Replace TEST_SET_GET with ITK_TEST_SET_GET"
62
# define TEST_SET_GET_VALUE "Replace TEST_SET_GET_VALUE with ITK_TEST_SET_GET_VALUE"
63
# define TEST_SET_GET_NULL_VALUE "Replace TEST_SET_GET_NULL_VALUE with ITK_TEST_SET_GET_NULL_VALUE"
64
# define TEST_SET_GET_BOOLEAN "Replace TEST_SET_GET_BOOLEAN with ITK_TEST_SET_GET_BOOLEAN"
65
# endif
66
#else
67
# define EXERCISE_BASIC_OBJECT_METHODS ITK_EXERCISE_BASIC_OBJECT_METHODS
68
# define TRY_EXPECT_EXCEPTION ITK_TRY_EXPECT_EXCEPTION
69
# define TRY_EXPECT_NO_EXCEPTION ITK_TRY_EXPECT_NO_EXCEPTION
70
# define TEST_EXPECT_TRUE_STATUS_VALUE ITK_TEST_EXPECT_TRUE_STATUS_VALUE
71
# define TEST_EXPECT_TRUE ITK_TEST_EXPECT_TRUE
72
# define TEST_EXPECT_EQUAL_STATUS_VALUE ITK_TEST_EXPECT_EQUAL_STATUS_VALUE
73
# define TEST_EXPECT_EQUAL ITK_TEST_EXPECT_EQUAL
74
# define TEST_SET_GET ITK_TEST_SET_GET
75
# define TEST_SET_GET_VALUE ITK_TEST_SET_GET_VALUE
76
# define TEST_SET_GET_NULL_VALUE ITK_TEST_SET_GET_NULL_VALUE
77
# define TEST_SET_GET_BOOLEAN ITK_TEST_SET_GET_BOOLEAN
78
#endif
79
80
/* clang-format off */
81
#if defined(__GNUC__)
82
#define ITK_EXERCISE_BASIC_OBJECT_METHODS(object, ClassName, SuperclassName) \
83
object->Print(std::cout); \
84
std::cout << "Name of Class = " << object->GetNameOfClass() << std::endl; \
85
ITK_MACROEND_NOOP_STATEMENT
86
#else // not GCC
87
#define ITK_EXERCISE_BASIC_OBJECT_METHODS(object, ClassName, SuperclassName) \
88
object->Print(std::cout); \
89
std::cout << "Name of Class = " << object->Self::GetNameOfClass() << std::endl; \
90
std::cout << "Name of Superclass = " << object->Superclass::GetNameOfClass() << std::endl; \
91
if (!std::strcmp(object->Self::GetNameOfClass(), #ClassName)) \
92
{ \
93
std::cout << "Class name is correct" << std::endl; \
94
} \
95
else \
96
{ \
97
std::cerr << "Class name provided does not match object's NameOfClass" << std::endl; \
98
return EXIT_FAILURE; \
99
} \
100
if (!std::strcmp(object->Superclass::GetNameOfClass(), #SuperclassName)) \
101
{ \
102
std::cout << "Superclass name is correct" << std::endl; \
103
} \
104
else \
105
{ \
106
std::cerr << "Superclass name provided does not match object's Superclass::NameOfClass" << std::endl; \
107
return EXIT_FAILURE; \
108
} \
109
ITK_MACROEND_NOOP_STATEMENT
110
#endif // GCC
111
/* clang-format on */
112
113
#define ITK_TRY_EXPECT_EXCEPTION(command) \
114
try \
115
{ \
116
std::cout << "Trying " << #command << std::endl; \
117
command; \
118
std::cerr << "Failed to catch expected exception" << std::endl; \
119
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
120
return EXIT_FAILURE; \
121
} \
122
catch (const itk::ExceptionObject & excp) \
123
{ \
124
std::cout << "Caught expected exception" << std::endl; \
125
std::cout << excp << std::endl; \
126
} \
127
ITK_MACROEND_NOOP_STATEMENT
128
129
130
#define ITK_TRY_EXPECT_NO_EXCEPTION(command) \
131
try \
132
{ \
133
std::cout << "Trying " << #command << std::endl; \
134
command; \
135
} \
136
catch (const itk::ExceptionObject & excp) \
137
{ \
138
std::cerr << excp << std::endl; \
139
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
140
return EXIT_FAILURE; \
141
} \
142
ITK_MACROEND_NOOP_STATEMENT
143
144
#define ITK_TEST_EXPECT_TRUE_STATUS_VALUE(command, statusVal) \
145
{ \
146
ITK_GCC_PRAGMA_PUSH \
147
ITK_GCC_SUPPRESS_Wfloat_equal \
148
bool _ITK_TEST_EXPECT_TRUE_command(command); \
149
ITK_GCC_PRAGMA_POP \
150
if (!(_ITK_TEST_EXPECT_TRUE_command)) \
151
{ \
152
std::cerr << "Error in " << #command << std::endl; \
153
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
154
std::cerr << "Expected true" << std::endl; \
155
std::cerr << " but got " << _ITK_TEST_EXPECT_TRUE_command << std::endl; \
156
statusVal = EXIT_FAILURE; \
157
} \
158
} \
159
ITK_MACROEND_NOOP_STATEMENT
160
161
#define ITK_TEST_EXPECT_TRUE(command) \
162
{ \
163
ITK_GCC_PRAGMA_PUSH \
164
ITK_GCC_SUPPRESS_Wfloat_equal \
165
bool _ITK_TEST_EXPECT_TRUE_command(command); \
166
ITK_GCC_PRAGMA_POP \
167
if (!(_ITK_TEST_EXPECT_TRUE_command)) \
168
{ \
169
std::cerr << "Error in " << #command << std::endl; \
170
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
171
std::cerr << "Expected true" << std::endl; \
172
std::cerr << " but got " << _ITK_TEST_EXPECT_TRUE_command << std::endl; \
173
return EXIT_FAILURE; \
174
} \
175
} \
176
ITK_MACROEND_NOOP_STATEMENT
177
178
179
#define ITK_TEST_EXPECT_EQUAL_STATUS_VALUE(lh, rh, statusVal) \
180
{ \
181
ITK_GCC_PRAGMA_PUSH \
182
ITK_GCC_SUPPRESS_Wfloat_equal \
183
bool _ITK_TEST_EXPECT_EQUAL_result((lh) == (rh)); \
184
ITK_GCC_PRAGMA_POP \
185
if (!(_ITK_TEST_EXPECT_EQUAL_result)) \
186
{ \
187
std::cerr << "Error in " << #lh << " == " << #rh << std::endl; \
188
std::cerr << "\tIn " __FILE__ ", line " << __LINE__ << std::endl; \
189
std::cerr << "\tlh: " << (lh) << std::endl; \
190
std::cerr << "\trh: " << (rh) << std::endl; \
191
std::cerr << "Expression is not equal" << std::endl; \
192
statusVal = EXIT_FAILURE; \
193
} \
194
} \
195
ITK_MACROEND_NOOP_STATEMENT
196
197
#define ITK_TEST_EXPECT_EQUAL(lh, rh) \
198
{ \
199
ITK_GCC_PRAGMA_PUSH \
200
ITK_GCC_SUPPRESS_Wfloat_equal \
201
bool _ITK_TEST_EXPECT_EQUAL_result((lh) == (rh)); \
202
ITK_GCC_PRAGMA_POP \
203
if (!(_ITK_TEST_EXPECT_EQUAL_result)) \
204
{ \
205
std::cerr << "Error in " << #lh << " == " << #rh << std::endl; \
206
std::cerr << "\tIn " __FILE__ ", line " << __LINE__ << std::endl; \
207
std::cerr << "\tlh: " << (lh) << std::endl; \
208
std::cerr << "\trh: " << (rh) << std::endl; \
209
std::cerr << "Expression is not equal" << std::endl; \
210
return EXIT_FAILURE; \
211
} \
212
} \
213
ITK_MACROEND_NOOP_STATEMENT
214
215
216
#define ITK_TEST_SET_GET(variable, command) \
217
if (variable != command) \
218
{ \
219
std::cerr << "Error in " << #command << std::endl; \
220
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
221
std::cerr << "Expected " << variable.GetPointer() << std::endl; \
222
std::cerr << "but got " << command << std::endl; \
223
return EXIT_FAILURE; \
224
} \
225
ITK_MACROEND_NOOP_STATEMENT
226
227
228
#define ITK_TEST_SET_GET_VALUE(variable, command) \
229
ITK_GCC_PRAGMA_PUSH \
230
ITK_GCC_SUPPRESS_Wfloat_equal \
231
if (variable != command) \
232
{ \
233
std::cerr << "Error in " << #command << std::endl; \
234
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
235
std::cerr << "Expected " << variable << std::endl; \
236
std::cerr << "but got " << command << std::endl; \
237
return EXIT_FAILURE; \
238
} \
239
ITK_GCC_PRAGMA_POP \
240
ITK_MACROEND_NOOP_STATEMENT
241
242
#define ITK_TEST_SET_GET_NULL_VALUE(command) \
243
if (nullptr != command) \
244
{ \
245
std::cerr << "Error in " << #command << std::endl; \
246
std::cerr << " In " __FILE__ ", line " << __LINE__ << std::endl; \
247
std::cerr << "Expected " \
248
<< "nullptr" << std::endl; \
249
std::cerr << "but got " << command << std::endl; \
250
return EXIT_FAILURE; \
251
} \
252
ITK_MACROEND_NOOP_STATEMENT
253
254
#define ITK_TEST_SET_GET_BOOLEAN(object, variable, value) \
255
object->Set##variable(false); \
256
object->Set##variable(true); \
257
if (object->Get##variable() != 1) \
258
{ \
259
std::cerr << "Error in Set/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
260
<< " instead of 1" << std::endl; \
261
return EXIT_FAILURE; \
262
} \
263
object->Set##variable(false); \
264
if (object->Get##variable() != 0) \
265
{ \
266
std::cerr << "Error in Set/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
267
<< " instead of 0" << std::endl; \
268
return EXIT_FAILURE; \
269
} \
270
object->variable##On(); \
271
if (object->Get##variable() != 1) \
272
{ \
273
std::cerr << "Error in On/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
274
<< " instead of 1" << std::endl; \
275
return EXIT_FAILURE; \
276
} \
277
object->variable##Off(); \
278
if (object->Get##variable() != 0) \
279
{ \
280
std::cerr << "Error in Off/Get" #variable << ", Get" #variable << " is " << object->Get##variable() \
281
<< " instead of 0" << std::endl; \
282
return EXIT_FAILURE; \
283
} \
284
object->Set##variable(value)
285
289
#define itkNameOfTestExecutableMacro(argv) \
290
[argv](const std::string & functionName) { \
291
return ((argv == nullptr) || (argv[0] == nullptr) || (argv[0][0] == '\0')) ? ("<" + functionName + " executable>") \
292
: argv[0]; \
293
}(__func__)
294
295
#endif
itkMacro.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition:
itkAnnulusOperator.h:24
Generated on
unknown
for ITK by
1.8.16