1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 19 #include <iostream> 20 21 #include "itkIdentityTransform.h" 22 #include "itkTestingMacros.h" 23 itkIdentityTransformTest(int,char * [])24int itkIdentityTransformTest(int, char *[] ) 25 { 26 27 std::cout << "==================================" << std::endl; 28 std::cout << "Testing Identity Transform " << std::endl << std::endl; 29 30 const double epsilon = 1e-10; 31 constexpr unsigned int N = 2; 32 bool Ok = true; 33 34 using IdentityTransformType = itk::IdentityTransform<double>; 35 IdentityTransformType::Pointer transform = IdentityTransformType::New(); 36 37 std::cout << "Testing TransformPoint: "; 38 IdentityTransformType::InputPointType p( 10 ); 39 IdentityTransformType::OutputPointType r; 40 41 r = transform->TransformPoint( p ); 42 for( unsigned int i = 0; i < N; i++ ) 43 { 44 if( std::fabs( p[i] - r[i] ) > epsilon ) 45 { 46 Ok = false; 47 break; 48 } 49 } 50 if( !Ok ) 51 { 52 std::cerr << "Error Transforming Point" << std::endl; 53 return EXIT_FAILURE; 54 } 55 else 56 { 57 std::cout << " [ PASSED ] " << std::endl; 58 } 59 60 // Test TransformVector 61 std::cout << "Testing TransformVector: "; 62 IdentityTransformType::InputVectorType vin; 63 vin[0] = 1; 64 vin[1] = 2; 65 IdentityTransformType::OutputVectorType vout; 66 67 vout = transform->TransformVector( vin ); 68 for( unsigned int i = 0; i < N; i++ ) 69 { 70 if( std::fabs( vout[i] - vin[i] ) > epsilon ) 71 { 72 Ok = false; 73 break; 74 } 75 } 76 if( !Ok ) 77 { 78 std::cerr << "Error with TransformVector itk::Vector" << std::endl; 79 return EXIT_FAILURE; 80 } 81 else 82 { 83 std::cout << " [ PASSED ] " << std::endl; 84 } 85 86 // Test TransformVector vnl_vector 87 std::cout << "Testing TransformVector (vnl): "; 88 IdentityTransformType::InputVnlVectorType vnlin; 89 vnlin[0] = 1; 90 vnlin[1] = 2; 91 IdentityTransformType::OutputVnlVectorType vnlout; 92 93 vnlout = transform->TransformVector( vnlin ); 94 for( unsigned int i = 0; i < N; i++ ) 95 { 96 if( std::fabs( vnlout[i] - vnlin[i] ) > epsilon ) 97 { 98 Ok = false; 99 break; 100 } 101 } 102 if( !Ok ) 103 { 104 std::cerr << "Error with TransformVector vnlVector" << std::endl; 105 return EXIT_FAILURE; 106 } 107 else 108 { 109 std::cout << " [ PASSED ] " << std::endl; 110 } 111 112 // Test TransformCovariantVector 113 std::cout << "Testing TransformCovariantVector: "; 114 IdentityTransformType::InputCovariantVectorType vcin; 115 vcin[0] = 1; 116 vcin[1] = 2; 117 IdentityTransformType::OutputCovariantVectorType vcout; 118 119 vcout = transform->TransformCovariantVector( vcin ); 120 for( unsigned int i = 0; i < N; i++ ) 121 { 122 if( std::fabs( vcout[i] - vcin[i] ) > epsilon ) 123 { 124 Ok = false; 125 break; 126 } 127 } 128 if( !Ok ) 129 { 130 std::cerr << "Error with TransformVector CovariantVector" << std::endl; 131 return EXIT_FAILURE; 132 } 133 else 134 { 135 std::cout << " [ PASSED ] " << std::endl; 136 } 137 138 // Test the Set/Get Parameters 139 std::cout << "Testing Set/GetParameters():"; 140 IdentityTransformType::ParametersType params(0); 141 transform->SetParameters(params); 142 std::cout << " [ PASSED ] " << std::endl; 143 144 // Test the GetNumberOfParameters() method 145 std::cout << "Testing GetNumberOfParameters():"; 146 unsigned int numParams = transform->GetNumberOfParameters(); 147 if( numParams != 0 ) 148 { 149 std::cerr << "Error with GetNumberOfParameters" << std::endl; 150 return EXIT_FAILURE; 151 } 152 else 153 { 154 std::cout << " [ PASSED ] " << std::endl; 155 } 156 157 // Testing the Jacobian 158 std::cout << "Testing Jacobian: "; 159 IdentityTransformType::JacobianType jacobian; 160 transform->ComputeJacobianWithRespectToParameters(p, jacobian); 161 162 if( jacobian.rows() != 3 || jacobian.columns() != 0 ) 163 { 164 std::cerr << "Error with Jacobian: " << jacobian << std::endl; 165 return EXIT_FAILURE; 166 } 167 else 168 { 169 std::cout << " [ PASSED ] " << std::endl; 170 } 171 172 IdentityTransformType::Pointer inv = IdentityTransformType::New(); 173 TEST_EXPECT_TRUE(transform->GetInverse(inv)); 174 TEST_EXPECT_TRUE(!transform->GetInverse(nullptr)); 175 176 return EXIT_SUCCESS; 177 178 } 179