Skip to content

Commit

Permalink
Merge branch 'fix-constness-arrow-it' into 'master'
Browse files Browse the repository at this point in the history
Fix constness arrow it

See merge request correaa/boost-multi!1362
  • Loading branch information
correaa committed Mar 1, 2025
2 parents 79b47c7 + ceb2bc7 commit 5b7da7b
Show file tree
Hide file tree
Showing 7 changed files with 163 additions and 103 deletions.
3 changes: 1 addition & 2 deletions include/boost/multi/adaptors/fftw/test/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ namespace fftw = multi::fftw;

template<class M> auto power(M const& elem) -> decltype(std::norm(elem)) { return std::norm(elem); }

template<class M,
std::enable_if_t<(M::rank::value >= 1), int> =0> // NOLINT(modernize-use-constraints) for C++20
template<class M, std::enable_if_t<(M::rank::value >= 1), int> =0> // NOLINT(modernize-use-constraints) for C++20
auto power(M const& array) {
return accumulate(begin(array), end(array), 0.0, [](auto const& alpha, auto const& omega) { return alpha + power(omega); });
}
Expand Down
2 changes: 1 addition & 1 deletion include/boost/multi/adaptors/fftw/test/moved.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <boost/multi/adaptors/fftw.hpp>
#include <boost/multi/array.hpp>

// IWYU pragma: no_include <algorithm> // for fill_n, equal
// IWYU pragma: no_include <algorithm> // for fill_n, equal
#include <complex>
#include <numeric> // for std::transform_reduce
#include <utility> // for move // IWYU pragma: keep
Expand Down
185 changes: 109 additions & 76 deletions include/boost/multi/array_ref.hpp

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions test/array_ptr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,15 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro
BOOST_TEST( pac2 == parr2 );
}

BOOST_AUTO_TEST_CASE(subarray_ptr_1D) {
multi::subarray_ptr<double, 1> const ptr = nullptr;
BOOST_TEST(( ptr == multi::subarray_ptr<double, 1>{nullptr} ));
}
// BOOST_AUTO_TEST_CASE(subarray_ptr_1D) {
// multi::subarray_ptr<double, 1> const ptr = nullptr;
// BOOST_TEST(( ptr == multi::subarray_ptr<double, 1>{nullptr} ));
// }

BOOST_AUTO_TEST_CASE(subarray_ptr_2D) {
multi::subarray_ptr<double, 2> const ptr = nullptr;
BOOST_TEST(( ptr == multi::subarray_ptr<double, 2>{nullptr} ));
}
// BOOST_AUTO_TEST_CASE(subarray_ptr_2D) {
// multi::subarray_ptr<double, 2> const ptr = nullptr;
// BOOST_TEST(( ptr == multi::subarray_ptr<double, 2>{nullptr} ));
// }

