From 1b96fd982e496d9234e8e06518268561a1b23a32 Mon Sep 17 00:00:00 2001 From: cyborg1811m Date: Sat, 27 Jul 2024 21:44:05 +0200 Subject: [PATCH] added array constructor for different length --- include/const_vector.hpp | 13 +++++++++++-- .../const_vector_constructor.test.cpp | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/const_vector.hpp b/include/const_vector.hpp index 695615a..0abf57e 100644 --- a/include/const_vector.hpp +++ b/include/const_vector.hpp @@ -46,7 +46,7 @@ namespace cc { constexpr explicit const_vector(const value_type (&array)[N]) noexcept; template - constexpr explicit const_vector(const value_type (&array)[N2]) noexcept; + constexpr explicit const_vector(const value_type (&array)[N2]); constexpr const_vector(std::initializer_list values); @@ -213,7 +213,16 @@ namespace cc { constexpr const_vector::const_vector(const value_type (&array)[N]) noexcept : _size(N) { - std::move(std::begin(array), std::end(array), _arr); + std::copy(std::begin(array), std::end(array), _arr); + } + + template + template + constexpr const_vector::const_vector(const value_type (&array)[N2]) + : _size(N2) + { + if (N < N2) throw std::invalid_argument("Size of array has to be smaller or equal to the capacity: " + std::to_string(N2) + ">=" + std::to_string(N)); + std::copy(std::begin(array), std::end(array), _arr); } template diff --git a/test/const_vector/const_vector_constructor.test.cpp b/test/const_vector/const_vector_constructor.test.cpp index 9889dae..27095e6 100644 --- a/test/const_vector/const_vector_constructor.test.cpp +++ b/test/const_vector/const_vector_constructor.test.cpp @@ -265,6 +265,23 @@ constexpr test_suite tests = define_tests("Tests") return TEST_PASS(); + }, EvalFlag::RUNTIME_CONSTEVAL) + ("const_vector(const value_type (&array)[N2])", []() constexpr { + + REPEAT_FOR_TYPES_N(([]() constexpr { + + cc::const_vector::get_arr_len() + 1> v(test_context_params::template value<"arr">); + + ASSERT_TYPE_NUM((v.size() == test_params<"arr", Ctx>::get_arr_len()), T, N); + ASSERT_TYPE_NUM_RANGE_VEC_ARR_EQ(v, 0, (test_params<"arr", Ctx>::get_arr_len()), (test_context_params::template value<"arr">), T, N); + + ASSERT_TYPE_NUM_THROWS((cc::const_vector::get_arr_len() - 1>(test_context_params::template value<"arr">)), std::invalid_argument, T, N); + + return TEST_PASS(); + }), 2, int, char, const char *, TestObj); + + return TEST_PASS(); + }, EvalFlag::RUNTIME_CONSTEVAL) ("const_vector(std::initializer_list list)", []() constexpr {