Skip to content

Commit d47764c

Browse files
authored
Merge pull request InsightSoftwareConsortium#5904 from hjmjohnson/convert-itkthreadedindexedcontainerpartitionertest-to-gtest
ENH: Convert itkThreadedIndexedContainerPartitionerTest to GTest
2 parents 03c4197 + 95f0c6e commit d47764c

2 files changed

Lines changed: 27 additions & 62 deletions

File tree

Modules/Core/Common/test/CMakeLists.txt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ set(
9090
set(
9191
ITKCommon2Tests
9292
itkSTLThreadTest.cxx
93-
itkThreadedIndexedContainerPartitionerTest.cxx
9493
itkThreadedIteratorRangePartitionerTest.cxx
9594
itkThreadedIteratorRangePartitionerTest2.cxx
9695
itkThreadedIteratorRangePartitionerTest3.cxx
@@ -230,12 +229,6 @@ itk_add_test(
230229
ITKCommon1TestDriver
231230
itkAdaptorComparisonTest
232231
)
233-
itk_add_test(
234-
NAME itkThreadedIndexedContainerPartitionerTest
235-
COMMAND
236-
ITKCommon2TestDriver
237-
itkThreadedIndexedContainerPartitionerTest
238-
)
239232
itk_add_test(
240233
NAME itkThreadedIteratorRangePartitionerTest
241234
COMMAND
@@ -1742,6 +1735,7 @@ set(
17421735
itkAbortProcessObjectGTest.cxx
17431736
itkBresenhamLineGTest.cxx
17441737
itkFilterDispatchGTest.cxx
1738+
itkThreadedIndexedContainerPartitionerGTest.cxx
17451739
)
17461740
creategoogletestdriver(ITKCommon "${ITKCommon-Test_LIBRARIES}" "${ITKCommonGTests}")
17471741
# If `-static` was passed to CMAKE_EXE_LINKER_FLAGS, compilation fails. No need to

Modules/Core/Common/test/itkThreadedIndexedContainerPartitionerTest.cxx renamed to Modules/Core/Common/test/itkThreadedIndexedContainerPartitionerGTest.cxx

Lines changed: 26 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
*=========================================================================*/
1818
#include "itkDomainThreader.h"
1919
#include "itkThreadedIndexedContainerPartitioner.h"
20+
#include "itkGTest.h"
21+
22+
#include <string>
23+
#include <vector>
24+
#include <iostream>
25+
26+
namespace
27+
{
2028

2129
class DomainThreaderAssociate
2230
{
@@ -108,7 +116,7 @@ class DomainThreaderAssociate
108116
};
109117

110118

111-
int
119+
void
112120
ThreadedIndexedContainerPartitionerRunTest(DomainThreaderAssociate & enclosingClass,
113121
itk::ThreadIdType numberOfThreads,
114122
const DomainThreaderAssociate::TestDomainThreader::DomainType & fullRange)
@@ -122,22 +130,11 @@ ThreadedIndexedContainerPartitionerRunTest(DomainThreaderAssociate & enclosingCl
122130
domainThreader->GetMultiThreader();
123131
domainThreader->SetMaximumNumberOfThreads(numberOfThreads);
124132
// Possible if numberOfThreads > GlobalMaximumNumberOfThreads
125-
if (domainThreader->GetMaximumNumberOfThreads() < numberOfThreads)
126-
{
127-
std::cerr << "Failed setting requested number of threads: " << numberOfThreads << std::endl
128-
<< "domainThreader->GetMaximumNumberOfThreads(): " << domainThreader->GetMaximumNumberOfThreads()
129-
<< std::endl;
130-
return EXIT_FAILURE;
131-
}
133+
EXPECT_GE(domainThreader->GetMaximumNumberOfThreads(), numberOfThreads);
132134

133135
domainThreader->SetNumberOfWorkUnits(numberOfThreads);
134136
// Possible if numberOfThreads > GlobalMaximumNumberOfThreads
135-
if (domainThreader->GetNumberOfWorkUnits() != numberOfThreads)
136-
{
137-
std::cerr << "Failed setting requested number of work units: " << numberOfThreads << std::endl
138-
<< "domainThreader->GetNumberOfWorkUnits(): " << domainThreader->GetNumberOfWorkUnits() << std::endl;
139-
return EXIT_FAILURE;
140-
}
137+
EXPECT_EQ(domainThreader->GetNumberOfWorkUnits(), numberOfThreads);
141138

142139
enclosingClass.Execute(fullRange);
143140

@@ -154,43 +151,31 @@ ThreadedIndexedContainerPartitionerRunTest(DomainThreaderAssociate & enclosingCl
154151
{
155152
DomainType subRange = domainInThreadedExecution[i];
156153
/* Check that the sub range was assigned something at all */
157-
if (subRange[0] == -1 || subRange[1] == -1)
158-
{
159-
std::cerr << "Error: subRange " << i << " is was not set: " << subRange[i];
160-
return EXIT_FAILURE;
161-
}
154+
EXPECT_NE(subRange[0], -1) << "subRange " << i << " is was not set: " << subRange[i];
155+
EXPECT_NE(subRange[1], -1) << "subRange " << i << " is was not set: " << subRange[i];
162156
/* Check that we got the begin of the range */
163-
if (i == 0 && subRange[0] != fullRange[0])
157+
if (i == 0)
164158
{
165-
std::cerr << "Error: subRange[0][0] should be " << fullRange[0] << ", but it's " << subRange[0] << '.';
166-
return EXIT_FAILURE;
159+
EXPECT_EQ(subRange[0], fullRange[0]) << "subRange[0][0] should be " << fullRange[0];
167160
}
168161
/* Check that we got the end of the range */
169-
if (i == numberOfThreads - 1 && subRange[1] != fullRange[1])
162+
if (i == static_cast<itk::ThreadIdType>(numberOfThreads - 1))
170163
{
171-
std::cerr << "Error: subRange[N-1][1] should be " << fullRange[1] << ", but it's " << subRange[1] << '.';
172-
return EXIT_FAILURE;
164+
EXPECT_EQ(subRange[1], fullRange[1]) << "subRange[N-1][1] should be " << fullRange[1];
173165
}
174166
/* Check that the sub-range endings and beginnings are continuous */
175167
if (i > 0)
176168
{
177-
if (previousEndIndex + 1 != subRange[0])
178-
{
179-
std::cerr << "Error: subRange " << i << " is not continuous with "
180-
<< "previous subRange." << std::endl
181-
<< "previousEndIndex: " << previousEndIndex << std::endl
182-
<< "subRange[0]: " << subRange[0] << std::endl;
183-
return EXIT_FAILURE;
184-
}
169+
EXPECT_EQ(previousEndIndex + 1, subRange[0]) << "subRange " << i << " is not continuous with previous subRange";
185170
}
186171
previousEndIndex = subRange[1];
187172
}
188-
189-
return EXIT_SUCCESS;
190173
}
191174

192-
int
193-
itkThreadedIndexedContainerPartitionerTest(int, char *[])
175+
} // namespace
176+
177+
178+
TEST(ThreadedIndexedContainerPartitioner, ConvertedLegacyTest)
194179
{
195180
DomainThreaderAssociate enclosingClass;
196181
const DomainThreaderAssociate::TestDomainThreader::ConstPointer domainThreader = enclosingClass.GetDomainThreader();
@@ -210,19 +195,13 @@ itkThreadedIndexedContainerPartitionerTest(int, char *[])
210195
fullRange[0] = 0;
211196
fullRange[1] = 103; // set total range to prime to test uneven division
212197
itk::ThreadIdType numberOfThreads = 1;
213-
if (ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange) != EXIT_SUCCESS)
214-
{
215-
return EXIT_FAILURE;
216-
}
198+
ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange);
217199

218200
/* Test with range that doesn't start at 0 */
219201
fullRange[0] = 2;
220202
fullRange[1] = 105; // set total range to prime to test uneven division
221203
numberOfThreads = 1;
222-
if (ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange) != EXIT_SUCCESS)
223-
{
224-
return EXIT_FAILURE;
225-
}
204+
ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange);
226205

227206
/* Test with multiple threads */
228207
if (domainThreader->GetMultiThreader()->GetGlobalMaximumNumberOfThreads() > 1)
@@ -231,20 +210,14 @@ itkThreadedIndexedContainerPartitionerTest(int, char *[])
231210
fullRange[0] = 6;
232211
fullRange[1] = 109; // set total range to prime to test uneven division
233212
numberOfThreads = domainThreader->GetMultiThreader()->GetGlobalDefaultNumberOfThreads();
234-
if (ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange) != EXIT_SUCCESS)
235-
{
236-
return EXIT_FAILURE;
237-
}
213+
ThreadedIndexedContainerPartitionerRunTest(enclosingClass, numberOfThreads, fullRange);
238214

239215
/* Test with max number of threads and check that we only used as
240216
* many as is reasonable. */
241217
const itk::ThreadIdType maxNumberOfThreads = domainThreader->GetMultiThreader()->GetGlobalMaximumNumberOfThreads();
242218
fullRange[0] = 6;
243219
fullRange[1] = fullRange[0] + maxNumberOfThreads - 2;
244-
if (ThreadedIndexedContainerPartitionerRunTest(enclosingClass, maxNumberOfThreads, fullRange) != EXIT_SUCCESS)
245-
{
246-
return EXIT_FAILURE;
247-
}
220+
ThreadedIndexedContainerPartitionerRunTest(enclosingClass, maxNumberOfThreads, fullRange);
248221
if (domainThreader->GetNumberOfWorkUnitsUsed() != maxNumberOfThreads - 1)
249222
{
250223
std::cerr << "Error: Expected to use only " << maxNumberOfThreads - 1 << "threads, but used "
@@ -255,6 +228,4 @@ itkThreadedIndexedContainerPartitionerTest(int, char *[])
255228
{
256229
std::cout << "No multi-threading available. " << std::endl;
257230
}
258-
259-
return EXIT_SUCCESS;
260231
}

0 commit comments

Comments
 (0)