From bb335bd9c305d43e52c0e4b27b1413da5a54c07f Mon Sep 17 00:00:00 2001 From: Patrick Date: Sun, 7 Jan 2024 22:59:50 +0100 Subject: [PATCH] added tests for operator= initializer list --- test/test_main.cpp | 208 +++++++++++++++++++++++++++++++-------------- 1 file changed, 145 insertions(+), 63 deletions(-) diff --git a/test/test_main.cpp b/test/test_main.cpp index 488b438..7ee19f7 100644 --- a/test/test_main.cpp +++ b/test/test_main.cpp @@ -739,70 +739,130 @@ class test_const_vector : public test_defs { #pragma message("Testing operator=") - -#define DEFINE_APPLICATOR(type) DEFINE_APPLICATOR_EXT(type, type) -#define DEFINE_APPLICATOR_EXT(type_abbr, type) constexpr auto type_abbr##_applicator = []() consteval { \ - constexpr auto& arr1 = type_abbr##_defs::get_arr_for_type<1>(); \ - constexpr auto& arr2 = type_abbr##_defs::get_arr_for_type<2>(); \ - constexpr auto arr1_len = type_abbr##_defs::get_arr_len_for_type<1>(); \ - constexpr auto arr2_len = type_abbr##_defs::get_arr_len_for_type<2>(); \ - cc::const_vector v1o(arr1); \ - cc::const_vector v2o(arr2); \ - \ - struct { \ - decltype(v1o) v1cs; \ - decltype(v2o) v2cs; \ - cc::const_vector v1cd; \ - cc::const_vector v2cd; \ - decltype(v1o) v1m; \ - decltype(v2o) v2m; \ - cc::const_vector v1a; \ - cc::const_vector v2a; \ - } ret; \ - \ - ret.v1cs = v1o; \ - ret.v2cs = v2o; \ - ret.v1cd = v1o; \ - ret.v2cd = v2o; \ - ret.v1m = const_cast&&>(v1o); \ - ret.v2m = const_cast&&>(v2o); \ - ret.v1a = arr1; \ - ret.v2a = arr2; \ - \ - return ret; \ - } - - DEFINE_APPLICATOR(int); - DEFINE_APPLICATOR(char); - DEFINE_APPLICATOR_EXT(string, const char *); - DEFINE_APPLICATOR_EXT(obj, TestStruct); - - /*auto int_applicator = []() consteval { - cc::const_vector vi1o(C_VI_TEST_ARR1); - cc::const_vector vi2o(C_VI_TEST_ARR2); - + constexpr auto int_applicator = []()consteval { + constexpr auto &arr1 = int_defs::get_arr_for_type<1>(); + constexpr auto &arr2 = int_defs::get_arr_for_type<2>(); + constexpr auto arr1_len = int_defs::get_arr_len_for_type<1>(); + constexpr auto arr2_len = int_defs::get_arr_len_for_type<2>(); + cc::const_vector v1o(arr1); + cc::const_vector v2o(arr2); struct { - decltype(vi1o) vi1cs; - decltype(vi2o) vi2cs; - cc::const_vector vi1cd; - cc::const_vector vi2cd; - decltype(vi1o) vi1m; - decltype(vi2o) vi2m; - cc::const_vector()> vi1a; - cc::const_vector vi2a; + decltype(v1o) v1cs; + decltype(v2o) v2cs; + cc::const_vector v1cd; + cc::const_vector v2cd; + decltype(v1o) v1m; + decltype(v2o) v2m; + cc::const_vector v1a; + cc::const_vector v2a; + cc::const_vector v1i; + cc::const_vector v2i; } ret; - - ret.vi1cs = vi1o; - ret.vi2cs = vi2o; - ret.vi1cd = vi1o; - ret.vi2cd = vi2o; - ret.vi1m = vi1o; - ret.vi2m = vi2o; - ret.vi1a = C_VI_TEST_ARR1; - ret.vi2a = C_VI_TEST_ARR2; - + ret.v1cs = v1o; + ret.v2cs = v2o; + ret.v1cd = v1o; + ret.v2cd = v2o; + ret.v1m = const_cast &&>(v1o); + ret.v2m = const_cast &&>(v2o); + ret.v1a = arr1; + ret.v2a = arr2; + ret.v1i = VI_TEST_ARR1; + ret.v2i = VI_TEST_ARR2; return ret; - };*/ + }; + constexpr auto char_applicator = []()consteval { + constexpr auto &arr1 = char_defs::get_arr_for_type<1>(); + constexpr auto &arr2 = char_defs::get_arr_for_type<2>(); + constexpr auto arr1_len = char_defs::get_arr_len_for_type<1>(); + constexpr auto arr2_len = char_defs::get_arr_len_for_type<2>(); + cc::const_vector v1o(arr1); + cc::const_vector v2o(arr2); + struct { + decltype(v1o) v1cs; + decltype(v2o) v2cs; + cc::const_vector v1cd; + cc::const_vector v2cd; + decltype(v1o) v1m; + decltype(v2o) v2m; + cc::const_vector v1a; + cc::const_vector v2a; + cc::const_vector v1i; + cc::const_vector v2i; + } ret; + ret.v1cs = v1o; + ret.v2cs = v2o; + ret.v1cd = v1o; + ret.v2cd = v2o; + ret.v1m = const_cast &&>(v1o); + ret.v2m = const_cast &&>(v2o); + ret.v1a = arr1; + ret.v2a = arr2; + ret.v1i = VC_TEST_ARR1; + ret.v2i = VC_TEST_ARR2; + return ret; + }; + constexpr auto string_applicator = []()consteval { + constexpr auto &arr1 = string_defs::get_arr_for_type<1>(); + constexpr auto &arr2 = string_defs::get_arr_for_type<2>(); + constexpr auto arr1_len = string_defs::get_arr_len_for_type<1>(); + constexpr auto arr2_len = string_defs::get_arr_len_for_type<2>(); + cc::const_vector v1o(arr1); + cc::const_vector v2o(arr2); + struct { + decltype(v1o) v1cs; + decltype(v2o) v2cs; + cc::const_vector v1cd; + cc::const_vector v2cd; + decltype(v1o) v1m; + decltype(v2o) v2m; + cc::const_vector v1a; + cc::const_vector v2a; + cc::const_vector v1i; + cc::const_vector v2i; + } ret; + ret.v1cs = v1o; + ret.v2cs = v2o; + ret.v1cd = v1o; + ret.v2cd = v2o; + ret.v1m = const_cast &&>(v1o); + ret.v2m = const_cast &&>(v2o); + ret.v1a = arr1; + ret.v2a = arr2; + ret.v1i = VS_TEST_ARR1; + ret.v2i = VS_TEST_ARR2; + return ret; + }; + constexpr auto obj_applicator = []()consteval { + constexpr auto &arr1 = obj_defs::get_arr_for_type<1>(); + constexpr auto &arr2 = obj_defs::get_arr_for_type<2>(); + constexpr auto arr1_len = obj_defs::get_arr_len_for_type<1>(); + constexpr auto arr2_len = obj_defs::get_arr_len_for_type<2>(); + cc::const_vector v1o(arr1); + cc::const_vector v2o(arr2); + struct { + decltype(v1o) v1cs; + decltype(v2o) v2cs; + cc::const_vector v1cd; + cc::const_vector v2cd; + decltype(v1o) v1m; + decltype(v2o) v2m; + cc::const_vector v1a; + cc::const_vector v2a; + cc::const_vector v1i; + cc::const_vector v2i; + } ret; + ret.v1cs = v1o; + ret.v2cs = v2o; + ret.v1cd = v1o; + ret.v2cd = v2o; + ret.v1m = const_cast &&>(v1o); + ret.v2m = const_cast &&>(v2o); + ret.v1a = arr1; + ret.v2a = arr2; + ret.v1i = VO_TEST_ARR1; + ret.v2i = VO_TEST_ARR2; + return ret; + }; constexpr auto int_res = int_applicator(); constexpr auto char_res = char_applicator(); @@ -833,6 +893,12 @@ class test_const_vector : public test_defs { ASSERT(int_res.v2a._size == VI_TEST_ARR2_LEN) ASSERT_VEC_ARR_EQ(int_res.v1a, C_VI_TEST_ARR1) ASSERT_VEC_ARR_EQ(int_res.v2a, C_VI_TEST_ARR2) + ASSERT(int_res.v1i._len == TEST_VEC1_CAPACITY) + ASSERT(int_res.v2i._len == TEST_VEC2_CAPACITY) + ASSERT(int_res.v1i._size == VI_TEST_ARR1_LEN) + ASSERT(int_res.v2i._size == VI_TEST_ARR2_LEN) + ASSERT_VEC_ARR_EQ(int_res.v1i, C_VI_TEST_ARR1) + ASSERT_VEC_ARR_EQ(int_res.v2i, C_VI_TEST_ARR2) ASSERT(char_res.v1cs._len == VC_TEST_ARR1_LEN) ASSERT(char_res.v2cs._len == VC_TEST_ARR2_LEN) @@ -858,6 +924,12 @@ class test_const_vector : public test_defs { ASSERT(char_res.v2a._size == VC_TEST_ARR2_LEN) ASSERT_VEC_ARR_EQ(char_res.v1a, C_VC_TEST_ARR1) ASSERT_VEC_ARR_EQ(char_res.v2a, C_VC_TEST_ARR2) + ASSERT(char_res.v1i._len == TEST_VEC1_CAPACITY) + ASSERT(char_res.v2i._len == TEST_VEC2_CAPACITY) + ASSERT(char_res.v1i._size == VC_TEST_ARR1_LEN) + ASSERT(char_res.v2i._size == VC_TEST_ARR2_LEN) + ASSERT_VEC_ARR_EQ(char_res.v1i, C_VC_TEST_ARR1) + ASSERT_VEC_ARR_EQ(char_res.v2i, C_VC_TEST_ARR2) ASSERT(string_res.v1cs._len == VS_TEST_ARR1_LEN) ASSERT(string_res.v2cs._len == VS_TEST_ARR2_LEN) @@ -883,6 +955,12 @@ class test_const_vector : public test_defs { ASSERT(string_res.v2a._size == VS_TEST_ARR2_LEN) ASSERT_VEC_ARR_EQ(string_res.v1a, C_VS_TEST_ARR1) ASSERT_VEC_ARR_EQ(string_res.v2a, C_VS_TEST_ARR2) + ASSERT(string_res.v1i._len == TEST_VEC1_CAPACITY) + ASSERT(string_res.v2i._len == TEST_VEC2_CAPACITY) + ASSERT(string_res.v1i._size == VS_TEST_ARR1_LEN) + ASSERT(string_res.v2i._size == VS_TEST_ARR2_LEN) + ASSERT_VEC_ARR_EQ(string_res.v1i, C_VS_TEST_ARR1) + ASSERT_VEC_ARR_EQ(string_res.v2i, C_VS_TEST_ARR2) ASSERT(obj_res.v1cs._len == VO_TEST_ARR1_LEN) ASSERT(obj_res.v2cs._len == VO_TEST_ARR2_LEN) @@ -908,13 +986,17 @@ class test_const_vector : public test_defs { ASSERT(obj_res.v2a._size == VO_TEST_ARR2_LEN) ASSERT_VEC_ARR_EQ(obj_res.v1a, C_VO_TEST_ARR1) ASSERT_VEC_ARR_EQ(obj_res.v2a, C_VO_TEST_ARR2) + ASSERT(obj_res.v1i._len == TEST_VEC1_CAPACITY) + ASSERT(obj_res.v2i._len == TEST_VEC2_CAPACITY) + ASSERT(obj_res.v1i._size == VO_TEST_ARR1_LEN) + ASSERT(obj_res.v2i._size == VO_TEST_ARR2_LEN) + ASSERT_VEC_ARR_EQ(obj_res.v1i, C_VO_TEST_ARR1) + ASSERT_VEC_ARR_EQ(obj_res.v2i, C_VO_TEST_ARR2) return true; } - - }; int main(int, char *[])