Skip to content

Commit bf83f02

Browse files
authored
Merge pull request InsightSoftwareConsortium#5874 from hjmjohnson/simplified-conversion-to-gtest
ENH: Convert 12 ITKCommon CTests to GoogleTest framework
2 parents dc59e40 + 6b79d94 commit bf83f02

16 files changed

Lines changed: 669 additions & 1252 deletions

Modules/Core/Common/test/CMakeLists.txt

Lines changed: 11 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ set(
66
itkCommandObserverObjectTest.cxx
77
itkAdaptorComparisonTest.cxx
88
itkCovariantVectorGeometryTest.cxx
9-
itkDataTypeTest.cxx
109
itkDecoratorTest.cxx
1110
itkExtractImage3Dto2DTest.cxx
1211
itkExtractImageTest.cxx
@@ -31,9 +30,6 @@ set(
3130
itkImageSliceIteratorTest.cxx
3231
itkRGBPixelTest.cxx
3332
itkLightObjectTest.cxx
34-
itkBoundingBoxTest.cxx
35-
itkBoundaryConditionTest.cxx
36-
itkByteSwapTest.cxx
3733
itkSparseImageTest.cxx
3834
itkSimpleFilterWatcherTest.cxx
3935
itkSymmetricEllipsoidInteriorExteriorSpatialFunctionTest.cxx
@@ -64,8 +60,6 @@ set(
6460
itkRealTimeClockTest.cxx
6561
itkRealTimeIntervalTest.cxx
6662
itkRealTimeStampTest.cxx
67-
itkTimeStampTest.cxx
68-
itkIntTypesTest.cxx
6963
itkBSplineKernelFunctionTest.cxx
7064
itkArrayTest.cxx
7165
itkImageIteratorTest.cxx
@@ -76,12 +70,6 @@ set(
7670
itkDirectoryTest.cxx
7771
itkObjectStoreTest.cxx
7872
itkObjectFactoryTest.cxx
79-
itkEventObjectTest.cxx
80-
itkMathCastWithRangeCheckTest.cxx
81-
itkMathRoundProfileTest1.cxx
82-
itkMathRoundTest.cxx
83-
itkMathRoundTest2.cxx
84-
itkModifiedTimeTest.cxx
8573
itkMultipleLogOutputTest.cxx
8674
itkVectorTest.cxx
8775
itkImageTest.cxx
@@ -103,7 +91,6 @@ set(
10391
itkTimeProbeTest2.cxx
10492
itkSpatialOrientationTest.cxx
10593
itkStdStreamStateSaveTest.cxx
106-
itkVersionTest.cxx
10794
VNLSparseLUSolverTraitsTest.cxx
10895
itkSobelOperatorImageConvolutionTest.cxx
10996
itkSobelOperatorImageFilterTest.cxx
@@ -225,13 +212,6 @@ target_link_libraries(
225212
)
226213
itk_add_test(NAME SystemInformation COMMAND itkSystemInformation)
227214

228-
itk_add_test(
229-
NAME itkVersionTest
230-
COMMAND
231-
ITKCommon1TestDriver
232-
itkVersionTest
233-
)
234-
235215
if(ITK_BUILD_SHARED_LIBS)
236216
## Create a library to test ITK loadable factories
237217
set(FactoryTest_Source itkFactoryTestLib.cxx)
@@ -321,12 +301,6 @@ itk_add_test(
321301
ITKCommon1TestDriver
322302
itkCovariantVectorGeometryTest
323303
)
324-
itk_add_test(
325-
NAME itkDataTypeTest
326-
COMMAND
327-
ITKCommon1TestDriver
328-
itkDataTypeTest
329-
)
330304
itk_add_test(
331305
NAME itkDecoratorTest
332306
COMMAND
@@ -469,30 +443,6 @@ itk_add_test(
469443
ITKCommon2TestDriver
470444
itkAutoPointerTest
471445
)
472-
itk_add_test(
473-
NAME itkTimeStampTest
474-
COMMAND
475-
ITKCommon1TestDriver
476-
itkTimeStampTest
477-
)
478-
itk_add_test(
479-
NAME itkBoundingBoxTest
480-
COMMAND
481-
ITKCommon1TestDriver
482-
itkBoundingBoxTest
483-
)
484-
itk_add_test(
485-
NAME itkBoundaryConditionTest
486-
COMMAND
487-
ITKCommon1TestDriver
488-
itkBoundaryConditionTest
489-
)
490-
itk_add_test(
491-
NAME itkByteSwapTest
492-
COMMAND
493-
ITKCommon1TestDriver
494-
itkByteSwapTest
495-
)
496446
itk_add_test(
497447
NAME itkBSplineInterpolationWeightFunctionTest
498448
COMMAND
@@ -629,42 +579,6 @@ itk_add_test(
629579
ITKCommon2TestDriver
630580
itkConstShapedNeighborhoodIteratorTest2
631581
)
632-
itk_add_test(
633-
NAME itkEventObjectTest
634-
COMMAND
635-
ITKCommon1TestDriver
636-
itkEventObjectTest
637-
)
638-
itk_add_test(
639-
NAME itkMathCastWithRangeCheckTest
640-
COMMAND
641-
ITKCommon1TestDriver
642-
itkMathCastWithRangeCheckTest
643-
)
644-
itk_add_test(
645-
NAME itkMathRoundProfileTest1
646-
COMMAND
647-
ITKCommon1TestDriver
648-
itkMathRoundProfileTest1
649-
)
650-
itk_add_test(
651-
NAME itkMathRoundTest
652-
COMMAND
653-
ITKCommon1TestDriver
654-
itkMathRoundTest
655-
)
656-
itk_add_test(
657-
NAME itkMathRoundTest2
658-
COMMAND
659-
ITKCommon1TestDriver
660-
itkMathRoundTest2
661-
)
662-
itk_add_test(
663-
NAME itkModifiedTimeTest
664-
COMMAND
665-
ITKCommon1TestDriver
666-
itkModifiedTimeTest
667-
)
668582
itk_add_test(
669583
NAME itkExceptionObjectTest
670584
COMMAND
@@ -1245,12 +1159,6 @@ itk_add_test(
12451159
--full-output
12461160
itkNumericTraitsTest
12471161
)
1248-
itk_add_test(
1249-
NAME itkIntTypesTest
1250-
COMMAND
1251-
ITKCommon1TestDriver
1252-
itkIntTypesTest
1253-
)
12541162
itk_add_test(
12551163
NAME itkOctreeTest
12561164
COMMAND
@@ -1884,6 +1792,17 @@ set(
18841792
itkWeakPointerGTest.cxx
18851793
itkCommonTypeTraitsGTest.cxx
18861794
itkMathGTest.cxx
1795+
itkDataTypeGTest.cxx
1796+
itkBoundaryConditionGTest.cxx
1797+
itkBoundingBoxGTest.cxx
1798+
itkTimeStampGTest.cxx
1799+
itkEventObjectGTest.cxx
1800+
itkByteSwapGTest.cxx
1801+
itkIntTypesGTest.cxx
1802+
itkMathCastWithRangeCheckGTest.cxx
1803+
itkMathRoundGTest.cxx
1804+
itkModifiedTimeGTest.cxx
1805+
itkVersionGTest.cxx
18871806
itkMetaDataDictionaryGTest.cxx
18881807
itkSpatialOrientationAdaptorGTest.cxx
18891808
itkAnatomicalOrientationGTest.cxx

Modules/Core/Common/test/itkBoundaryConditionTest.cxx renamed to Modules/Core/Common/test/itkBoundaryConditionGTest.cxx

Lines changed: 64 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
#include "itkImageRegionIterator.h"
2020
#include "itkConstantBoundaryCondition.h"
2121
#include "itkNeighborhoodIterator.h"
22+
#include "itkGTest.h"
23+
2224
namespace
2325
{
2426
void
2527
println(const char * c)
2628
{
2729
std::cout << std::endl << c << std::endl;
2830
}
29-
} // namespace
3031

3132
template <typename TPixel>
3233
void
@@ -63,94 +64,36 @@ filln(itk::Image<float, 2> * img)
6364
}
6465
}
6566
}
67+
} // namespace
6668

67-
int
68-
itkBoundaryConditionTest(int, char *[])
69+
TEST(BoundaryCondition, ConstantBoundaryAtImageEdge)
6970
{
70-
7171
using ImageType2D = itk::Image<float, 2>;
72-
using ImageType3D = itk::Image<float, 3>;
73-
using ImageTypeND = itk::Image<float, 4>;
7472

7573
println("Creating some images");
7674

77-
// Create some images
7875
itk::ImageRegion<2> Region2D;
79-
itk::ImageRegion<3> Region3D;
80-
itk::ImageRegion<4> RegionND;
81-
82-
itk::Size<2> size2D;
76+
itk::Size<2> size2D;
8377
size2D[0] = 30;
8478
size2D[1] = 15;
85-
86-
itk::Size<3> size3D;
87-
size3D[0] = 100;
88-
size3D[1] = 100;
89-
size3D[2] = 10;
90-
91-
itk::Size<4> sizeND;
92-
sizeND[0] = 10;
93-
sizeND[1] = 10;
94-
sizeND[2] = 4;
95-
sizeND[3] = 2;
96-
9779
itk::Index<2> orig2D;
9880
orig2D[0] = 0;
9981
orig2D[1] = 0;
100-
101-
itk::Index<3> orig3D;
102-
orig3D[0] = 0;
103-
orig3D[1] = 0;
104-
orig3D[2] = 0;
105-
106-
itk::Index<4> origND;
107-
origND[0] = 0;
108-
origND[1] = 0;
109-
origND[2] = 0;
110-
origND[3] = 0;
111-
11282
Region2D.SetSize(size2D);
113-
Region3D.SetSize(size3D);
114-
RegionND.SetSize(sizeND);
115-
11683
Region2D.SetIndex(orig2D);
117-
Region3D.SetIndex(orig3D);
118-
RegionND.SetIndex(origND);
11984

12085
auto image2D = ImageType2D::New();
121-
auto image3D = ImageType3D::New();
122-
auto imageND = ImageTypeND::New();
123-
12486
image2D->SetRegions(Region2D);
125-
image3D->SetRegions(Region3D);
126-
imageND->SetRegions(RegionND);
127-
12887
image2D->Allocate();
129-
image3D->Allocate();
130-
imageND->Allocate();
13188

13289
println("Initializing some images");
133-
13490
filln(image2D);
135-
image3D->FillBuffer(1.0f);
136-
imageND->FillBuffer(1.0f);
13791

13892
println("Initializing smart neighborhood iterators");
13993
itk::Size<2> sz2;
14094
sz2[0] = 2;
14195
sz2[1] = 1;
14296

143-
itk::Size<3> sz3;
144-
sz3[0] = 2;
145-
sz3[1] = 3;
146-
sz3[2] = 1;
147-
148-
itk::Size<4> szN;
149-
szN[0] = 1;
150-
szN[1] = 3;
151-
szN[2] = 1;
152-
szN[3] = 1;
153-
15497
using SmartIteratorType = itk::NeighborhoodIterator<ImageType2D, itk::ConstantBoundaryCondition<ImageType2D>>;
15598

15699
SmartIteratorType it2d(sz2, image2D, image2D->GetRequestedRegion());
@@ -167,11 +110,67 @@ itkBoundaryConditionTest(int, char *[])
167110
--it2d;
168111
tempN = it2d.GetNeighborhood();
169112

170-
171113
printn(tempN.GetBufferReference(), tempN.GetSize());
172114

115+
// The 2D image is 30x15, filled with 100*j + i.
116+
// The last pixel is at (29, 14): value = 100*14 + 29 = 1429.
117+
// With radius {2,1} and ConstantBoundaryCondition(0):
118+
// Row 0 (j=13): pixels at x=27,28,29,30(OOB),31(OOB) -> 1327, 1328, 1329, 0, 0
119+
// Row 1 (j=14): pixels at x=27,28,29,30(OOB),31(OOB) -> 1427, 1428, 1429, 0, 0
120+
// Row 2 (j=15, OOB): all 0 -> 0, 0, 0, 0, 0
121+
const auto & buf = tempN.GetBufferReference();
122+
EXPECT_EQ(buf[0], 1327.0f);
123+
EXPECT_EQ(buf[1], 1328.0f);
124+
EXPECT_EQ(buf[2], 1329.0f);
125+
EXPECT_EQ(buf[3], 0.0f);
126+
EXPECT_EQ(buf[4], 0.0f);
127+
EXPECT_EQ(buf[5], 1427.0f);
128+
EXPECT_EQ(buf[6], 1428.0f);
129+
EXPECT_EQ(buf[7], 1429.0f);
130+
EXPECT_EQ(buf[8], 0.0f);
131+
EXPECT_EQ(buf[9], 0.0f);
132+
EXPECT_EQ(buf[10], 0.0f);
133+
EXPECT_EQ(buf[11], 0.0f);
134+
EXPECT_EQ(buf[12], 0.0f);
135+
EXPECT_EQ(buf[13], 0.0f);
136+
EXPECT_EQ(buf[14], 0.0f);
173137

174138
std::cout << " ________________________________________ " << std::endl;
139+
}
140+
141+
TEST(BoundaryCondition, ZeroFluxNeumannBoundaryTraversal)
142+
{
143+
using ImageType2D = itk::Image<float, 2>;
144+
145+
itk::ImageRegion<2> Region2D;
146+
itk::Size<2> size2D;
147+
size2D[0] = 30;
148+
size2D[1] = 15;
149+
itk::Index<2> orig2D;
150+
orig2D[0] = 0;
151+
orig2D[1] = 0;
152+
Region2D.SetSize(size2D);
153+
Region2D.SetIndex(orig2D);
154+
155+
auto image2D = ImageType2D::New();
156+
image2D->SetRegions(Region2D);
157+
image2D->Allocate();
158+
filln(image2D);
159+
160+
itk::Size<2> sz2;
161+
sz2[0] = 2;
162+
sz2[1] = 1;
163+
164+
using SmartIteratorType = itk::NeighborhoodIterator<ImageType2D, itk::ConstantBoundaryCondition<ImageType2D>>;
165+
166+
SmartIteratorType it2d(sz2, image2D, image2D->GetRequestedRegion());
167+
168+
itk::ConstantBoundaryCondition<ImageType2D> cbc;
169+
cbc.SetConstant(0.0f);
170+
it2d.OverrideBoundaryCondition(&cbc);
171+
172+
SmartIteratorType::NeighborhoodType temp2N;
173+
temp2N = it2d.GetNeighborhood(); // initialize
175174

176175
itk::ZeroFluxNeumannBoundaryCondition<ImageType2D> neumann;
177176
for (int yak = 0; yak < 2; ++yak)
@@ -186,6 +185,6 @@ itkBoundaryConditionTest(int, char *[])
186185

187186
it2d.OverrideBoundaryCondition(&neumann);
188187
}
189-
190-
return EXIT_SUCCESS;
188+
// If we reach here without crashing, the test passes
189+
EXPECT_TRUE(it2d.IsAtEnd());
191190
}

0 commit comments

Comments
 (0)