1// Copyright 2021, 2024 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/core/detail/string_view.hpp>
6#include <boost/config.hpp>
7#include <boost/config/pragma_message.hpp>
8
9#if defined(BOOST_NO_CXX14_CONSTEXPR)
10
11BOOST_PRAGMA_MESSAGE( "Test skipped because BOOST_NO_CXX14_CONSTEXPR is defined" )
12int main() {}
13
14#else
15
16#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW)
17# include <string_view>
18#endif
19
20#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
21
22int main()
23{
24 {
25 constexpr boost::core::string_view sv;
26
27 STATIC_ASSERT( sv.data() == nullptr );
28 STATIC_ASSERT( sv.size() == 0 );
29
30 STATIC_ASSERT( sv.begin() == sv.data() );
31 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
32
33 STATIC_ASSERT( sv.cbegin() == sv.data() );
34 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
35
36 STATIC_ASSERT( sv.length() == sv.size() );
37 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
38
39 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
40 }
41
42 {
43 constexpr char const* s = "123";
44
45 constexpr boost::core::string_view sv( s, 0 );
46
47 STATIC_ASSERT( sv.data() == s );
48 STATIC_ASSERT( sv.size() == 0 );
49
50 STATIC_ASSERT( sv.begin() == sv.data() );
51 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
52
53 STATIC_ASSERT( sv.cbegin() == sv.data() );
54 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
55
56 STATIC_ASSERT( sv.length() == sv.size() );
57 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
58
59 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
60 }
61
62 {
63 constexpr char const* s = "123";
64
65 constexpr boost::core::string_view sv( s, 2 );
66
67 STATIC_ASSERT( sv.data() == s );
68 STATIC_ASSERT( sv.size() == 2 );
69
70 STATIC_ASSERT( sv.begin() == sv.data() );
71 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
72
73 STATIC_ASSERT( sv.cbegin() == sv.data() );
74 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
75
76 STATIC_ASSERT( sv.length() == sv.size() );
77 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
78
79 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
80 }
81
82 {
83 constexpr char const* s = "123";
84
85 constexpr boost::core::string_view sv( s, s );
86
87 STATIC_ASSERT( sv.data() == s );
88 STATIC_ASSERT( sv.size() == 0 );
89
90 STATIC_ASSERT( sv.begin() == sv.data() );
91 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
92
93 STATIC_ASSERT( sv.cbegin() == sv.data() );
94 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
95
96 STATIC_ASSERT( sv.length() == sv.size() );
97 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
98
99 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
100 }
101
102 {
103 constexpr char const* s = "123";
104
105 constexpr boost::core::string_view sv( s, s + 2 );
106
107 STATIC_ASSERT( sv.data() == s );
108 STATIC_ASSERT( sv.size() == 2 );
109
110 STATIC_ASSERT( sv.begin() == sv.data() );
111 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
112
113 STATIC_ASSERT( sv.cbegin() == sv.data() );
114 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
115
116 STATIC_ASSERT( sv.length() == sv.size() );
117 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
118
119 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
120 }
121
122#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW)
123
124 {
125 constexpr std::string_view str( "123", 3 );
126
127 constexpr boost::core::string_view sv( str );
128
129 STATIC_ASSERT( sv.data() == str.data() );
130 STATIC_ASSERT( sv.size() == str.size() );
131
132 STATIC_ASSERT( sv.begin() == sv.data() );
133 STATIC_ASSERT( sv.end() == sv.data() + sv.size() );
134
135 STATIC_ASSERT( sv.cbegin() == sv.data() );
136 STATIC_ASSERT( sv.cend() == sv.data() + sv.size() );
137
138 STATIC_ASSERT( sv.length() == sv.size() );
139 STATIC_ASSERT( sv.empty() == ( sv.size() == 0 ) );
140
141 STATIC_ASSERT( sv.max_size() == boost::core::string_view::npos );
142 }
143
144#endif
145}
146
147#endif
148

source code of boost/libs/core/test/sv_construct_test_cx.cpp