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
2129class DomainThreaderAssociate
2230{
@@ -108,7 +116,7 @@ class DomainThreaderAssociate
108116};
109117
110118
111- int
119+ void
112120ThreadedIndexedContainerPartitionerRunTest (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