xref: /llvm-project/libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp (revision a40bada91aeda276a772acfbcae6e8de26755a11)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)
10 
11 // <string_view>
12 
13 // template<class Allocator>
14 // basic_string_view(const basic_string<_CharT, _Traits, Allocator>& _str) noexcept
15 
16 #include <string_view>
17 #include <string>
18 #include <cassert>
19 
20 #include "test_macros.h"
21 
22 struct dummy_char_traits : public std::char_traits<char> {};
23 
24 template <typename CharT, typename Traits>
test(const std::basic_string<CharT,Traits> & str)25 void test(const std::basic_string<CharT, Traits>& str) {
26   typedef std::basic_string_view<CharT, Traits> SV;
27   ASSERT_NOEXCEPT(SV(str));
28 
29   SV sv1(str);
30   assert(sv1.size() == str.size());
31   assert(sv1.data() == str.data());
32 }
33 
main(int,char **)34 int main(int, char**) {
35   test(std::string("QBCDE"));
36   test(std::string(""));
37   test(std::string());
38 
39 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
40   test(std::wstring(L"QBCDE"));
41   test(std::wstring(L""));
42   test(std::wstring());
43 #endif
44 
45 #ifndef TEST_HAS_NO_CHAR8_T
46   test(std::u8string{u8"QBCDE"});
47   test(std::u8string{u8""});
48   test(std::u8string{});
49 #endif
50 
51 #if TEST_STD_VER >= 11
52   test(std::u16string{u"QBCDE"});
53   test(std::u16string{u""});
54   test(std::u16string{});
55 
56   test(std::u32string{U"QBCDE"});
57   test(std::u32string{U""});
58   test(std::u32string{});
59 #endif
60 
61   test(std::basic_string<char, dummy_char_traits>("QBCDE"));
62   test(std::basic_string<char, dummy_char_traits>(""));
63   test(std::basic_string<char, dummy_char_traits>());
64 
65   return 0;
66 }
67