diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:03:23 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:03:23 +0000 |
commit | 0dc0969cd0a732760f0aa79942a04e0eaef297c4 (patch) | |
tree | 051bdb57b1ac6ee143f61ddbb47bd0da619f6f0c /test/std/strings/string.view | |
parent | 868847c6900e575417c03bced6e562b3af891318 (diff) |
Notes
Diffstat (limited to 'test/std/strings/string.view')
-rw-r--r-- | test/std/strings/string.view/string.view.access/at.pass.cpp | 2 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.cons/assign.pass.cpp | 50 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp | 65 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp | 31 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.hash/string_view.pass.cpp | 30 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp | 19 | ||||
-rw-r--r-- | test/std/strings/string.view/string.view.iterators/rend.pass.cpp | 19 | ||||
-rw-r--r-- | test/std/strings/string.view/string_view.literals/literal.pass.cpp | 2 | ||||
-rw-r--r-- | test/std/strings/string.view/traits_mismatch.fail.cpp (renamed from test/std/strings/string.view/nothing_to_do.pass.cpp) | 8 |
9 files changed, 214 insertions, 12 deletions
diff --git a/test/std/strings/string.view/string.view.access/at.pass.cpp b/test/std/strings/string.view/string.view.access/at.pass.cpp index 0f1636d3f94f1..6df879898f44b 100644 --- a/test/std/strings/string.view/string.view.access/at.pass.cpp +++ b/test/std/strings/string.view/string.view.access/at.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -// NOTE: Older versions of clang have a bug where they fail to evalute +// NOTE: Older versions of clang have a bug where they fail to evaluate // string_view::at as a constant expression. // XFAIL: clang-3.4, clang-3.3 diff --git a/test/std/strings/string.view/string.view.cons/assign.pass.cpp b/test/std/strings/string.view/string.view.cons/assign.pass.cpp new file mode 100644 index 0000000000000..b7348ea226cfa --- /dev/null +++ b/test/std/strings/string.view/string.view.cons/assign.pass.cpp @@ -0,0 +1,50 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +// <string_view> + +// constexpr basic_string_view& operator=(const basic_string_view &) noexcept = default; + +#include <string_view> +#include <cassert> + +#include "test_macros.h" + +template<typename T> +#if TEST_STD_VER > 11 +constexpr +#endif +bool test (T sv0) + { + T sv1; + sv1 = sv0; +// We can't just say "sv0 == sv1" here because string_view::compare +// isn't constexpr until C++17, and we want to support back to C++14 + return sv0.size() == sv1.size() && sv0.data() == sv1.data(); + } + +int main () { + + assert( test<std::string_view> ( "1234")); +#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS + assert( test<std::u16string_view> (u"1234")); + assert( test<std::u32string_view> (U"1234")); +#endif + assert( test<std::wstring_view> (L"1234")); + +#if TEST_STD_VER > 11 + static_assert( test<std::string_view> ({ "abc", 3}), ""); +#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS + static_assert( test<std::u16string_view> ({u"abc", 3}), ""); + static_assert( test<std::u32string_view> ({U"abc", 3}), ""); +#endif + static_assert( test<std::wstring_view> ({L"abc", 3}), ""); +#endif +} diff --git a/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp b/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp new file mode 100644 index 0000000000000..7dd99d9c44057 --- /dev/null +++ b/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp @@ -0,0 +1,65 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-deduction-guides + +// <string_view> + +// Test that the constructors offered by std::basic_string_view are formulated +// so they're compatible with implicit deduction guides. + +#include <string_view> +#include <cassert> + +#include "test_macros.h" +#include "constexpr_char_traits.hpp" + +// Overloads +// --------------- +// (1) basic_string_view() - NOT TESTED +// (2) basic_string_view(const basic_string_view&) +// (3) basic_string_view(const CharT*, size_type) +// (4) basic_string_view(const CharT*) +int main() +{ + { // Testing (1) + // Nothing TODO. Cannot deduce without any arguments. + } + { // Testing (2) + const std::string_view sin("abc"); + std::basic_string_view s(sin); + ASSERT_SAME_TYPE(decltype(s), std::string_view); + assert(s == "abc"); + + using WSV = std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>>; + const WSV win(L"abcdef"); + std::basic_string_view w(win); + ASSERT_SAME_TYPE(decltype(w), WSV); + assert(w == L"abcdef"); + } + { // Testing (3) + std::basic_string_view s("abc", 2); + ASSERT_SAME_TYPE(decltype(s), std::string_view); + assert(s == "ab"); + + std::basic_string_view w(L"abcdef", 4); + ASSERT_SAME_TYPE(decltype(w), std::wstring_view); + assert(w == L"abcd"); + } + { // Testing (4) + std::basic_string_view s("abc"); + ASSERT_SAME_TYPE(decltype(s), std::string_view); + assert(s == "abc"); + + std::basic_string_view w(L"abcdef"); + ASSERT_SAME_TYPE(decltype(w), std::wstring_view); + assert(w == L"abcdef"); + } +} diff --git a/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp b/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp new file mode 100644 index 0000000000000..2e9ebcb4c037a --- /dev/null +++ b/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// <string_view> + +// Test that <string_view> provides all of the arithmetic, enum, and pointer +// hash specializations. + +#include <string_view> + +#include "poisoned_hash_helper.hpp" + +int main() { + test_library_hash_specializations_available(); + { + test_hash_enabled_for_type<std::string_view>(); + test_hash_enabled_for_type<std::wstring_view>(); +#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS + test_hash_enabled_for_type<std::u16string_view>(); + test_hash_enabled_for_type<std::u32string_view>(); +#endif + } +} diff --git a/test/std/strings/string.view/string.view.hash/string_view.pass.cpp b/test/std/strings/string.view/string.view.hash/string_view.pass.cpp index 63099e2c88647..53c3d261d882b 100644 --- a/test/std/strings/string.view/string.view.hash/string_view.pass.cpp +++ b/test/std/strings/string.view/string.view.hash/string_view.pass.cpp @@ -19,29 +19,41 @@ // Not very portable #include <string_view> +#include <string> #include <cassert> #include <type_traits> +#include "test_macros.h" + using std::string_view; -template <class T> +template <class SV> void test() { - typedef std::hash<T> H; - static_assert((std::is_same<typename H::argument_type, T>::value), "" ); + typedef std::hash<SV> H; + static_assert((std::is_same<typename H::argument_type, SV>::value), "" ); static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" ); - H h; -// std::string g1 = "1234567890"; -// std::string g2 = "1234567891"; - typedef typename T::value_type char_type; + + typedef typename SV::value_type char_type; + typedef std::basic_string<char_type> String; + typedef std::hash<String> SH; + ASSERT_NOEXCEPT(H()(SV())); + char_type g1 [ 10 ]; char_type g2 [ 10 ]; for ( int i = 0; i < 10; ++i ) g1[i] = g2[9-i] = static_cast<char_type>('0' + i); - T s1(g1, 10); - T s2(g2, 10); + H h; + SH sh; + SV s1(g1, 10); + String ss1(s1); + SV s2(g2, 10); + String ss2(s2); + assert(h(s1) == h(s1)); assert(h(s1) != h(s2)); + assert(sh(ss1) == h(s1)); + assert(sh(ss2) == h(s2)); } int main() diff --git a/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp b/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp index 381f792e5ce06..16a4da8827398 100644 --- a/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp +++ b/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp @@ -58,4 +58,23 @@ int main() test(u16string_view{u"123"}); test(u32string_view{U"123"}); #endif + +#if TEST_STD_VER > 14 + { + constexpr string_view sv { "123", 3 }; + constexpr u16string_view u16sv {u"123", 3 }; + constexpr u32string_view u32sv {U"123", 3 }; + constexpr wstring_view wsv {L"123", 3 }; + + static_assert ( *sv.rbegin() == sv[2], "" ); + static_assert ( *u16sv.rbegin() == u16sv[2], "" ); + static_assert ( *u32sv.rbegin() == u32sv[2], "" ); + static_assert ( *wsv.rbegin() == wsv[2], "" ); + + static_assert ( *sv.crbegin() == sv[2], "" ); + static_assert ( *u16sv.crbegin() == u16sv[2], "" ); + static_assert ( *u32sv.crbegin() == u32sv[2], "" ); + static_assert ( *wsv.crbegin() == wsv[2], "" ); + } +#endif } diff --git a/test/std/strings/string.view/string.view.iterators/rend.pass.cpp b/test/std/strings/string.view/string.view.iterators/rend.pass.cpp index ca529fb708dc0..08f9e5a7755b2 100644 --- a/test/std/strings/string.view/string.view.iterators/rend.pass.cpp +++ b/test/std/strings/string.view/string.view.iterators/rend.pass.cpp @@ -66,4 +66,23 @@ int main() test(u16string_view{u"123"}); test(u32string_view{U"123"}); #endif + +#if TEST_STD_VER > 14 + { + constexpr string_view sv { "123", 3 }; + constexpr u16string_view u16sv {u"123", 3 }; + constexpr u32string_view u32sv {U"123", 3 }; + constexpr wstring_view wsv {L"123", 3 }; + + static_assert ( *--sv.rend() == sv[0], "" ); + static_assert ( *--u16sv.rend() == u16sv[0], "" ); + static_assert ( *--u32sv.rend() == u32sv[0], "" ); + static_assert ( *--wsv.rend() == wsv[0], "" ); + + static_assert ( *--sv.crend() == sv[0], "" ); + static_assert ( *--u16sv.crend() == u16sv[0], "" ); + static_assert ( *--u32sv.crend() == u32sv[0], "" ); + static_assert ( *--wsv.crend() == wsv[0], "" ); + } +#endif } diff --git a/test/std/strings/string.view/string_view.literals/literal.pass.cpp b/test/std/strings/string.view/string_view.literals/literal.pass.cpp index 9fb128ab0f554..710009cc51ee9 100644 --- a/test/std/strings/string.view/string_view.literals/literal.pass.cpp +++ b/test/std/strings/string.view/string_view.literals/literal.pass.cpp @@ -48,7 +48,7 @@ int main() Lfoo = L"ABC"sv; assert(Lfoo == L"ABC"); assert(Lfoo == std::wstring_view ( L"ABC")); ufoo = u"ABC"sv; assert(ufoo == u"ABC"); assert(ufoo == std::u16string_view( u"ABC")); Ufoo = U"ABC"sv; assert(Ufoo == U"ABC"); assert(Ufoo == std::u32string_view( U"ABC")); - + static_assert( "ABC"sv.size() == 3, ""); static_assert(u8"ABC"sv.size() == 3, ""); static_assert( L"ABC"sv.size() == 3, ""); diff --git a/test/std/strings/string.view/nothing_to_do.pass.cpp b/test/std/strings/string.view/traits_mismatch.fail.cpp index 353dd98f415e5..6cd15e6a67ba3 100644 --- a/test/std/strings/string.view/nothing_to_do.pass.cpp +++ b/test/std/strings/string.view/traits_mismatch.fail.cpp @@ -7,6 +7,12 @@ // //===----------------------------------------------------------------------===// +// <string_view> +// The string_views's value type must be the same as the traits's char_type + #include <string_view> -int main () {} +int main() +{ + std::basic_string_view<char, std::char_traits<wchar_t>> s; +} |