11e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//===----------------------------------------------------------------------===// 21e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// 31e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// The LLVM Compiler Infrastructure 41e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// 51e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open 61e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// Source Licenses. See LICENSE.TXT for details. 71e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// 81e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//===----------------------------------------------------------------------===// 91e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 101e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// <string_view> 111e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 121e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// constexpr const_iterator rend() const; 131e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 141e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include <string_view> 151e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include <cassert> 1621208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej#include <cstddef> 171e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 181e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include "test_macros.h" 191e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 201e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowtemplate <class S> 211e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowvoid 221e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowtest(S s) 231e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow{ 241e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow const S& cs = s; 251e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typename S::reverse_iterator e = s.rend(); 261e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typename S::const_reverse_iterator ce1 = cs.rend(); 271e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typename S::const_reverse_iterator ce2 = s.crend(); 281e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 291e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow if (s.empty()) 301e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow { 311e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert( e == s.rbegin()); 321e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert(ce1 == cs.rbegin()); 331e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert(ce2 == s.rbegin()); 341e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow } 351e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow else 361e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow { 371e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert( e != s.rbegin()); 381e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert(ce1 != cs.rbegin()); 391e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert(ce2 != s.rbegin()); 401e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow } 411e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 4221208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej assert(static_cast<std::size_t>( e - s.rbegin()) == s.size()); 4321208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej assert(static_cast<std::size_t>(ce1 - cs.rbegin()) == cs.size()); 4421208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej assert(static_cast<std::size_t>(ce2 - s.crbegin()) == s.size()); 451e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 461e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert( e == ce1); 471e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert( e == ce2); 481e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow assert(ce1 == ce2); 491e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow} 501e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 511e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 521e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowint main() 531e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow{ 541e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typedef std::string_view string_view; 551e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typedef std::u16string_view u16string_view; 561e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typedef std::u32string_view u32string_view; 571e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow typedef std::wstring_view wstring_view; 581e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow 591e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(string_view ()); 601e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(u16string_view()); 611e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(u32string_view()); 621e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(wstring_view ()); 631e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(string_view ( "123")); 641e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(wstring_view (L"123")); 651e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#if TEST_STD_VER >= 11 661e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(u16string_view{u"123"}); 671e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow test(u32string_view{U"123"}); 681e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#endif 69b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow 70b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow#if TEST_STD_VER > 14 71b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow { 72b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow constexpr string_view sv { "123", 3 }; 73b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow constexpr u16string_view u16sv {u"123", 3 }; 74b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow constexpr u32string_view u32sv {U"123", 3 }; 75b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow constexpr wstring_view wsv {L"123", 3 }; 76b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow 77b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--sv.rend() == sv[0], "" ); 78b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--u16sv.rend() == u16sv[0], "" ); 79b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--u32sv.rend() == u32sv[0], "" ); 80b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--wsv.rend() == wsv[0], "" ); 81b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow 82b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--sv.crend() == sv[0], "" ); 83b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--u16sv.crend() == u16sv[0], "" ); 84b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--u32sv.crend() == u32sv[0], "" ); 85b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow static_assert ( *--wsv.crend() == wsv[0], "" ); 86b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow } 87b08183bc1f0f76a1c436a30498dfbdbc7c2d1dbfMarshall Clow#endif 881e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow} 89