//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS // template // class codecvt_utf16 // : public codecvt // { // // unspecified // }; // int length(stateT& state, const externT* from, const externT* from_end, // size_t max) const; #include #include #include "test_macros.h" template struct TestHelper; template struct TestHelper { static void test(); }; template struct TestHelper { static void test(); }; template void TestHelper::test() { { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 0); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[6] = {char(0xFE), char(0xFF), char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 6, 2); assert(r == 2); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 0); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[6] = {char(0xFF), char(0xFE), char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 6, 2); assert(r == 2); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } } template void TestHelper::test() { { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 4); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 0); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[6] = {char(0xFE), char(0xFF), char(0xD8), char(0xC0), char(0xDC), char(0x03)}; std::mbstate_t m; int r = c.length(m, n, n + 6, 2); assert(r == 6); n[0] = char(0x10); n[1] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x04); n[1] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[0] = char(0x00); n[1] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 4); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 4, 2); assert(r == 0); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 0); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } { typedef std::codecvt_utf16 C; C c; char n[6] = {char(0xFF), char(0xFE), char(0xC0), char(0xD8), char(0x03), char(0xDC)}; std::mbstate_t m; int r = c.length(m, n, n + 6, 2); assert(r == 6); n[1] = char(0x10); n[0] = char(0x05); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x04); n[0] = char(0x53); r = c.length(m, n, n + 2, 2); assert(r == 2); n[1] = char(0x00); n[0] = char(0x56); r = c.length(m, n, n + 2, 2); assert(r == 2); } } int main(int, char**) { TestHelper::test(); TestHelper::test(); TestHelper::test(); return 0; }