diff --git a/tests/test_PolynomialReconstruction.cpp b/tests/test_PolynomialReconstruction.cpp index d90d0e84a153d67834942756ddb18cc746c5b05b..5242b6b041dda5429a6c3509f4b0523e4924b5ac 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>>();