brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 3fcf8e5 Raw
243 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// <codecvt>10 11// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -D_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT12 13// template <class Elem, unsigned long Maxcode = 0x10ffff,14//           codecvt_mode Mode = (codecvt_mode)0>15// class codecvt_utf8_utf1616//     : public codecvt<Elem, char, mbstate_t>17// {18//     // unspecified19// };20 21// int length(stateT& state, const externT* from, const externT* from_end,22//            size_t max) const;23 24#include <codecvt>25#include <cassert>26 27#include "test_macros.h"28 29int main(int, char**)30{31#ifndef TEST_HAS_NO_WIDE_CHARACTERS32    {33        typedef std::codecvt_utf8_utf16<wchar_t> C;34        C c;35        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};36        std::mbstate_t m;37        int r = c.length(m, n, n+4, 2);38        assert(r == 4);39 40        n[0] = char(0xE1);41        n[1] = char(0x80);42        n[2] = char(0x85);43        r = c.length(m, n, n+3, 2);44        assert(r == 3);45 46        n[0] = char(0xD1);47        n[1] = char(0x93);48        r = c.length(m, n, n+2, 2);49        assert(r == 2);50 51        n[0] = char(0x56);52        r = c.length(m, n, n+1, 2);53        assert(r == 1);54    }55    {56        typedef std::codecvt_utf8_utf16<wchar_t, 0x1000> C;57        C c;58        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};59        std::mbstate_t m;60        int r = c.length(m, n, n+4, 2);61        assert(r == 0);62 63        n[0] = char(0xE1);64        n[1] = char(0x80);65        n[2] = char(0x85);66        r = c.length(m, n, n+3, 2);67        assert(r == 0);68 69        n[0] = char(0xD1);70        n[1] = char(0x93);71        r = c.length(m, n, n+2, 2);72        assert(r == 2);73 74        n[0] = char(0x56);75        r = c.length(m, n, n+1, 2);76        assert(r == 1);77    }78    {79        typedef std::codecvt_utf8_utf16<wchar_t, 0x10ffff, std::consume_header> C;80        C c;81        char n[7] = {char(0xEF), char(0xBB), char(0xBF), char(0xF1), char(0x80), char(0x80), char(0x83)};82        std::mbstate_t m;83        int r = c.length(m, n, n+7, 2);84        assert(r == 7);85 86        n[0] = char(0xE1);87        n[1] = char(0x80);88        n[2] = char(0x85);89        r = c.length(m, n, n+3, 2);90        assert(r == 3);91 92        n[0] = char(0xD1);93        n[1] = char(0x93);94        r = c.length(m, n, n+2, 2);95        assert(r == 2);96 97        n[0] = char(0x56);98        r = c.length(m, n, n+1, 2);99        assert(r == 1);100    }101#endif // TEST_HAS_NO_WIDE_CHARACTERS102    {103        typedef std::codecvt_utf8_utf16<char32_t> C;104        C c;105        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};106        std::mbstate_t m;107        int r = c.length(m, n, n+4, 2);108        assert(r == 4);109 110        n[0] = char(0xE1);111        n[1] = char(0x80);112        n[2] = char(0x85);113        r = c.length(m, n, n+3, 2);114        assert(r == 3);115 116        n[0] = char(0xD1);117        n[1] = char(0x93);118        r = c.length(m, n, n+2, 2);119        assert(r == 2);120 121        n[0] = char(0x56);122        r = c.length(m, n, n+1, 2);123        assert(r == 1);124    }125    {126        typedef std::codecvt_utf8_utf16<char32_t, 0x1000> C;127        C c;128        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};129        std::mbstate_t m;130        int r = c.length(m, n, n+4, 2);131        assert(r == 0);132 133        n[0] = char(0xE1);134        n[1] = char(0x80);135        n[2] = char(0x85);136        r = c.length(m, n, n+3, 2);137        assert(r == 0);138 139        n[0] = char(0xD1);140        n[1] = char(0x93);141        r = c.length(m, n, n+2, 2);142        assert(r == 2);143 144        n[0] = char(0x56);145        r = c.length(m, n, n+1, 2);146        assert(r == 1);147    }148    {149        typedef std::codecvt_utf8_utf16<char32_t, 0x10ffff, std::consume_header> C;150        C c;151        char n[7] = {char(0xEF), char(0xBB), char(0xBF), char(0xF1), char(0x80), char(0x80), char(0x83)};152        std::mbstate_t m;153        int r = c.length(m, n, n+7, 2);154        assert(r == 7);155 156        n[0] = char(0xE1);157        n[1] = char(0x80);158        n[2] = char(0x85);159        r = c.length(m, n, n+3, 2);160        assert(r == 3);161 162        n[0] = char(0xD1);163        n[1] = char(0x93);164        r = c.length(m, n, n+2, 2);165        assert(r == 2);166 167        n[0] = char(0x56);168        r = c.length(m, n, n+1, 2);169        assert(r == 1);170    }171    {172        typedef std::codecvt_utf8_utf16<char16_t> C;173        C c;174        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};175        std::mbstate_t m;176        int r = c.length(m, n, n+4, 2);177        assert(r == 4);178 179        n[0] = char(0xE1);180        n[1] = char(0x80);181        n[2] = char(0x85);182        r = c.length(m, n, n+3, 2);183        assert(r == 3);184 185        n[0] = char(0xD1);186        n[1] = char(0x93);187        r = c.length(m, n, n+2, 2);188        assert(r == 2);189 190        n[0] = char(0x56);191        r = c.length(m, n, n+1, 2);192        assert(r == 1);193    }194    {195        typedef std::codecvt_utf8_utf16<char16_t, 0x1000> C;196        C c;197        char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)};198        std::mbstate_t m;199        int r = c.length(m, n, n+4, 2);200        assert(r == 0);201 202        n[0] = char(0xE1);203        n[1] = char(0x80);204        n[2] = char(0x85);205        r = c.length(m, n, n+3, 2);206        assert(r == 0);207 208        n[0] = char(0xD1);209        n[1] = char(0x93);210        r = c.length(m, n, n+2, 2);211        assert(r == 2);212 213        n[0] = char(0x56);214        r = c.length(m, n, n+1, 2);215        assert(r == 1);216    }217    {218        typedef std::codecvt_utf8_utf16<char16_t, 0x10ffff, std::consume_header> C;219        C c;220        char n[7] = {char(0xEF), char(0xBB), char(0xBF), char(0xF1), char(0x80), char(0x80), char(0x83)};221        std::mbstate_t m;222        int r = c.length(m, n, n+7, 2);223        assert(r == 7);224 225        n[0] = char(0xE1);226        n[1] = char(0x80);227        n[2] = char(0x85);228        r = c.length(m, n, n+3, 2);229        assert(r == 3);230 231        n[0] = char(0xD1);232        n[1] = char(0x93);233        r = c.length(m, n, n+2, 2);234        assert(r == 2);235 236        n[0] = char(0x56);237        r = c.length(m, n, n+1, 2);238        assert(r == 1);239    }240 241  return 0;242}243