From 3717983a82de547006c8fe6e0298ff9b4cd4b389 Mon Sep 17 00:00:00 2001 From: Simon Praetorius <simon.praetorius@tu-dresden.de> Date: Thu, 12 Dec 2024 21:45:35 +0100 Subject: [PATCH] Extend the DenseVectorSpan test and deduction guides --- dune/common/densevectorspan.hh | 4 ++++ dune/common/test/densevectorspantest.cc | 25 +++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/dune/common/densevectorspan.hh b/dune/common/densevectorspan.hh index f4ad3df5b..5f8a0386c 100644 --- a/dune/common/densevectorspan.hh +++ b/dune/common/densevectorspan.hh @@ -70,6 +70,10 @@ template <class K> DenseVectorSpan (K*, std::size_t) -> DenseVectorSpan<K>; +template <class K, std::size_t N> +DenseVectorSpan (K (&)[N]) + -> DenseVectorSpan<K,N>; + template <class S, std::enable_if_t<Dune::IsNumber<S>::value,int> = 0> DenseVectorSpan (S&) -> DenseVectorSpan<S,1>; diff --git a/dune/common/test/densevectorspantest.cc b/dune/common/test/densevectorspantest.cc index 3014eb242..56a862c89 100644 --- a/dune/common/test/densevectorspantest.cc +++ b/dune/common/test/densevectorspantest.cc @@ -24,13 +24,26 @@ int main() std::vector<double> x(3); std::array<double,3> y{1.0,2.0,3.0}; - auto x_span = Dune::DenseVectorSpan(x); - auto y_span = Dune::DenseVectorSpan(y); + { + auto x_span = Dune::DenseVectorSpan(x); + auto y_span = Dune::DenseVectorSpan(y); + + matrix.mv(y_span,x_span); + test.check(x[0] == -3.0); + test.check(x[1] == 2.0); + test.check(x[2] == 9.0); + } - matrix.mv(y_span,x_span); - test.check(x[0] == -3.0); - test.check(x[1] == 2.0); - test.check(x[2] == 9.0); + { + [[maybe_unused]] auto x_span1 = Dune::DenseVectorSpan(x.data(), x.size()); + [[maybe_unused]] auto x_span2 = Dune::DenseVectorSpan<double,3>(x.data()); + } + + { + double data[3]{1.0,2.0,3.0}; + [[maybe_unused]] auto x_span1 = Dune::DenseVectorSpan(data, 3); + [[maybe_unused]] auto x_span2 = Dune::DenseVectorSpan(data); + } return test.exit(); } -- GitLab