Classes | Functions

mitkPipelineSmartPointerCorrectnessTest.cpp File Reference

#include "mitkSurfaceToImageFilter.h"
#include "mitkGeometryClipImageFilter.h"
#include "mitkImageSliceSelector.h"
#include <fstream>
#include "mitkReferenceCountWatcher.h"

Go to the source code of this file.

Classes

class  TwoOutputsFilter

Functions

template<class FilterType , class InputType >
int runPipelineSmartPointerCorrectnessTestForFilterType (typename InputType::Pointer input)
int mitkPipelineSmartPointerCorrectnessTest (int, char *[])

Function Documentation

int mitkPipelineSmartPointerCorrectnessTest ( int  ,
char *  [] 
)

Definition at line 328 of file mitkPipelineSmartPointerCorrectnessTest.cpp.

References EXIT_SUCCESS, mitk::Image::New(), and mitk::Surface::New().

{
  int result;
  result = runPipelineSmartPointerCorrectnessTestForFilterType<mitk::SurfaceToImageFilter, mitk::Surface>(mitk::Surface::New());
  if( result != EXIT_SUCCESS )
    return result;
  std::cout << std::endl;

  result = runPipelineSmartPointerCorrectnessTestForFilterType<mitk::GeometryClipImageFilter, mitk::Image>(mitk::Image::New());
  if( result != EXIT_SUCCESS )
    return result;
  std::cout << std::endl;

  result = runPipelineSmartPointerCorrectnessTestForFilterType<TwoOutputsFilter, mitk::Surface>(mitk::Surface::New());
  if( result != EXIT_SUCCESS )
    return result;

  result = runPipelineSmartPointerCorrectnessTestForFilterType<mitk::ImageSliceSelector, mitk::Image>(mitk::Image::New());
  if( result != EXIT_SUCCESS )
    return result;
  
  std::cout<<"[TEST DONE]"<<std::endl;
  return EXIT_SUCCESS;
}
template<class FilterType , class InputType >
int runPipelineSmartPointerCorrectnessTestForFilterType ( typename InputType::Pointer  input )

Definition at line 47 of file mitkPipelineSmartPointerCorrectnessTest.cpp.

References EXIT_FAILURE, and EXIT_SUCCESS.

{
  typename FilterType::Pointer filter;
  std::cout << "Testing " << typeid(FilterType).name() << "::New(): ";
  filter = FilterType::New();
  if (filter.IsNull()) 
  {
    std::cout<<"[FAILED]"<<std::endl;
     return EXIT_FAILURE;
  }
  else 
  {
    std::cout<<"[PASSED]"<<std::endl;
  } 

  std::cout << "Testing SetInput(" << typeid(FilterType).name() << "): ";
  filter->SetInput(input);
  std::cout<<"[PASSED]"<<std::endl;
  //std::cout << "Testing mitk::SurfaceToImageFilter::*TESTED_METHOD_DESCRIPTION: ";
  //if (filter.IsNull()) {
  //  std::cout<<"[FAILED]"<<std::endl;
  //  // return EXIT_FAILURE;
  //}
  //else {
  //std::cout<<"[PASSED]"<<std::endl;
  //} 

//#ifdef MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED
  //MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED test
  std::cout << "Initializing mitk::ReferenceCountWatcher: ";
  mitk::ReferenceCountWatcher::Pointer filterWatcher, filterOutputWatcher;
  filterWatcher = new mitk::ReferenceCountWatcher(filter, "filter1");
  filterOutputWatcher = new mitk::ReferenceCountWatcher(filter->GetOutput(), "filter1Output");
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED part1: "<<std::endl;
  try 
  {
    mitk::Image::Pointer output = filter->GetOutput();
    std::cout << "Testing to set filter to NULL, keeping reference to output:";
    filter = NULL;
    std::cout<<"[PASSED]"<<std::endl;
    std::cout << "Testing reference count of output: ";
    if(output->GetReferenceCount()!=2)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
    std::cout << "Testing external reference count of output: ";
    if(output->GetExternalReferenceCount()!=1)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing to set output to NULL:";
    //output->GetSource()->DebugOn();
    //output->DebugOn();
    output = NULL;
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter:";
    if(filterWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter output:";
    if(filterOutputWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
  }
  catch(...)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "Testing MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED part2: "<<std::endl;
  filter = FilterType::New();
  filterWatcher = new mitk::ReferenceCountWatcher(filter, "filter2");
  filterOutputWatcher = new mitk::ReferenceCountWatcher(filter->GetOutput(), "filter2Output");
  try 
  {
    std::cout << "Testing to set filter to NULL, keeping NO reference to output:";
    filter = NULL;
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter:";
    if(filterWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter output:";
    if(filterOutputWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
  }
  catch(...)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "Testing MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED part3: "<<std::endl;
  try 
  {
    mitk::Image::Pointer output;
    {
      typename FilterType::Pointer localFilter = FilterType::New();
      filterWatcher = new mitk::ReferenceCountWatcher(localFilter, "filter3");
      filterOutputWatcher = new mitk::ReferenceCountWatcher(localFilter->GetOutput(), "filter3Output");
      output = localFilter->GetOutput();
      std::cout << "Testing running out of scope of filter, keeping reference to output:";
    }
    std::cout<<"[PASSED]"<<std::endl;
    std::cout << "Testing reference count of output: ";
    if(output->GetReferenceCount()!=2)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
    std::cout << "Testing external reference count of output: ";
    if(output->GetExternalReferenceCount()!=1)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing to set output to NULL:";
    output = NULL;
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter:";
    if(filterWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter output:";
    if(filterOutputWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
  }
  catch(...)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "Testing MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED part4: "<<std::endl;
  try 
  {
    mitk::Image::Pointer output;
    {
      typename FilterType::Pointer localFilter = FilterType::New();
      filterWatcher = new mitk::ReferenceCountWatcher(localFilter, "filter4");
      filterOutputWatcher = new mitk::ReferenceCountWatcher(localFilter->GetOutput(), "filter4Output");
      output = localFilter->GetOutput();
      std::cout << "Testing running out of scope of filter, keeping reference to output (as in part 3):";
    }
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing output->DisconnectPipeline(): ";
    output->DisconnectPipeline();
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of output: ";
    if(output->GetReferenceCount()!=1)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
    std::cout << "Testing external reference count of output: ";
    if(output->GetExternalReferenceCount()!=1)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter:";
    if(filterWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing to set output to NULL:";
    output = NULL;
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter output:";
    if(filterOutputWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
  }
  catch(...)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "Testing MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED part5: "<<std::endl;
  try 
  {
    {
      typename FilterType::Pointer localFilter = FilterType::New();
      filterWatcher = new mitk::ReferenceCountWatcher(localFilter, "filter5");
      filterOutputWatcher = new mitk::ReferenceCountWatcher(localFilter->GetOutput(), "filter5Output");
      std::cout << "Testing running out of scope of filter, keeping NO reference to output:";
    }
    std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter:";
    if(filterWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;

    std::cout << "Testing reference count of filter output:";
    if(filterOutputWatcher->GetReferenceCount()!=0)
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
      std::cout<<"[PASSED]"<<std::endl;
  }
  catch(...)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
//#endif
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines