brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 8c53484 Raw
81 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// <locale>10 11// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -D_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT -D_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT12 13// wstring_convert<Codecvt, Elem, Wide_alloc, Byte_alloc>14 15// byte_string to_bytes(Elem wchar);16// byte_string to_bytes(const Elem* wptr);17// byte_string to_bytes(const wide_string& wstr);18// byte_string to_bytes(const Elem* first, const Elem* last);19 20// XFAIL: no-wide-characters21 22#include <locale>23#include <codecvt>24#include <cassert>25 26#include "test_macros.h"27 28template <class CharT, std::size_t = sizeof(CharT)>29struct TestHelper;30template <class CharT>31struct TestHelper<CharT, 2> {32  static void test();33};34template <class CharT>35struct TestHelper<CharT, 4> {36  static void test();37};38 39template <class CharT>40void TestHelper<CharT, 2>::test() {41  static_assert((std::is_same<CharT, wchar_t>::value), "");42  {43    std::wstring_convert<std::codecvt_utf8<CharT> > myconv;44    std::wstring ws(1, L'\u1005');45    std::string bs = myconv.to_bytes(ws[0]);46    assert(bs == "\xE1\x80\x85");47    bs = myconv.to_bytes(ws.c_str());48    assert(bs == "\xE1\x80\x85");49    bs = myconv.to_bytes(ws);50    assert(bs == "\xE1\x80\x85");51    bs = myconv.to_bytes(ws.data(), ws.data() + ws.size());52    assert(bs == "\xE1\x80\x85");53    bs = myconv.to_bytes(L"");54    assert(bs.size() == 0);55  }56}57 58template <class CharT>59void TestHelper<CharT, 4>::test() {60  static_assert((std::is_same<CharT, wchar_t>::value), "");61  {62    std::wstring_convert<std::codecvt_utf8<CharT> > myconv;63    std::wstring ws(1, *L"\U00040003");64    std::string bs = myconv.to_bytes(ws[0]);65    assert(bs == "\xF1\x80\x80\x83");66    bs = myconv.to_bytes(ws.c_str());67    assert(bs == "\xF1\x80\x80\x83");68    bs = myconv.to_bytes(ws);69    assert(bs == "\xF1\x80\x80\x83");70    bs = myconv.to_bytes(ws.data(), ws.data() + ws.size());71    assert(bs == "\xF1\x80\x80\x83");72    bs = myconv.to_bytes(L"");73    assert(bs.size() == 0);74  }75}76 77int main(int, char**) {78  TestHelper<wchar_t>::test();79  return 0;80}81