brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 05dad28 Raw
127 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)10 11// <string_view>12 13// [string.view.capacity], capacity14// constexpr size_type size()     const noexcept;15// constexpr size_type length()   const noexcept;16// constexpr size_type max_size() const noexcept;17// constexpr bool empty()         const noexcept;18 19#include <string_view>20#include <cassert>21#include <iterator>22#include <limits>23 24#include "test_macros.h"25 26template <typename SV>27void test1() {28#if TEST_STD_VER > 1129  {30    constexpr SV sv1;31    static_assert(sv1.size() == 0, "");32    static_assert(sv1.empty(), "");33    static_assert(sv1.size() == sv1.length(), "");34    static_assert(sv1.max_size() > sv1.size(), "");35  }36#endif37 38  {39    SV sv1;40    ASSERT_NOEXCEPT(sv1.size());41    ASSERT_NOEXCEPT(sv1.empty());42    ASSERT_NOEXCEPT(sv1.max_size());43    ASSERT_NOEXCEPT(sv1.length());44    assert(sv1.size() == 0);45    assert(sv1.empty());46    assert(sv1.size() == sv1.length());47    assert(sv1.max_size() > sv1.size());48  }49 50  // Sanity check max_size() -- a string_view can't store more bytes than a single object51  // can contain. Any implementation that fails this check is certainly lying.52  {53    typedef typename SV::value_type CharT;54    typedef typename SV::size_type Size;55    SV sv;56    assert(sv.max_size() <= std::numeric_limits<Size>::max() / sizeof(CharT));57    LIBCPP_ASSERT(sv.max_size() == std::numeric_limits<Size>::max() / sizeof(CharT));58  }59}60 61template <typename CharT>62void test2(const CharT* s, std::size_t len) {63  {64    std::basic_string_view<CharT> sv1(s);65    assert(sv1.size() == len);66    assert(sv1.data() == s);67    assert(sv1.empty() == (len == 0));68    assert(sv1.size() == sv1.length());69    assert(sv1.max_size() > sv1.size());70#if TEST_STD_VER > 1471    //  make sure we pick up std::size, too!72    assert(sv1.size() == std::size(sv1));73    assert(sv1.empty() == std::empty(sv1));74#endif75  }76}77 78int main(int, char**) {79  test1<std::string_view>();80#ifndef TEST_HAS_NO_CHAR8_T81  test1<std::u8string_view>();82#endif83  test1<std::u16string_view>();84  test1<std::u32string_view>();85#ifndef TEST_HAS_NO_WIDE_CHARACTERS86  test1<std::wstring_view>();87#endif88 89  test2("ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",90        105);91  test2("ABCDE", 5);92  test2("a", 1);93  test2("", 0);94 95#ifndef TEST_HAS_NO_WIDE_CHARACTERS96  test2(L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",97        105);98  test2(L"ABCDE", 5);99  test2(L"a", 1);100  test2(L"", 0);101#endif102 103#ifndef TEST_HAS_NO_CHAR8_T104  test2(u8"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",105        105);106  test2(u8"ABCDE", 5);107  test2(u8"a", 1);108  test2(u8"", 0);109#endif110 111#if TEST_STD_VER >= 11112  test2(u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",113        105);114  test2(u"ABCDE", 5);115  test2(u"a", 1);116  test2(u"", 0);117 118  test2(U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",119        105);120  test2(U"ABCDE", 5);121  test2(U"a", 1);122  test2(U"", 0);123#endif124 125  return 0;126}127