Add sv_construct_test_cx, _cx2

This commit is contained in:
Peter Dimov 2024-02-07 03:28:41 +02:00
parent 4a0df827c1
commit 2d7e036416
3 changed files with 218 additions and 0 deletions

View File

@ -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 ;

View File

@ -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 <boost/core/detail/string_view.hpp>
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#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 <string_view>
#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

View File

@ -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 <boost/core/detail/string_view.hpp>
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#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