/*=========================================================================
*
* Copyright NumFOCUS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
// This code fragment is included in the test driver generated by the
// CMake command create_test_sourcelist. This is included directly after
// the call to the test main function. It performs optional redirection
// of test output and regression testing if needed.
if (redirectOutputParameters.redirect)
{
// Restore cout
std::cout.rdbuf(oldCoutBuf);
redirectStream.close();
}
std::vector< HashPairType >& hashTestList = GetHashTestList();
// before the image to image compare we first check md5 hashes
for(auto & li : hashTestList)
{
const char * const testFilename = li.first;
const int ret = HashTestImage( testFilename, li.second );
if ( ret )
{
result = EXIT_FAILURE; //Nonzero indicates failure
}
}
RegressionTestParameters& regressionTestParameters = GetRegressionTestParameters();
// Make a list of possible baselines
for ( int ii = 0;
ii < static_cast< int >( regressionTestParameters.compareList.size() );
ii++ )
{
char * baselineFilename = regressionTestParameters.compareList[ii].first;
char * testFilename = regressionTestParameters.compareList[ii].second;
std::map< std::string, int > baselines =
RegressionTestBaselines(baselineFilename);
auto baseline = baselines.begin();
std::string bestBaseline = baseline->first;
int bestBaselineStatus = itk::NumericTraits< int >::max();
bool oneReferenceImageWasReadable=false;
while ( baseline != baselines.end() )
{
baseline->second =
RegressionTestImage(testFilename,
( baseline->first ).c_str(),
0,
regressionTestParameters.intensityTolerance,
regressionTestParameters.numberOfPixelsTolerance,
regressionTestParameters.radiusTolerance,
regressionTestParameters.verifyInputInformation,
regressionTestParameters.coordinateTolerance,
regressionTestParameters.directionTolerance);
if ( baseline->second == itk::NumericTraits< int >::max() )
{
//Reference Image not found
}
else if ( baseline->second == itk::NumericTraits< int >::max() -2 )
{
//Test Image not found. Immediate failure! (No further testing needed)
break;
}
else if ( baseline->second == itk::NumericTraits< int >::max() -1 )
{
//Image dimensions do not match
}
else if ( baseline->second < bestBaselineStatus )
{
// A better image was found
bestBaseline = baseline->first;
bestBaselineStatus = baseline->second;
oneReferenceImageWasReadable = true;
}
if ( baseline->second == 0 )
{
break;
}
++baseline;
}
if ( oneReferenceImageWasReadable )
{
// if the best we can do still has errors, generate the error images
if ( bestBaselineStatus )
{
RegressionTestImage( testFilename,
bestBaseline.c_str(),
1,
regressionTestParameters.intensityTolerance,
regressionTestParameters.numberOfPixelsTolerance,
regressionTestParameters.radiusTolerance,
regressionTestParameters.verifyInputInformation,
regressionTestParameters.coordinateTolerance,
regressionTestParameters.directionTolerance);
result = EXIT_FAILURE; //Nonzero indicates failure
}
// output the matching baseline
std::cout << ""
<< itksys::SystemTools::GetFilenameName(bestBaseline)
<< "" << std::endl;
}
else
{
std::cout << ""
<< "INVALID_BASELINE_GIVEN"
<< "" << std::endl;
result = EXIT_FAILURE; //Nonzero indicates failure
}
}
}
catch ( const itk::ExceptionObject & e )
{
std::cerr << "ITK test driver caught an ITK exception:\n";
e.Print(std::cerr);
result = EXIT_FAILURE;
}
catch ( const std::exception & e )
{
std::cerr << "ITK test driver caught an exception:\n";
std::cerr << e.what() << "\n";
result = EXIT_FAILURE;
}
catch ( ... )
{
std::cerr << "ITK test driver caught an unknown exception!!!\n";
result = EXIT_FAILURE;
}