brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 6c6faf8 Raw
94 lines · cpp
1//===-- Unittests for wcpncpy --------------------------------------------===//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/types/wchar_t.h"10#include "src/wchar/wcpncpy.h"11#include "test/UnitTest/Test.h"12 13TEST(LlvmLibcWCPNCpyTest, EmptySrc) {14  // Empty src should lead to empty destination.15  wchar_t dest[4] = {L'a', L'b', L'c', L'\0'};16  const wchar_t *src = L"";17  LIBC_NAMESPACE::wcpncpy(dest, src, 3);18  ASSERT_TRUE(dest[0] == src[0]);19  ASSERT_TRUE(dest[0] == L'\0');20  // Rest should also be padded with L'\0'21  ASSERT_TRUE(dest[1] == L'\0');22  ASSERT_TRUE(dest[2] == L'\0');23}24 25TEST(LlvmLibcWCPNCpyTest, Untouched) {26  wchar_t dest[] = {L'a', L'b'};27  const wchar_t src[] = {L'x', L'\0'};28  LIBC_NAMESPACE::wcpncpy(dest, src, 0);29  ASSERT_TRUE(dest[0] == L'a');30  ASSERT_TRUE(dest[1] == L'b');31}32 33TEST(LlvmLibcWCPNCpyTest, CopyOne) {34  wchar_t dest[] = {L'a', L'b'};35  const wchar_t src[] = {L'x', L'y'};36  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, src, 1);37  ASSERT_TRUE(dest[0] == L'x');38  ASSERT_TRUE(dest[1] == L'b');39  ASSERT_EQ(dest + 1, res);40}41 42TEST(LlvmLibcWCPNCpyTest, CopyNull) {43  wchar_t dest[] = {L'a', L'b'};44  const wchar_t src[] = {L'\0', L'y'};45  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, src, 1);46  ASSERT_TRUE(dest[0] == L'\0');47  ASSERT_TRUE(dest[1] == L'b');48  ASSERT_EQ(dest, res);49}50 51TEST(LlvmLibcWCPNCpyTest, CopyPastSrc) {52  wchar_t dest[] = {L'a', L'b'};53  const wchar_t src[] = {L'\0', L'y'};54  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);55  ASSERT_TRUE(dest[0] == L'\0');56  ASSERT_TRUE(dest[1] == L'\0');57  ASSERT_EQ(dest, res);58}59 60TEST(LlvmLibcWCPNCpyTest, CopyTwoNoNull) {61  wchar_t dest[] = {L'a', L'b'};62  const wchar_t src[] = {L'x', L'y'};63  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);64  ASSERT_TRUE(dest[0] == L'x');65  ASSERT_TRUE(dest[1] == L'y');66  ASSERT_EQ(dest + 2, res);67}68 69TEST(LlvmLibcWCPNCpyTest, CopyTwoWithNull) {70  wchar_t dest[] = {L'a', L'b'};71  const wchar_t src[] = {L'x', L'\0'};72  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);73  ASSERT_TRUE(dest[0] == L'x');74  ASSERT_TRUE(dest[1] == L'\0');75  ASSERT_EQ(dest + 1, res);76}77 78TEST(LlvmLibcWCPNCpyTest, CopyAndFill) {79  wchar_t dest[] = {L'a', L'b', L'c'};80  wchar_t *res = LIBC_NAMESPACE::wcpncpy(dest, L"x", 3);81  ASSERT_TRUE(dest[0] == L'x');82  ASSERT_TRUE(dest[1] == L'\0');83  ASSERT_TRUE(dest[2] == L'\0');84  ASSERT_EQ(dest + 1, res);85}86 87#if defined(LIBC_ADD_NULL_CHECKS)88TEST(LlvmLibcWCPNCpyTest, NullptrCrash) {89  // Passing in a nullptr should crash the program.90  EXPECT_DEATH([] { LIBC_NAMESPACE::wcpncpy(nullptr, nullptr, 1); },91               WITH_SIGNAL(-1));92}93#endif // LIBC_ADD_NULL_CHECKS94