BOOST_AUTO_TEST_CASE(multi_array_ptr) {
{
Expand Down Expand Up @@ -138,10 +138,10 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro
static_assert(std::is_trivially_copyable_v<multi::layout_t<2>>);

#ifndef _MSC_VER
static_assert(std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 2>>);
// static_assert(std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 2>>);
#endif
static_assert(std::is_trivially_copy_assignable_v<multi::subarray_ptr<double, 2>>);
static_assert(std::is_trivially_copyable_v<multi::subarray_ptr<double, 2>>);
// static_assert(std::is_trivially_copy_assignable_v<multi::subarray_ptr<double, 2>>);
// static_assert(std::is_trivially_copyable_v<multi::subarray_ptr<double, 2>>);

BOOST_TEST( (*arrP).extensions() == multi::extensions(arr) );
BOOST_TEST( arrP->extensions() == multi::extensions(arr) );
Expand Down
2 changes: 1 addition & 1 deletion test/index_range.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro

ies.prev_canonical(i, j);
BOOST_TEST( i == 0 );
BOOST_TEST( j == 0);
BOOST_TEST( j == 0);
}

// test prev canonical 2D
Expand Down
40 changes: 34 additions & 6 deletions test/iterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro
BOOST_TEST((std::is_trivially_copy_assignable_v <multi::layout_t<1>>));
BOOST_TEST((std::is_trivially_default_constructible_v<multi::layout_t<1>>));

BOOST_TEST((std::is_trivially_copy_constructible_v <multi::subarray_ptr<double, 1>>));
BOOST_TEST((std::is_trivially_copy_assignable_v <multi::subarray_ptr<double, 1>>));
BOOST_TEST((std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 1>>));
// BOOST_TEST((std::is_trivially_copy_constructible_v <multi::subarray_ptr<double, 1>>));
// BOOST_TEST((std::is_trivially_copy_assignable_v <multi::subarray_ptr<double, 1>>));
// BOOST_TEST((std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 1>>));

BOOST_TEST((std::is_trivially_default_constructible_v<multi::array<double, 1>::iterator>));
BOOST_TEST((std::is_trivially_copy_constructible_v <multi::array<double, 1>::iterator>));
Expand Down Expand Up @@ -90,9 +90,9 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro
BOOST_TEST((std::is_trivially_copy_assignable_v <multi::layout_t<2>>));
BOOST_TEST((std::is_trivially_default_constructible_v<multi::layout_t<2>>));

BOOST_TEST((std::is_trivially_copy_constructible_v <multi::subarray_ptr<double, 2>>));
BOOST_TEST((std::is_trivially_copy_assignable_v <multi::subarray_ptr<double, 2>>));
BOOST_TEST((std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 2>>));
// BOOST_TEST((std::is_trivially_copy_constructible_v <multi::subarray_ptr<double, 2>>));
// BOOST_TEST((std::is_trivially_copy_assignable_v <multi::subarray_ptr<double, 2>>));
// BOOST_TEST((std::is_trivially_default_constructible_v<multi::subarray_ptr<double, 2>>));

// BOOST_TEST((std::is_trivially_default_constructible_v<multi::array<double, 2>::iterator>)); // TODO(correaa)
BOOST_TEST((std::is_trivially_copy_constructible_v <multi::array<double, 2>::iterator>));
Expand Down Expand Up @@ -316,5 +316,33 @@ auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugpro
BOOST_TEST( arr.end() - 1 < arr.end() );
}

// simple example arrow iterator 1D
{
multi::array<std::string, 1> const arr({4}, std::string{"hello"}); // NOLINT(fuchsia-default-arguments-calls)
BOOST_TEST( arr.size() == 4 );
BOOST_TEST( arr.begin()->size() == 5 );

BOOST_TEST( arr[0] == "hello" );
BOOST_TEST( *(arr.begin()->begin()) == 'h' );

// arr[0][0] = 'H';
// *(arr.begin()->begin()) = "H"; // can't assign to const value
// BOOST_TEST( arr[0] == "Hello" );
}

// simple example arrow operator 2D
{
multi::array<int, 2> const arr({2, 3}, 5);
BOOST_TEST( arr[0].size() == 3 );
BOOST_TEST( arr.begin()->size() == 3 );

BOOST_TEST( arr[0][0] == 5 );
BOOST_TEST( *(arr.begin()->begin()) == 5 );

// arr[0][0] = 6; // ok, doesn't compile, it is read-only
// *(arr.begin()->begin()) = 6; // ok, doesn't work, it is read-only
// BOOST_TEST( arr[0][0] == 6 );
}

return boost::report_errors();
}
12 changes: 6 additions & 6 deletions test/subarray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
namespace multi = boost::multi;

namespace {
auto f_arr(multi::array<int, 1> arr) {
return arr[2];
}
auto f_arr(multi::array<int, 1> arr) {
return arr[2];
}

auto f_sub(multi::const_subarray<int, 1> const& arr) {
return arr[2];
}
auto f_sub(multi::const_subarray<int, 1> const& arr) {
return arr[2];
}
} // namespace

auto main() -> int { // NOLINT(readability-function-cognitive-complexity,bugprone-exception-escape)
Expand Down

0 comments on commit 5b7da7b

Please sign in to comment.