brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 6b25bd8 Raw
93 lines · cpp
1//===-- Unittests for wmemchr ---------------------------------------------===//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/wmemchr.h"11#include "test/UnitTest/Test.h"12 13TEST(LlvmLibcWMemChrTest, FindsCharacterAfterNullTerminator) {14  // wmemchr should continue searching after a null terminator.15  const size_t size = 5;16  const wchar_t src[size] = {L'a', L'\0', L'b', L'c', L'\0'};17  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'b', size), (src + 2));18}19 20TEST(LlvmLibcWMemChrTest, FindsCharacterInNonNullTerminatedCollection) {21  const size_t size = 3;22  const wchar_t src[size] = {L'a', L'b', L'c'};23  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'b', size), (src + 1));24}25 26TEST(LlvmLibcWMemChrTest, FindsFirstCharacter) {27  const size_t size = 6;28  const wchar_t *src = L"abcde";29  // Should return original array since 'a' is the first character.30  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'a', size), (src));31}32 33TEST(LlvmLibcWMemChrTest, FindsMiddleCharacter) {34  const size_t size = 6;35  const wchar_t *src = L"abcde";36  // Should return characters after and including 'c'.37  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'c', size), (src + 2));38}39 40TEST(LlvmLibcWMemChrTest, FindsLastCharacterThatIsNotNullTerminator) {41  const size_t size = 6;42  const wchar_t *src = L"abcde";43  // Should return 'e' and null terminator.44  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'e', size), (src + 4));45}46 47TEST(LlvmLibcWMemChrTest, FindsNullTerminator) {48  const size_t size = 6;49  const wchar_t *src = L"abcde";50  // Should return null terminator.51  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'\0', size), (src + 5));52}53 54TEST(LlvmLibcWMemChrTest, CharacterNotWithinStringShouldReturnNullptr) {55  const size_t size = 6;56  const wchar_t *src = L"abcde";57  // Should return nullptr.58  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'z', size), nullptr);59}60 61TEST(LlvmLibcWMemChrTest, CharacterNotWithinSizeShouldReturnNullptr) {62  const size_t size = 3;63  const wchar_t *src = L"abcde";64  // Should return nullptr.65  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'd', size), nullptr);66}67 68TEST(LlvmLibcWMemChrTest, TheSourceShouldNotChange) {69  const size_t size = 3;70  const wchar_t *src = L"ab";71  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'a', size), src);72  ASSERT_TRUE(src[0] == L'a');73  ASSERT_TRUE(src[1] == L'b');74  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'c', size), nullptr);75  ASSERT_TRUE(src[0] == L'a');76  ASSERT_TRUE(src[1] == L'b');77}78 79TEST(LlvmLibcWMemChrTest, EmptyStringShouldOnlyMatchNullTerminator) {80  const size_t size = 1;81  const wchar_t *src = L"";82  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'\0', size), src);83  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'c', size), nullptr);84  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'1', size), nullptr);85  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'?', size), nullptr);86}87 88TEST(LlvmLibcWMemChrTest, SingleRepeatedCharacterShouldReturnFirst) {89  const size_t size = 6;90  const wchar_t *src = L"XXXXX";91  ASSERT_EQ(LIBC_NAMESPACE::wmemchr(src, L'X', size), src);92}93