brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 56bebf8 Raw
74 lines · cpp
1//===-- Unittests for wctomb ----------------------------------------------===//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#include "hdr/errno_macros.h"10#include "hdr/types/wchar_t.h"11#include "src/stdlib/wctomb.h"12#include "test/UnitTest/ErrnoCheckingTest.h"13#include "test/UnitTest/Test.h"14 15using LlvmLibcWCToMBTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;16 17TEST(LlvmLibcWCToMBTest, OneByte) {18  wchar_t wc = L'U';19  char mb[4];20  int cnt = LIBC_NAMESPACE::wctomb(mb, wc);21  ASSERT_EQ(cnt, 1);22  ASSERT_EQ(mb[0], 'U');23}24 25TEST(LlvmLibcWCToMBTest, TwoByte) {26  // testing utf32: 0xff -> utf8: 0xc3 0xbf27  wchar_t wc = 0xff;28  char mb[4];29  int cnt = LIBC_NAMESPACE::wctomb(mb, wc);30  ASSERT_EQ(cnt, 2);31  ASSERT_EQ(mb[0], static_cast<char>(0xc3));32  ASSERT_EQ(mb[1], static_cast<char>(0xbf));33}34 35TEST(LlvmLibcWCToMBTest, ThreeByte) {36  // testing utf32: 0xac15 -> utf8: 0xea 0xb0 0x9537  wchar_t wc = 0xac15;38  char mb[4];39  int cnt = LIBC_NAMESPACE::wctomb(mb, wc);40  ASSERT_EQ(cnt, 3);41  ASSERT_EQ(mb[0], static_cast<char>(0xea));42  ASSERT_EQ(mb[1], static_cast<char>(0xb0));43  ASSERT_EQ(mb[2], static_cast<char>(0x95));44}45 46TEST(LlvmLibcWCToMBTest, FourByte) {47  // testing utf32: 0x1f921 -> utf8: 0xf0 0x9f 0xa4 0xa148  wchar_t wc = 0x1f921;49  char mb[4];50  int cnt = LIBC_NAMESPACE::wctomb(mb, wc);51  ASSERT_EQ(cnt, 4);52  ASSERT_EQ(mb[0], static_cast<char>(0xf0));53  ASSERT_EQ(mb[1], static_cast<char>(0x9f));54  ASSERT_EQ(mb[2], static_cast<char>(0xa4));55  ASSERT_EQ(mb[3], static_cast<char>(0xa1));56}57 58TEST(LlvmLibcWCToMBTest, NullString) {59  wchar_t wc = L'A';60 61  int cnt = LIBC_NAMESPACE::wctomb(nullptr, wc);62 63  // no state-dependent encoding64  ASSERT_EQ(cnt, 0);65}66 67TEST(LlvmLibcWCToMBTest, InvalidWchar) {68  wchar_t wc = 0x12ffff;69  char mb[4];70  int cnt = LIBC_NAMESPACE::wctomb(mb, wc);71  ASSERT_EQ(cnt, -1);72  ASSERT_ERRNO_EQ(EILSEQ);73}74