|
19 | 19 | // First include the header file to be tested: |
20 | 20 | #include "itkArray2D.h" |
21 | 21 | #include <gtest/gtest.h> |
| 22 | +#include <iostream> |
22 | 23 | #include <limits> |
23 | 24 | #include <type_traits> // For is_nothrow_move_constructible_v and is_nothrow_move_assignable_v. |
24 | 25 |
|
@@ -110,3 +111,77 @@ TEST(Array2D, MoveAssign) |
110 | 111 | checkMoveAssign(itk::Array2D<int>(1U, 1U)); |
111 | 112 | checkMoveAssign(itk::Array2D<double>(1U, 2U)); |
112 | 113 | } |
| 114 | + |
| 115 | + |
| 116 | +TEST(Array2D, ConvertedLegacyTest) |
| 117 | +{ |
| 118 | + using ArrayType = itk::Array2D<double>; |
| 119 | + |
| 120 | + using VnlMatrixType = vnl_matrix<double>; |
| 121 | + |
| 122 | + constexpr unsigned int rows{ 3 }; |
| 123 | + constexpr unsigned int cols{ 4 }; |
| 124 | + |
| 125 | + ArrayType a(rows, cols); |
| 126 | + VnlMatrixType vm(rows, cols); |
| 127 | + |
| 128 | + for (unsigned int r = 0; r < rows; ++r) |
| 129 | + { |
| 130 | + for (unsigned int c = 0; c < cols; ++c) |
| 131 | + { |
| 132 | + const auto value = static_cast<double>(r + c); |
| 133 | + a.SetElement(r, c, value); |
| 134 | + vm(r, c) = value; |
| 135 | + } |
| 136 | + } |
| 137 | + |
| 138 | + constexpr double tolerance{ 1e-6 }; |
| 139 | + |
| 140 | + // test copy constructor |
| 141 | + ArrayType b(a); |
| 142 | + |
| 143 | + for (unsigned int r = 0; r < rows; ++r) |
| 144 | + { |
| 145 | + for (unsigned int c = 0; c < cols; ++c) |
| 146 | + { |
| 147 | + EXPECT_NEAR(b(r, c), a.GetElement(r, c), tolerance); |
| 148 | + } |
| 149 | + } |
| 150 | + |
| 151 | + // test construction from vnl_matrix |
| 152 | + ArrayType d(vm); |
| 153 | + |
| 154 | + for (unsigned int r = 0; r < rows; ++r) |
| 155 | + { |
| 156 | + for (unsigned int c = 0; c < cols; ++c) |
| 157 | + { |
| 158 | + EXPECT_NEAR(d(r, c), vm(r, c), tolerance); |
| 159 | + } |
| 160 | + } |
| 161 | + |
| 162 | + // test for assignment from Array2D |
| 163 | + |
| 164 | + ArrayType e = a; |
| 165 | + |
| 166 | + for (unsigned int r = 0; r < rows; ++r) |
| 167 | + { |
| 168 | + for (unsigned int c = 0; c < cols; ++c) |
| 169 | + { |
| 170 | + EXPECT_NEAR(e(r, c), a(r, c), tolerance); |
| 171 | + } |
| 172 | + } |
| 173 | + |
| 174 | + // test for assignment from vnl_matrix |
| 175 | + |
| 176 | + ArrayType f = vm; |
| 177 | + |
| 178 | + for (unsigned int r = 0; r < rows; ++r) |
| 179 | + { |
| 180 | + for (unsigned int c = 0; c < cols; ++c) |
| 181 | + { |
| 182 | + EXPECT_NEAR(f(r, c), vm(r, c), tolerance); |
| 183 | + } |
| 184 | + } |
| 185 | + |
| 186 | + std::cout << "Test Passed ! " << std::endl; |
| 187 | +} |
0 commit comments