Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkCastToFloatImageFilterTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include <mitkTestFixture.h>
14 #include <mitkTestingMacros.h>
15 #include <mitkImage.h>
16 #include <mitkImageReadAccessor.h>
18 
19 class mitkCastToFloatImageFilterTestSuite : public mitk::TestFixture
20 {
21  CPPUNIT_TEST_SUITE(mitkCastToFloatImageFilterTestSuite);
22  MITK_TEST(testShortConversion);
23  MITK_TEST(testIntConversion);
24  MITK_TEST(testLongConversion);
25  MITK_TEST(testFloatConversion);
26  MITK_TEST(testDoubleConversion);
27  CPPUNIT_TEST_SUITE_END();
28 
29 private:
30 
31  mitk::CastToFloatImageFilter::Pointer m_CastToFloatImageFilter;
32  const unsigned int NUM_ITERATIONS = 15;
33  const unsigned int DATA_DIM = 10;
34 
35 public:
36 
37  void setUp() override
38  {
39  m_CastToFloatImageFilter = mitk::CastToFloatImageFilter::New();
40  }
41 
42  template<class TPixelType>
43  void test()
44  {
45  TPixelType* data = new TPixelType[DATA_DIM*DATA_DIM*DATA_DIM];
46 
47  for (unsigned int i = 0; i < DATA_DIM*DATA_DIM*DATA_DIM; ++i)
48  {
49  data[i] = (TPixelType)i;
50  }
51 
53  unsigned int dimension[3]{ DATA_DIM, DATA_DIM, DATA_DIM };
54  inputImage->Initialize(mitk::MakeScalarPixelType<TPixelType>(), 3, dimension);
55  inputImage->SetImportVolume(data);
56 
57  for (unsigned int iteration = 0; iteration < NUM_ITERATIONS; ++iteration)
58  {
59  m_CastToFloatImageFilter->SetInput(inputImage);
60  m_CastToFloatImageFilter->Update();
61  mitk::Image::Pointer outputImage = m_CastToFloatImageFilter->GetOutput();
62  mitk::ImageReadAccessor readAccess(outputImage);
63  const float* outputData = (const float*)readAccess.GetData();
64  for (unsigned int i = 0; i < DATA_DIM*DATA_DIM*DATA_DIM; ++i)
65  {
66  CPPUNIT_ASSERT_MESSAGE(std::string("expected " + std::to_string(data[i]) + " but was " + std::to_string(outputData[i])), std::abs(outputData[i] - data[i]) < mitk::eps);
67  }
68  }
69  }
70 
71  void testFloatConversion()
72  {
73  test<float>();
74  }
75 
76  void testShortConversion()
77  {
78  test<short>();
79  test<unsigned short>();
80  }
81 
82  void testIntConversion()
83  {
84  test<int>();
85  test<unsigned int>();
86  }
87 
88  void testDoubleConversion()
89  {
90  test<double>();
91  }
92 
93  void testLongConversion()
94  {
95  test<long>();
96  }
97 
98  void tearDown() override
99  {
100  m_CastToFloatImageFilter = nullptr;
101  }
102 };
103 
104 MITK_TEST_SUITE_REGISTRATION(mitkCastToFloatImageFilter)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
Definition: testcase.h:28
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
Test fixture for parameterized tests.
static Pointer New()
MITKCORE_EXPORT const ScalarType eps
ImageReadAccessor class to get locked read access for a particular image part.