1dc13a9a7Scgyurgyik //===-- Unittests for strpbrk ---------------------------------------------===//
2dc13a9a7Scgyurgyik //
3dc13a9a7Scgyurgyik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4dc13a9a7Scgyurgyik // See https://llvm.org/LICENSE.txt for license information.
5dc13a9a7Scgyurgyik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6dc13a9a7Scgyurgyik //
7dc13a9a7Scgyurgyik //===----------------------------------------------------------------------===//
8dc13a9a7Scgyurgyik 
9dc13a9a7Scgyurgyik #include "src/string/strpbrk.h"
10dc13a9a7Scgyurgyik 
11dc13a9a7Scgyurgyik #include "utils/UnitTest/Test.h"
12dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,EmptyStringShouldReturnNullptr)13*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, EmptyStringShouldReturnNullptr) {
14dc13a9a7Scgyurgyik   // The search should not include the null terminator.
15dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("", ""), nullptr);
16dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("_", ""), nullptr);
17dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("", "_"), nullptr);
18dc13a9a7Scgyurgyik }
19dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,ShouldNotFindAnythingAfterNullTerminator)20*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, ShouldNotFindAnythingAfterNullTerminator) {
21dc13a9a7Scgyurgyik   const char src[4] = {'a', 'b', '\0', 'c'};
22dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "c"), nullptr);
23dc13a9a7Scgyurgyik }
24dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,ShouldReturnNullptrIfNoCharactersFound)25*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, ShouldReturnNullptrIfNoCharactersFound) {
26dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("12345", "abcdef"), nullptr);
27dc13a9a7Scgyurgyik }
28dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,FindsFirstCharacter)29*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, FindsFirstCharacter) {
30dc13a9a7Scgyurgyik   const char *src = "12345";
31dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "1"), "12345");
32dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "-1"), "12345");
33dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "1_"), "12345");
34dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "f1_"), "12345");
35dc13a9a7Scgyurgyik   ASSERT_STREQ(src, "12345");
36dc13a9a7Scgyurgyik }
37dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,FindsMiddleCharacter)38*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, FindsMiddleCharacter) {
39dc13a9a7Scgyurgyik   const char *src = "12345";
40dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "3"), "345");
41dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "?3"), "345");
42dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "3F"), "345");
43dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "z3_"), "345");
44dc13a9a7Scgyurgyik   ASSERT_STREQ(src, "12345");
45dc13a9a7Scgyurgyik }
46dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,FindsLastCharacter)47*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, FindsLastCharacter) {
48dc13a9a7Scgyurgyik   const char *src = "12345";
49dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "5"), "5");
50dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "r5"), "5");
51dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "59"), "5");
52dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk(src, "n5_"), "5");
53dc13a9a7Scgyurgyik   ASSERT_STREQ(src, "12345");
54dc13a9a7Scgyurgyik }
55dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,FindsFirstOfRepeated)56*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, FindsFirstOfRepeated) {
57dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("A,B,C,D", ","), ",B,C,D");
58dc13a9a7Scgyurgyik }
59dc13a9a7Scgyurgyik 
TEST(LlvmLibcStrPBrkTest,FindsFirstInBreakset)60*1df0dbfcSMichael Jones TEST(LlvmLibcStrPBrkTest, FindsFirstInBreakset) {
61dc13a9a7Scgyurgyik   EXPECT_STREQ(__llvm_libc::strpbrk("12345", "34"), "345");
62dc13a9a7Scgyurgyik }
63