brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 59939e1 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// wide_string from_bytes(char byte);16// wide_string from_bytes(const char* ptr);17// wide_string from_bytes(const byte_string& str);18// wide_string from_bytes(const char* first, const char* 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::string bs("\xE1\x80\x85");45    std::wstring ws = myconv.from_bytes('a');46    assert(ws == L"a");47    ws = myconv.from_bytes(bs.c_str());48    assert(ws == L"\u1005");49    ws = myconv.from_bytes(bs);50    assert(ws == L"\u1005");51    ws = myconv.from_bytes(bs.data(), bs.data() + bs.size());52    assert(ws == L"\u1005");53    ws = myconv.from_bytes("");54    assert(ws.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::string bs("\xF1\x80\x80\x83");64    std::wstring ws = myconv.from_bytes('a');65    assert(ws == L"a");66    ws = myconv.from_bytes(bs.c_str());67    assert(ws == L"\U00040003");68    ws = myconv.from_bytes(bs);69    assert(ws == L"\U00040003");70    ws = myconv.from_bytes(bs.data(), bs.data() + bs.size());71    assert(ws == L"\U00040003");72    ws = myconv.from_bytes("");73    assert(ws.size() == 0);74  }75}76 77int main(int, char**) {78  TestHelper<wchar_t>::test();79  return 0;80}81