From 2d7e036416db324b136e76d87ce4c5ea870a4abc Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 7 Feb 2024 03:28:41 +0200 Subject: [PATCH] Add sv_construct_test_cx, _cx2 --- test/Jamfile.v2 | 3 + test/sv_construct_test_cx.cpp | 147 +++++++++++++++++++++++++++++++++ test/sv_construct_test_cx2.cpp | 68 +++++++++++++++ 3 files changed, 218 insertions(+) create mode 100644 test/sv_construct_test_cx.cpp create mode 100644 test/sv_construct_test_cx2.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index d69d3ee..31d740d 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -361,6 +361,9 @@ compile sv_windows_h_test.cpp ; compile-fail sv_nullptr_fail.cpp : $(warnings-as-errors-off) ; +compile sv_construct_test_cx.cpp ; +compile sv_construct_test_cx2.cpp ; + run span_test.cpp ; run span_types_test.cpp ; run span_constructible_test.cpp ; diff --git a/test/sv_construct_test_cx.cpp b/test/sv_construct_test_cx.cpp new file mode 100644 index 0000000..f490d16 --- /dev/null +++ b/test/sv_construct_test_cx.cpp @@ -0,0 +1,147 @@ +// Copyright 2021, 2024 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include + +#if defined(BOOST_NO_CXX14_CONSTEXPR) + +BOOST_PRAGMA_MESSAGE( "Test skipped because BOOST_NO_CXX14_CONSTEXPR is defined" ) +int main() {} + +#else + +#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW) +# include +#endif + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +int main() +{ + { + constexpr boost::core::string_view sv; + + STATIC_ASSERT( sv.data() == nullptr ); + STATIC_ASSERT( sv.size() == 0 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + + { + constexpr char const* s = "123"; + + constexpr boost::core::string_view sv( s, 0 ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 0 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + + { + constexpr char const* s = "123"; + + constexpr boost::core::string_view sv( s, 2 ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 2 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + + { + constexpr char const* s = "123"; + + constexpr boost::core::string_view sv( s, s ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 0 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + + { + constexpr char const* s = "123"; + + constexpr boost::core::string_view sv( s, s + 2 ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 2 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + +#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW) + + { + constexpr std::string_view str( "123", 3 ); + + constexpr boost::core::string_view sv( str ); + + STATIC_ASSERT( sv.data() == str.data() ); + STATIC_ASSERT( sv.size() == str.size() ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + +#endif +} + +#endif diff --git a/test/sv_construct_test_cx2.cpp b/test/sv_construct_test_cx2.cpp new file mode 100644 index 0000000..98c82fd --- /dev/null +++ b/test/sv_construct_test_cx2.cpp @@ -0,0 +1,68 @@ +// Copyright 2021, 2024 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include + +#if defined(BOOST_NO_CXX14_CONSTEXPR) + +BOOST_PRAGMA_MESSAGE( "Test skipped because BOOST_NO_CXX14_CONSTEXPR is defined" ) +int main() {} + +#elif BOOST_CXX_VERSION < 201703L + +// std::char_traits is not constexpr in C++14 + +BOOST_PRAGMA_MESSAGE( "Test skipped because BOOST_CXX_VERSION < 201703L" ) +int main() {} + +#else + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +int main() +{ + { + constexpr char const* s = ""; + + constexpr boost::core::string_view sv( s ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 0 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } + + { + constexpr char const* s = "123"; + + constexpr boost::core::string_view sv( s ); + + STATIC_ASSERT( sv.data() == s ); + STATIC_ASSERT( sv.size() == 3 ); + + STATIC_ASSERT( sv.begin() == sv.data() ); + STATIC_ASSERT( sv.end() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.cbegin() == sv.data() ); + STATIC_ASSERT( sv.cend() == sv.data() + sv.size() ); + + STATIC_ASSERT( sv.length() == sv.size() ); + STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) ); + + STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos ); + } +} + +#endif