73 lines · cpp
1//===-- Unittests for wcspbrk ---------------------------------------------===//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/wcspbrk.h"11#include "test/UnitTest/Test.h"12 13TEST(LlvmLibcWCSPBrkTest, EmptyStringShouldReturnNullptr) {14 // The search should not include the null terminator.15 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(L"", L""), nullptr);16 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(L"_", L""), nullptr);17 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(L"", L"_"), nullptr);18}19 20TEST(LlvmLibcWCSPBrkTest, ShouldNotFindAnythingAfterNullTerminator) {21 const wchar_t src[4] = {'a', 'b', '\0', 'c'};22 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"c"), nullptr);23}24 25TEST(LlvmLibcWCSPBrkTest, ShouldReturnNullptrIfNoCharactersFound) {26 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(L"12345", L"abcdef"), nullptr);27}28 29TEST(LlvmLibcWCSPBrkTest, FindsFirstCharacter) {30 const wchar_t *src = L"12345";31 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"1"), src);32 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"-1"), src);33 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"1_"), src);34 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"f1_"), src);35}36 37TEST(LlvmLibcWCSPBrkTest, FindsMiddleCharacter) {38 const wchar_t *src = L"12345";39 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"3"), src + 2);40 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"?3"), src + 2);41 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"3F"), src + 2);42 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"z3_"), src + 2);43}44 45TEST(LlvmLibcWCSPBrkTest, FindsLastCharacter) {46 const wchar_t *src = L"12345";47 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"5"), src + 4);48 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"r5"), src + 4);49 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"59"), src + 4);50 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"n5_"), src + 4);51}52 53TEST(LlvmLibcWCSPBrkTest, FindsFirstOfRepeated) {54 const wchar_t *src = L"A,B,C,D";55 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L","), src + 1);56}57 58TEST(LlvmLibcWCSPBrkTest, FindsFirstInBreakset) {59 const wchar_t *src = L"12345";60 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"34"), src + 2);61 EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"43"), src + 2);62}63 64#if defined(LIBC_ADD_NULL_CHECKS)65TEST(LlvmLibcWCSPBrkTest, NullptrCrash) {66 // Passing in a nullptr should crash the program.67 EXPECT_DEATH([] { LIBC_NAMESPACE::wcspbrk(L"aaaaaaaaaaaaaa", nullptr); },68 WITH_SIGNAL(-1));69 EXPECT_DEATH([] { LIBC_NAMESPACE::wcspbrk(nullptr, L"aaaaaaaaaaaaaa"); },70 WITH_SIGNAL(-1));71}72#endif // LIBC_ADD_NULL_CHECKS73