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