diff --git a/Modules/Core/test/mitkVectorTest.cpp b/Modules/Core/test/mitkVectorTest.cpp index 3b0ec9ebbf..294068f3b8 100644 --- a/Modules/Core/test/mitkVectorTest.cpp +++ b/Modules/Core/test/mitkVectorTest.cpp @@ -1,171 +1,210 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ +// Testing +#include "mitkTestFixture.h" +#include "mitkTestingMacros.h" +#include + +// std includes +#include +// MITK includes #include -#include +#include "mitkStringProperty.h" +//itksys +#include "itkImage.h" + +// VTK includes +#include + +//vnl includes #include -int mitkVectorTest(int /*argc*/, char * /*argv*/ []) +class mitkVectorTestSuite : public mitk::TestFixture { - MITK_TEST_BEGIN("mitkVector"); - // test itk vector equality methods - itk::Vector itkVector_1; - itkVector_1[0] = 4.6; - itkVector_1[1] = 9.76543; - itkVector_1[2] = 746.09; - - itk::Vector itkVector_2; - itk::Vector itkVector_3; - for (int i = 0; i < 3; i++) - { - itkVector_2[i] = itkVector_1[i] - mitk::eps * 1.1; - itkVector_3[i] = itkVector_1[i] - mitk::eps * 0.9; - } - - MITK_TEST_CONDITION(mitk::Equal(itkVector_1, itkVector_1), - "Test vector equality using the same vector with mitk::eps"); - MITK_TEST_CONDITION( - !mitk::Equal(itkVector_1, itkVector_2), - "Test vector equality using different vectors with an element-wise difference greater than mitk::eps"); - MITK_TEST_CONDITION(mitk::Equal(itkVector_1, itkVector_2, mitk::eps * 1.2), - "Vectors are equal for higher epsilon tolerance ( 1.2 * mitk::eps )"); - MITK_TEST_CONDITION( - mitk::Equal(itkVector_1, itkVector_3), - "Test vector equality using different vectors with an element-wise difference less than mitk::eps"); - // test itk point equality methods - itk::Point itkPoint_1; - itk::Point itkPoint_2; - itk::Point itkPoint_3; - for (int i = 0; i < 3; i++) - { - itkPoint_1[i] = itkVector_1[i]; - itkPoint_2[i] = itkVector_2[i]; - itkPoint_3[i] = itkVector_3[i]; - } - MITK_TEST_CONDITION(mitk::Equal(itkPoint_1, itkPoint_1), "Test point equality using the same point with mitk::eps"); - MITK_TEST_CONDITION( - !mitk::Equal(itkPoint_1, itkPoint_2), - "Test point equality using different points with an element-wise difference greater than mitk::eps"); - MITK_TEST_CONDITION(mitk::Equal(itkPoint_1, itkPoint_2, mitk::eps * 1.2), - "Points are equal for higher epsilon tolerance ( 1.2 * mitk::eps )"); - MITK_TEST_CONDITION(mitk::Equal(itkPoint_1, itkPoint_3), - "Test point equality using different points with an element-wise difference less than mitk::eps"); - // test mitk vnl vector equality methods - mitk::VnlVector mitk_vnl_vector_1(3); - mitk::VnlVector mitk_vnl_vector_2(3); - mitk::VnlVector mitk_vnl_vector_3(3); - for (int i = 0; i < 3; i++) - { - mitk_vnl_vector_1.put(i, itkVector_1[i]); - mitk_vnl_vector_2.put(i, itkVector_2[i]); - mitk_vnl_vector_3.put(i, itkVector_1[i]); - } - - MITK_TEST_CONDITION(mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_1), - "Test mitk vnl vector equality using the same mitk vnl vector with mitk::eps"); - MITK_TEST_CONDITION(!mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_2), - "Test mitk vnl vector equality using different mitk vnl vectors with an element-wise difference " - "greater than mitk::eps"); - MITK_TEST_CONDITION(mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_2, mitk::eps * 1.2), - "Vnl vectors are equal for higher epsilon tolerance ( 1.2 * mitk::eps )"); - MITK_TEST_CONDITION(mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_3), - "Test mitk vnl vector equality using " - "different mitk vnl vectors with an " - "element-wise difference less than mitk::eps"); - - // test vnl_vector equality method - typedef mitk::ScalarType VnlValueType; - vnl_vector_fixed vnlVector_1; - vnlVector_1[3] = 56.98; - vnlVector_1[4] = 22.32; - vnlVector_1[5] = 1.00; - vnlVector_1[6] = 746.09; - vnl_vector_fixed vnlVector_2; - vnl_vector_fixed vnlVector_3; - for (int i = 0; i < 7; i++) - { - if (i < 3) - { - vnlVector_1.put(i, itkVector_1[i]); - } - - vnlVector_2[i] = vnlVector_1[i] - mitk::eps * 1.1f; - vnlVector_3[i] = vnlVector_1[i] - mitk::eps * 0.9f; - } - - MITK_TEST_CONDITION((mitk::Equal(vnlVector_1, vnlVector_1)), "vnl_fixed : v_1 == v_1 "); - // the v_2 is constructed so that the equality test fails for mitk::eps, the norm of the difference between the - // vectors is 7 * eps/6.9 - MITK_TEST_CONDITION(!(mitk::Equal(vnlVector_1, vnlVector_2)), - "vnl_fixed : v_1 != v_2 with mitk::eps "); - // increase the epsilon value used for testing equality - should now pass ( 1.2 * mitk::eps > 7 * mitk::eps/6.9 ) - MITK_TEST_CONDITION((mitk::Equal(vnlVector_1, vnlVector_2, mitk::eps * 1.2f)), - "vnl_fixed : v_1 == v_2 with eps = 1.2 * mitk::eps "); - MITK_TEST_CONDITION((mitk::Equal(vnlVector_1, vnlVector_3, mitk::eps)), - "vnl_fixed : v_1 == v_3 with eps = 0.8 * mitk::eps "); - MITK_TEST_CONDITION(!(mitk::Equal(vnlVector_1, vnlVector_3, mitk::eps * 0.8f)), - "vnl_fixed : v_1 != v_3 with eps = 0.8 * mitk::eps "); - - // test scalar equality method - mitk::ScalarType scalar1 = 0.5689; - mitk::ScalarType scalar2 = scalar1 + mitk::eps * 1.01; - mitk::ScalarType scalar3 = scalar1; - mitk::ScalarType scalar4 = scalar1 + mitk::eps * 0.95; - MITK_TEST_CONDITION(mitk::Equal(scalar1, scalar1), "Test scalar equality using the same scalar with mitk::eps"); - MITK_TEST_CONDITION(!mitk::Equal(scalar1, scalar2), - "Test scalar equality using the different scalars with a difference greater than mitk::eps"); - MITK_TEST_CONDITION(mitk::Equal(scalar1, scalar3), - "Test scalar equality using the different scalars with a difference equal to mitk::eps"); - MITK_TEST_CONDITION(mitk::Equal(scalar1, scalar4), - "Test scalar equality using the different scalars with a difference less than mitk::eps"); - - // test matrix equality methods - vnl_matrix_fixed vnlMatrix3x3_1; - vnlMatrix3x3_1(0, 0) = 1.1; - vnlMatrix3x3_1(0, 1) = 0.4; - vnlMatrix3x3_1(0, 2) = 5.3; - vnlMatrix3x3_1(1, 0) = 2.7; - vnlMatrix3x3_1(1, 1) = 3578.56418; - vnlMatrix3x3_1(1, 2) = 123.56; - vnlMatrix3x3_1(2, 0) = 546.89; - vnlMatrix3x3_1(2, 1) = 0.0001; - vnlMatrix3x3_1(2, 2) = 1.0; - vnl_matrix_fixed vnlMatrix3x3_2; - vnlMatrix3x3_2(0, 0) = 1.1000009; - vnlMatrix3x3_2(0, 1) = 0.4000009; - vnlMatrix3x3_2(0, 2) = 5.3000009; - vnlMatrix3x3_2(1, 0) = 2.7000009; - vnlMatrix3x3_2(1, 1) = 3578.5641809; - vnlMatrix3x3_2(1, 2) = 123.5600009; - vnlMatrix3x3_2(2, 0) = 546.8900009; - vnlMatrix3x3_2(2, 1) = 0.0001009; - vnlMatrix3x3_2(2, 2) = 1.0000009; - - mitk::ScalarType epsilon = 0.000001; - MITK_TEST_CONDITION(mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_1, mitk::eps), - "Test for matrix equality with given epsilon=mitk::eps and exactly the same matrix elements"); - MITK_TEST_CONDITION(!mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_2, 0.0), - "Test for matrix equality with given epsilon=0.0 and slightly different matrix elements"); - MITK_TEST_CONDITION(mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_2, epsilon), - "Test for matrix equality with given epsilon and slightly different matrix elements"); - MITK_TEST_CONDITION(!mitk::MatrixEqualRMS(vnlMatrix3x3_1, vnlMatrix3x3_2, 0.0), - "Test for matrix equality with given epsilon=0.0 and slightly different matrix elements"); - MITK_TEST_CONDITION(mitk::MatrixEqualRMS(vnlMatrix3x3_1, vnlMatrix3x3_2, epsilon), - "Test for matrix equality with given epsilon and slightly different matrix elements"); - - MITK_TEST_END(); -} + CPPUNIT_TEST_SUITE(mitkVectorTestSuite); + MITK_TEST(TestingItkVecorEqualityMethods_Success); + MITK_TEST(TestingItkPointEqualityMethods_Failure); + MITK_TEST(TestingMitkVnlVectorEqualityMethods_Failure); + MITK_TEST(TestingVnl_VectorEqualityMethod_Success); + MITK_TEST(TestingScalarEqualityMethod_Success); + MITK_TEST(TestingMatrixEqualityMethods_Success); + CPPUNIT_TEST_SUITE_END(); + +private: + itk::Vector m_itkVector_1; + itk::Vector m_itkVector_2; + itk::Vector m_itkVector_3; + +public: + + void setUp() { + + itk::Vector m_itkVector_1; + itk::Vector m_itkVector_2; + itk::Vector m_itkVector_3; + m_itkVector_1[0] = 4.6; + m_itkVector_1[1] = 9.76543; + m_itkVector_1[2] = 746.09; + + } + void tearDown() { + + m_itkVector_1[0] = 0; + m_itkVector_1[1] = 0; + m_itkVector_1[2] = 0; + } + + void TestingItkVecorEqualityMethods_Success(){ + // test itk vector equality methods + + for (int i = 0; i < 3; i++) + { + m_itkVector_2[i] = m_itkVector_1[i] - mitk::eps * 1.1; + m_itkVector_3[i] = m_itkVector_1[i] - mitk::eps * 0.9; + } + + CPPUNIT_ASSERT_MESSAGE("Test vector equality using the same vector with mitk::eps", mitk::Equal(m_itkVector_1, m_itkVector_1)); + CPPUNIT_ASSERT_MESSAGE("Test vector equality using different vectors with an element-wise difference greater than mitk::eps", + !mitk::Equal(m_itkVector_1, m_itkVector_2)); + CPPUNIT_ASSERT_MESSAGE("Vectors are equal for higher epsilon tolerance ( 1.2 * mitk::eps )", mitk::Equal(m_itkVector_1, m_itkVector_2, mitk::eps * 1.2)); + CPPUNIT_ASSERT_MESSAGE("Test vector equality using different vectors with an element-wise difference less than mitk::eps", + mitk::Equal(m_itkVector_1, m_itkVector_3)); + } + + void TestingItkPointEqualityMethods_Failure() { + // test itk point equality methods + itk::Point itkPoint_1; + itk::Point itkPoint_2; + itk::Point itkPoint_3; + for (int i = 0; i < 3; i++) + { + itkPoint_1[i] = m_itkVector_1[i]; + itkPoint_2[i] = m_itkVector_2[i]; + itkPoint_3[i] = m_itkVector_3[i]; + } + CPPUNIT_ASSERT_MESSAGE("Test point equality using the same point with mitk::eps", mitk::Equal(itkPoint_1, itkPoint_1)); + CPPUNIT_ASSERT_MESSAGE("Test point equality using different points with an element-wise difference greater than mitk::eps", + mitk::Equal(itkPoint_1, itkPoint_2)); + CPPUNIT_ASSERT_MESSAGE("Points are equal for higher epsilon tolerance ( 1.2 * mitk::eps )", mitk::Equal(itkPoint_1, itkPoint_2, mitk::eps * 1.2)); + CPPUNIT_ASSERT_MESSAGE("Test point equality using different points with an element-wise difference less than mitk::eps", + mitk::Equal(itkPoint_1, itkPoint_3)); + } + + void TestingMitkVnlVectorEqualityMethods_Failure() { + // test mitk vnl vector equality methods + mitk::VnlVector mitk_vnl_vector_1(3); + mitk::VnlVector mitk_vnl_vector_2(3); + mitk::VnlVector mitk_vnl_vector_3(3); + for (int i = 0; i < 3; i++) + { + mitk_vnl_vector_1.put(i, m_itkVector_1[i]); + mitk_vnl_vector_2.put(i, m_itkVector_2[i]); + mitk_vnl_vector_3.put(i, m_itkVector_1[i]); + } + + CPPUNIT_ASSERT_MESSAGE("Test mitk vnl vector equality using the same mitk vnl vector with mitk::eps", + mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_1)); + CPPUNIT_ASSERT_MESSAGE("Test mitk vnl vector equality using different mitk vnl vectors with an element-wise difference " "greater than mitk::eps", + mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_2)); + CPPUNIT_ASSERT_MESSAGE("Vnl vectors are equal for higher epsilon tolerance ( 1.2 * mitk::eps )", mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_2, mitk::eps * 1.2)); + CPPUNIT_ASSERT_MESSAGE("Test mitk vnl vector equality using " "different mitk vnl vectors with an " "element-wise difference less than mitk::eps", + mitk::Equal(mitk_vnl_vector_1, mitk_vnl_vector_3)); + } + + void TestingVnl_VectorEqualityMethod_Success() { + // test vnl_vector equality method + typedef mitk::ScalarType VnlValueType; + vnl_vector_fixed vnlVector_1; + vnlVector_1[3] = 56.98; + vnlVector_1[4] = 22.32; + vnlVector_1[5] = 1.00; + vnlVector_1[6] = 746.09; + vnl_vector_fixed vnlVector_2; + vnl_vector_fixed vnlVector_3; + for (int i = 0; i < 7; i++) + { + if (i < 3) + { + vnlVector_1.put(i, m_itkVector_1[i]); + } + + vnlVector_2[i] = vnlVector_1[i] - mitk::eps * 1.1f; + vnlVector_3[i] = vnlVector_1[i] - mitk::eps * 0.9f; + } + + CPPUNIT_ASSERT_MESSAGE("vnl_fixed : v_1 == v_1 ", (mitk::Equal(vnlVector_1, vnlVector_1))); + // the v_2 is constructed so that the equality test fails for mitk::eps, the norm of the difference between the + // vectors is 7 * eps/6.9 + CPPUNIT_ASSERT_MESSAGE("vnl_fixed : v_1 != v_2 with mitk::eps ", !(mitk::Equal(vnlVector_1, vnlVector_2))); + // increase the epsilon value used for testing equality - should now pass ( 1.2 * mitk::eps > 7 * mitk::eps/6.9 ) + CPPUNIT_ASSERT_MESSAGE("vnl_fixed : v_1 == v_2 with eps = 1.2 * mitk::eps ", (mitk::Equal(vnlVector_1, vnlVector_2, mitk::eps * 1.2f))); + CPPUNIT_ASSERT_MESSAGE("vnl_fixed : v_1 == v_3 with eps = 0.8 * mitk::eps ", (mitk::Equal(vnlVector_1, vnlVector_3, mitk::eps))); + CPPUNIT_ASSERT_MESSAGE("vnl_fixed : v_1 != v_3 with eps = 0.8 * mitk::eps ", !(mitk::Equal(vnlVector_1, vnlVector_3, mitk::eps * 0.8f))); + } + + void TestingScalarEqualityMethod_Success() { + // test scalar equality method + mitk::ScalarType scalar1 = 0.5689; + mitk::ScalarType scalar2 = scalar1 + mitk::eps * 1.01; + mitk::ScalarType scalar3 = scalar1; + mitk::ScalarType scalar4 = scalar1 + mitk::eps * 0.95; + CPPUNIT_ASSERT_MESSAGE("Test scalar equality using the same scalar with mitk::eps", mitk::Equal(scalar1, scalar1)); + CPPUNIT_ASSERT_MESSAGE("Test scalar equality using the different scalars with a difference greater than mitk::eps", !mitk::Equal(scalar1, scalar2)); + CPPUNIT_ASSERT_MESSAGE("Test scalar equality using the different scalars with a difference equal to mitk::eps", mitk::Equal(scalar1, scalar3)); + CPPUNIT_ASSERT_MESSAGE("Test scalar equality using the different scalars with a difference less than mitk::eps", mitk::Equal(scalar1, scalar4)); + } + + void TestingMatrixEqualityMethods_Success() { + // test matrix equality methods + vnl_matrix_fixed vnlMatrix3x3_1; + vnlMatrix3x3_1(0, 0) = 1.1; + vnlMatrix3x3_1(0, 1) = 0.4; + vnlMatrix3x3_1(0, 2) = 5.3; + vnlMatrix3x3_1(1, 0) = 2.7; + vnlMatrix3x3_1(1, 1) = 3578.56418; + vnlMatrix3x3_1(1, 2) = 123.56; + vnlMatrix3x3_1(2, 0) = 546.89; + vnlMatrix3x3_1(2, 1) = 0.0001; + vnlMatrix3x3_1(2, 2) = 1.0; + vnl_matrix_fixed vnlMatrix3x3_2; + vnlMatrix3x3_2(0, 0) = 1.1000009; + vnlMatrix3x3_2(0, 1) = 0.4000009; + vnlMatrix3x3_2(0, 2) = 5.3000009; + vnlMatrix3x3_2(1, 0) = 2.7000009; + vnlMatrix3x3_2(1, 1) = 3578.5641809; + vnlMatrix3x3_2(1, 2) = 123.5600009; + vnlMatrix3x3_2(2, 0) = 546.8900009; + vnlMatrix3x3_2(2, 1) = 0.0001009; + vnlMatrix3x3_2(2, 2) = 1.0000009; + + mitk::ScalarType epsilon = 0.000001; + CPPUNIT_ASSERT_MESSAGE("Test for matrix equality with given epsilon=mitk::eps and exactly the same matrix elements", + mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_1, mitk::eps)); + CPPUNIT_ASSERT_MESSAGE("Test for matrix equality with given epsilon=0.0 and slightly different matrix elements", + !mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_2, 0.0)); + CPPUNIT_ASSERT_MESSAGE("Test for matrix equality with given epsilon and slightly different matrix elements", + mitk::MatrixEqualElementWise(vnlMatrix3x3_1, vnlMatrix3x3_2, epsilon)); + CPPUNIT_ASSERT_MESSAGE("Test for matrix equality with given epsilon=0.0 and slightly different matrix elements", + !mitk::MatrixEqualRMS(vnlMatrix3x3_1, vnlMatrix3x3_2, 0.0)); + CPPUNIT_ASSERT_MESSAGE("Test for matrix equality with given epsilon and slightly different matrix elements", + mitk::MatrixEqualRMS(vnlMatrix3x3_1, vnlMatrix3x3_2, epsilon)); + } + +}; +MITK_TEST_SUITE_REGISTRATION(mitkVector) +