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