| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| | |
| |
|
| | #include <span> |
| | #include <cassert> |
| | #include <string> |
| | #include <utility> |
| |
|
| | #include "test_macros.h" |
| |
|
| | template <typename T> |
| | constexpr bool doAssign(T lhs, T rhs) |
| | { |
| | ASSERT_NOEXCEPT(std::declval<T&>() = rhs); |
| | lhs = rhs; |
| | return lhs.data() == rhs.data() |
| | && lhs.size() == rhs.size(); |
| | } |
| |
|
| | struct A{}; |
| |
|
| | constexpr int carr1[] = {1,2,3,4}; |
| | constexpr int carr2[] = {3,4,5}; |
| | constexpr int carr3[] = {7,8}; |
| | int arr[] = {5,6,7,9}; |
| | std::string strs[] = {"ABC", "DEF", "GHI"}; |
| |
|
| |
|
| | int main(int, char**) |
| | { |
| |
|
| | |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | constexpr std::span<const int> spans[] = { |
| | {}, |
| | {carr1, static_cast<std::size_t>(0)}, |
| | {carr1, 1U}, |
| | {carr1, 2U}, |
| | {carr1, 3U}, |
| | {carr1, 4U}, |
| | {carr2, static_cast<std::size_t>(0)}, |
| | {carr2, 1U}, |
| | {carr2, 2U}, |
| | {carr2, 3U}, |
| | {carr3, static_cast<std::size_t>(0)}, |
| | {carr3, 1U}, |
| | {carr3, 2U} |
| | }; |
| |
|
| | static_assert(std::size(spans) == 13, "" ); |
| |
|
| | |
| | static_assert(doAssign(spans[0], spans[0]), ""); |
| | static_assert(doAssign(spans[0], spans[1]), ""); |
| | static_assert(doAssign(spans[0], spans[2]), ""); |
| | static_assert(doAssign(spans[0], spans[3]), ""); |
| | static_assert(doAssign(spans[0], spans[4]), ""); |
| | static_assert(doAssign(spans[0], spans[5]), ""); |
| | static_assert(doAssign(spans[0], spans[6]), ""); |
| | static_assert(doAssign(spans[0], spans[7]), ""); |
| | static_assert(doAssign(spans[0], spans[8]), ""); |
| | static_assert(doAssign(spans[0], spans[9]), ""); |
| | static_assert(doAssign(spans[0], spans[10]), ""); |
| | static_assert(doAssign(spans[0], spans[11]), ""); |
| | static_assert(doAssign(spans[0], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[1], spans[1]), ""); |
| | static_assert(doAssign(spans[1], spans[2]), ""); |
| | static_assert(doAssign(spans[1], spans[3]), ""); |
| | static_assert(doAssign(spans[1], spans[4]), ""); |
| | static_assert(doAssign(spans[1], spans[5]), ""); |
| | static_assert(doAssign(spans[1], spans[6]), ""); |
| | static_assert(doAssign(spans[1], spans[7]), ""); |
| | static_assert(doAssign(spans[1], spans[8]), ""); |
| | static_assert(doAssign(spans[1], spans[9]), ""); |
| | static_assert(doAssign(spans[1], spans[10]), ""); |
| | static_assert(doAssign(spans[1], spans[11]), ""); |
| | static_assert(doAssign(spans[1], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[2], spans[2]), ""); |
| | static_assert(doAssign(spans[2], spans[3]), ""); |
| | static_assert(doAssign(spans[2], spans[4]), ""); |
| | static_assert(doAssign(spans[2], spans[5]), ""); |
| | static_assert(doAssign(spans[2], spans[6]), ""); |
| | static_assert(doAssign(spans[2], spans[7]), ""); |
| | static_assert(doAssign(spans[2], spans[8]), ""); |
| | static_assert(doAssign(spans[2], spans[9]), ""); |
| | static_assert(doAssign(spans[2], spans[10]), ""); |
| | static_assert(doAssign(spans[2], spans[11]), ""); |
| | static_assert(doAssign(spans[2], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[3], spans[3]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[10]), ""); |
| | static_assert(doAssign(spans[3], spans[11]), ""); |
| | static_assert(doAssign(spans[3], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[4], spans[4]), ""); |
| | static_assert(doAssign(spans[4], spans[5]), ""); |
| | static_assert(doAssign(spans[4], spans[6]), ""); |
| | static_assert(doAssign(spans[4], spans[7]), ""); |
| | static_assert(doAssign(spans[4], spans[8]), ""); |
| | static_assert(doAssign(spans[4], spans[9]), ""); |
| | static_assert(doAssign(spans[4], spans[10]), ""); |
| | static_assert(doAssign(spans[4], spans[11]), ""); |
| | static_assert(doAssign(spans[4], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[5], spans[5]), ""); |
| | static_assert(doAssign(spans[5], spans[6]), ""); |
| | static_assert(doAssign(spans[5], spans[7]), ""); |
| | static_assert(doAssign(spans[5], spans[8]), ""); |
| | static_assert(doAssign(spans[5], spans[9]), ""); |
| | static_assert(doAssign(spans[5], spans[10]), ""); |
| | static_assert(doAssign(spans[5], spans[11]), ""); |
| | static_assert(doAssign(spans[5], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[6], spans[6]), ""); |
| | static_assert(doAssign(spans[6], spans[7]), ""); |
| | static_assert(doAssign(spans[6], spans[8]), ""); |
| | static_assert(doAssign(spans[6], spans[9]), ""); |
| | static_assert(doAssign(spans[6], spans[10]), ""); |
| | static_assert(doAssign(spans[6], spans[11]), ""); |
| | static_assert(doAssign(spans[6], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[7], spans[7]), ""); |
| | static_assert(doAssign(spans[7], spans[8]), ""); |
| | static_assert(doAssign(spans[7], spans[9]), ""); |
| | static_assert(doAssign(spans[7], spans[10]), ""); |
| | static_assert(doAssign(spans[7], spans[11]), ""); |
| | static_assert(doAssign(spans[7], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[8], spans[8]), ""); |
| | static_assert(doAssign(spans[8], spans[9]), ""); |
| | static_assert(doAssign(spans[8], spans[10]), ""); |
| | static_assert(doAssign(spans[8], spans[11]), ""); |
| | static_assert(doAssign(spans[8], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[9], spans[9]), ""); |
| | static_assert(doAssign(spans[9], spans[10]), ""); |
| | static_assert(doAssign(spans[9], spans[11]), ""); |
| | static_assert(doAssign(spans[9], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[10], spans[10]), ""); |
| | static_assert(doAssign(spans[10], spans[11]), ""); |
| | static_assert(doAssign(spans[10], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[11], spans[11]), ""); |
| | static_assert(doAssign(spans[11], spans[12]), ""); |
| |
|
| | static_assert(doAssign(spans[12], spans[12]), ""); |
| |
|
| | |
| | |
| | |
| | } |
| |
|
| | |
| | { |
| | constexpr std::span<const int,2> spans[] = { |
| | {carr1, 2}, |
| | {carr1 + 1, 2}, |
| | {carr1 + 2, 2}, |
| | {carr2, 2}, |
| | {carr2 + 1, 2}, |
| | {carr3, 2} |
| | }; |
| |
|
| | static_assert(std::size(spans) == 6, "" ); |
| |
|
| | |
| | static_assert(doAssign(spans[0], spans[0]), ""); |
| | static_assert(doAssign(spans[0], spans[1]), ""); |
| | static_assert(doAssign(spans[0], spans[2]), ""); |
| | static_assert(doAssign(spans[0], spans[3]), ""); |
| | static_assert(doAssign(spans[0], spans[4]), ""); |
| | static_assert(doAssign(spans[0], spans[5]), ""); |
| |
|
| | static_assert(doAssign(spans[1], spans[1]), ""); |
| | static_assert(doAssign(spans[1], spans[2]), ""); |
| | static_assert(doAssign(spans[1], spans[3]), ""); |
| | static_assert(doAssign(spans[1], spans[4]), ""); |
| | static_assert(doAssign(spans[1], spans[5]), ""); |
| |
|
| | static_assert(doAssign(spans[2], spans[2]), ""); |
| | static_assert(doAssign(spans[2], spans[3]), ""); |
| | static_assert(doAssign(spans[2], spans[4]), ""); |
| | static_assert(doAssign(spans[2], spans[5]), ""); |
| |
|
| | static_assert(doAssign(spans[3], spans[3]), ""); |
| | static_assert(doAssign(spans[3], spans[4]), ""); |
| | static_assert(doAssign(spans[3], spans[5]), ""); |
| |
|
| | static_assert(doAssign(spans[4], spans[4]), ""); |
| | static_assert(doAssign(spans[4], spans[5]), ""); |
| |
|
| | static_assert(doAssign(spans[5], spans[5]), ""); |
| |
|
| | |
| | |
| | |
| | } |
| |
|
| |
|
| | |
| | { |
| | std::span<int> spans[] = { |
| | {}, |
| | {arr, arr + 1}, |
| | {arr, arr + 2}, |
| | {arr, arr + 3}, |
| | {arr + 1, arr + 3} |
| | }; |
| |
|
| | for (size_t i = 0; i < std::size(spans); ++i) |
| | for (size_t j = i; j < std::size(spans); ++j) |
| | assert((doAssign(spans[i], spans[j]))); |
| | } |
| |
|
| | |
| | { |
| | std::span<int,2> spans[] = { |
| | {arr, arr + 2}, |
| | {arr + 1, arr + 3}, |
| | {arr + 2, arr + 4} |
| | }; |
| |
|
| | for (size_t i = 0; i < std::size(spans); ++i) |
| | for (size_t j = i; j < std::size(spans); ++j) |
| | assert((doAssign(spans[i], spans[j]))); |
| | } |
| |
|
| | |
| | { |
| | std::span<std::string> spans[] = { |
| | {strs, strs}, |
| | {strs, strs + 1}, |
| | {strs, strs + 2}, |
| | {strs, strs + 3}, |
| | {strs + 1, strs + 1}, |
| | {strs + 1, strs + 2}, |
| | {strs + 1, strs + 3}, |
| | {strs + 2, strs + 2}, |
| | {strs + 2, strs + 3}, |
| | {strs + 3, strs + 3} |
| | }; |
| |
|
| | for (size_t i = 0; i < std::size(spans); ++i) |
| | for (size_t j = i; j < std::size(spans); ++j) |
| | assert((doAssign(spans[i], spans[j]))); |
| | } |
| |
|
| | { |
| | std::span<std::string, 1> spans[] = { |
| | {strs, strs + 1}, |
| | {strs + 1, strs + 2}, |
| | {strs + 2, strs + 3} |
| | }; |
| |
|
| | for (size_t i = 0; i < std::size(spans); ++i) |
| | for (size_t j = i; j < std::size(spans); ++j) |
| | assert((doAssign(spans[i], spans[j]))); |
| | } |
| |
|
| | return 0; |
| | } |
| |
|