Skip to content

Commit

Permalink
ENH: Add Array2D(numberOfRows, numberOfCols, initialValue) constructor
Browse files Browse the repository at this point in the history
Allows constructing an `Array2D` with each element having the specified initial
value.
  • Loading branch information
N-Dekker committed Mar 7, 2024
1 parent 88e4f10 commit ec5223e
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Modules/Core/Common/include/itkArray2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ class ITK_TEMPLATE_EXPORT Array2D : public vnl_matrix<TValue>
/** Constructs a matrix of the specified number of rows and columns. */
Array2D(unsigned int numberOfRows, unsigned int numberOfCols);

/** Constructs a matrix of the specified number of rows and columns, with each element having the specified initial
* value. */
Array2D(unsigned int numberOfRows, unsigned int numberOfCols, const TValue & initialValue);

/** Copy-constructor. */
Array2D(const Self & array);

Expand Down
5 changes: 5 additions & 0 deletions Modules/Core/Common/include/itkArray2D.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ Array2D<TValue>::Array2D(unsigned int numberOfRows, unsigned int numberOfCols)
: vnl_matrix<TValue>(numberOfRows, numberOfCols)
{}

template <typename TValue>
Array2D<TValue>::Array2D(unsigned int numberOfRows, unsigned int numberOfCols, const TValue & initialValue)
: vnl_matrix<TValue>(numberOfRows, numberOfCols, initialValue)
{}

template <typename TValue>
Array2D<TValue>::Array2D(const VnlMatrixType & matrix)
: vnl_matrix<TValue>(matrix)
Expand Down
1 change: 1 addition & 0 deletions Modules/Core/Common/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1712,6 +1712,7 @@ if(ITK_BUILD_SHARED_LIBS AND ITK_DYNAMIC_LOADING)
endif()

set(ITKCommonGTests
itkArray2DGTest.cxx
itkAggregateTypesGTest.cxx
itkBitCastGTest.cxx
itkBooleanStdVectorGTest.cxx
Expand Down
53 changes: 53 additions & 0 deletions Modules/Core/Common/test/itkArray2DGTest.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*=========================================================================
*
* Copyright NumFOCUS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/

// First include the header file to be tested:
#include "itkArray2D.h"
#include <gtest/gtest.h>
#include <limits>


// Tests that Array2D may be constructed with an initial value for each element.
TEST(Array2D, ConstructorSupportsInitialValue)
{
const auto checkConstructor =
[](const unsigned int numberOfRows, const unsigned int numberOfCols, const auto initialValue) {
using ValueType = std::remove_const_t<decltype(initialValue)>;

const itk::Array2D<ValueType> array2D(numberOfRows, numberOfCols, initialValue);

EXPECT_EQ(array2D.rows(), numberOfRows);
EXPECT_EQ(array2D.columns(), numberOfCols);

for (const auto & element : array2D)
{
EXPECT_EQ(element, initialValue);
}
};

for (const auto initialValue : { -1, 0, 1 })
{
checkConstructor(0, 0, initialValue);
checkConstructor(1, 2, initialValue);
}
for (const auto initialValue : { std::numeric_limits<double>::min(), std::numeric_limits<double>::max() })
{
checkConstructor(0, 0, initialValue);
checkConstructor(1, 2, initialValue);
}
}

0 comments on commit ec5223e

Please sign in to comment.