From d1d616e148fd2ea049bab82aadda6727a1b5db9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Thu, 27 Jun 2024 19:27:23 +0200 Subject: [PATCH] Continue interface improvement for grouped reconstructions --- tests/test_PolynomialReconstruction.cpp | 26 +++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/tests/test_PolynomialReconstruction.cpp b/tests/test_PolynomialReconstruction.cpp index d90d0e84a..5242b6b04 100644 --- a/tests/test_PolynomialReconstruction.cpp +++ b/tests/test_PolynomialReconstruction.cpp @@ -17,13 +17,28 @@ #include <MeshDataBaseForTests.hpp> -template <typename... DataType> +template <typename... DiscreteFunctionT> std::vector<std::shared_ptr<const DiscreteFunctionVariant>> -build_list(DiscreteFunctionP0<DataType>... input) +build_list(DiscreteFunctionT... input) { std::vector<std::shared_ptr<const DiscreteFunctionVariant>> variant_vector; - variant_vector.push_back(std::make_shared<DiscreteFunctionVariant>(input...)); + auto convert = [&variant_vector](auto&& df) { + using DF_T = std::decay_t<decltype(df)>; + if constexpr (is_discrete_function_v<DF_T> or std::is_same_v<DiscreteFunctionVariant, DF_T>) { + variant_vector.push_back(std::make_shared<DiscreteFunctionVariant>(df)); + } else if constexpr (is_shared_ptr_v<DF_T>) { + using DF_Value_T = std::decay_t<typename DF_T::element_type>; + if constexpr (is_discrete_function_v<DF_Value_T> or std::is_same_v<DiscreteFunctionVariant, DF_Value_T>) { + variant_vector.push_back(std::make_shared<DiscreteFunctionVariant>(*df)); + } else { + static_assert(is_false_v<DF_T>, "unexpected type"); + } + } else { + static_assert(is_false_v<DF_T>, "unexpected type"); + } + }; + (convert(input), ...); return variant_vector; } @@ -51,7 +66,10 @@ TEST_CASE("PolynomialReconstruction", "[scheme]") parallel_for( mesh.numberOfCells(), PUGS_LAMBDA(const CellId cell_id) { fh[cell_id] = affine(xj[cell_id]); }); - auto reconstructions = PolynomialReconstruction{}.build(build_list(fh)); + DiscreteFunctionVariant fh_v(fh); + std::shared_ptr<const DiscreteFunctionVariant> p_fh_v = std::make_shared<DiscreteFunctionVariant>(fh); + + auto reconstructions = PolynomialReconstruction{}.build(build_list(p_fh_v, fh_v, fh)); auto dpk = reconstructions[0]->get<DiscreteFunctionDPk<1, const double>>(); -- GitLab