From 96554418e0baf2e536e9821652192f66a23756cc Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 24 Jul 2024 16:24:50 +0200 Subject: [PATCH] added type asserts and tests vor const_vector::assign it und il --- .../const_vector_constructor.test.cpp | 74 +++++++++++++++++-- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/test/const_vector/const_vector_constructor.test.cpp b/test/const_vector/const_vector_constructor.test.cpp index d9646cd..a4b5502 100644 --- a/test/const_vector/const_vector_constructor.test.cpp +++ b/test/const_vector/const_vector_constructor.test.cpp @@ -3,14 +3,21 @@ #include #include "test.hpp" - #include "test_args.h" -#define ASSERT_TYPE_ALL_VEC_EQ(vec, eq, type) ASSERT_ALL_EQ((vec).begin(), (vec).end(), eq) -#define ASSERT_TYPE_RANGE_VEC_EQ(vec, startI, endI, eq, type) ASSERT_ALL_EQ(((vec).data() + startI), ((vec).data() + endI), eq) -#define ASSERT_TYPE_VEC_ARR_EQ(vec, eq, type) ASSERT_C_ARR_EQ((vec).data(), (vec).data() + (vec).size(), std::begin(eq)) -#define ASSERT_TYPE_VEC_EQ(vec1, vec2, type) ASSERT_C_ARR_EQ((vec1).data(), (vec1).data() + (vec1).size(), (vec2).data()) -#define ASSERT_TYPE_RANGE_VEC_ARR_EQ(vec, startI, endI, eq, type) ASSERT_C_ARR_EQ(((vec).begin() + startI), ((vec).begin() + endI), std::begin(eq)) +#include + +#define ASSERT_TYPE_NUM_ALL_VEC_EQ(vec, eq, type, num) ASSERT_TYPE_NUM_ALL_EQ((vec).begin(), (vec).end(), eq, type, num) +#define ASSERT_TYPE_NUM_RANGE_VEC_EQ(vec, startI, endI, eq, type, num) ASSERT_TYPE_NUM_ALL_EQ(((vec).data() + startI), ((vec).data() + endI), eq, type, num) +#define ASSERT_TYPE_NUM_VEC_ARR_EQ(vec, eq, type, num) ASSERT_TYPE_NUM_C_ARR_EQ((vec).data(), (vec).data() + (vec).size(), std::begin(eq), type, num) +#define ASSERT_TYPE_NUM_VEC_EQ(vec1, vec2, type, num) ASSERT_TYPE_NUM_C_ARR_EQ((vec1).data(), (vec1).data() + (vec1).size(), (vec2).data(), type, num) +#define ASSERT_TYPE_NUM_RANGE_VEC_ARR_EQ(vec, startI, endI, eq, type, num) ASSERT_TYPE_NUM_C_ARR_EQ(((vec).begin() + startI), ((vec).begin() + endI), std::begin(eq), type, num) + +#define ASSERT_TYPE_ALL_VEC_EQ(vec, eq, type) ASSERT_TYPE_ALL_EQ((vec).begin(), (vec).end(), eq, type) +#define ASSERT_TYPE_RANGE_VEC_EQ(vec, startI, endI, eq, type) ASSERT_TYPE_ALL_EQ(((vec).data() + startI), ((vec).data() + endI), eq, type) +#define ASSERT_TYPE_VEC_ARR_EQ(vec, eq, type) ASSERT_TYPE_C_ARR_EQ((vec).data(), (vec).data() + (vec).size(), std::begin(eq), type) +#define ASSERT_TYPE_VEC_EQ(vec1, vec2, type) ASSERT_TYPE_C_ARR_EQ((vec1).data(), (vec1).data() + (vec1).size(), (vec2).data(), type) +#define ASSERT_TYPE_RANGE_VEC_ARR_EQ(vec, startI, endI, eq, type) ASSERT_TYPE_C_ARR_EQ(((vec).begin() + startI), ((vec).begin() + endI), std::begin(eq), type) #define ASSERT_ALL_VEC_EQ(vec, eq) ASSERT_TYPE_ALL_VEC_EQ(vec, eq, std::nullptr_t) #define ASSERT_RANGE_VEC_EQ(vec, startI, endI, eq) ASSERT_TYPE_RANGE_VEC_EQ(vec, startI, endI, eq, std::nullptr_t) @@ -18,6 +25,7 @@ #define ASSERT_VEC_EQ(vec1, vec2) ASSERT_TYPE_VEC_EQ(vec1, vec2, std::nullptr_t) #define ASSERT_RANGE_VEC_ARR_EQ(vec, startI, endI, eq) ASSERT_TYPE_RANGE_VEC_ARR_EQ(vec, startI, endI, eq, std::nullptr_t) + constexpr test_suite tests = define_tests("Tests") ("const_vector()", []() constexpr { @@ -1142,10 +1150,61 @@ constexpr test_suite tests = define_tests("Tests") ASSERT_TYPE_ALL_VEC_EQ(v1, test_defs::get::template value<1>(), T); return TEST_PASS(); - }), int, char, const char*, TestStruct) + }), int, char, const char*, TestStruct); return TEST_PASS(); }, EvalFlag::RUNTIME_CONSTEVAL) + ("const_vector::assign(InputIt first, InputIt last)", []() constexpr { + + REPEAT_FOR_TYPES_N(([]() constexpr { + + cc::const_vector::template arr_len()> v1; + cc::const_vector::template il_len()> v2; + cc::const_vector::template il_len()> v3; + cc::const_vector::template arr_len() - 1> v4; + + std::vector container = test_defs::get::template i_list; + + v1.assign(std::begin(test_defs::get::template arr), std::end(test_defs::get::template arr)); + v2.assign(container.begin(), container.end()); + v3.assign(container.begin(), std::next(container.begin(), test_defs::get::template il_len() / 2)); + + ASSERT_TYPE_NUM_THROWS( + (v4.assign(std::begin(test_defs::get::template arr), + std::end(test_defs::get::template arr))), std::invalid_argument, T, N); + + ASSERT_TYPE_NUM_VEC_ARR_EQ(v1, test_defs::get::template arr, T, N); + ASSERT_TYPE_NUM(v1.size() == test_defs::get::template arr_len(), T, N); + ASSERT_TYPE_NUM_VEC_ARR_EQ(v2, container, T, N); + ASSERT_TYPE_NUM(v2.size() == container.size(), T, N); + ASSERT_TYPE_NUM_VEC_ARR_EQ(v3, container, T, N); + ASSERT_TYPE_NUM(v3.size() == container.size() / 2, T, N); + + return TEST_PASS(); + }), 3, int, char, const char *, TestStruct); + + return TEST_PASS(); + }, EvalFlag::RUNTIME_CONSTEVAL) + ("const_vector::assign(std::initializer_list values)", []() constexpr { + + REPEAT_FOR_TYPES_N(([]() constexpr { + + cc::const_vector v1(test_defs::get::template arr<1>); + cc::const_vector v2(test_defs::get::template arr<2>); + cc::const_vector::template capacity<1>()> v3; + + + + return TEST_PASS(); + }), 2, int, char, const char *, TestStruct); + + return TEST_PASS(); + }, EvalFlag::RUNTIME_CONSTEVAL) + /*("const_vector", []() constexpr { + + + return TEST_PASS(); + }, EvalFlag::RUNTIME_CONSTEVAL)*/ /*("const_vector(const_vector&& other)", []() constexpr { return TEST_PASS(); @@ -1155,4 +1214,5 @@ constexpr test_suite tests = define_tests("Tests") int main() { return tests.run(); } + #pragma clang diagnostic pop \ No newline at end of file