| //===-- Unittests for strsep ----------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "hdr/signal_macros.h" |
| #include "src/string/strsep.h" |
| #include "test/UnitTest/Test.h" |
| |
| TEST(LlvmLibcStrsepTest, NullSrc) { |
| char *string = nullptr; |
| EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr); |
| } |
| |
| TEST(LlvmLibcStrsepTest, NoTokenFound) { |
| { |
| char s[] = ""; |
| char *string = s; |
| EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr); |
| EXPECT_TRUE(string == nullptr); |
| } |
| { |
| char s[] = "abcde"; |
| char *string = s, *orig = s; |
| EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), orig); |
| EXPECT_TRUE(string == nullptr); |
| } |
| { |
| char s[] = "abcde"; |
| char *string = s, *orig = s; |
| EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "fghijk"), orig); |
| EXPECT_TRUE(string == nullptr); |
| } |
| } |
| |
| TEST(LlvmLibcStrsepTest, TokenFound) { |
| char s[] = "abacd"; |
| char *string = s; |
| EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "c"), "aba"); |
| EXPECT_STREQ(string, "d"); |
| } |
| |
| TEST(LlvmLibcStrsepTest, DelimitersShouldNotBeIncludedInToken) { |
| char s[] = "__ab__:cd_:_ef_:_"; |
| char *string = s; |
| const char *expected[] = {"", "", "ab", "", "", "cd", "", |
| "", "ef", "", "", "", nullptr}; |
| for (int i = 0; expected[i]; i++) { |
| ASSERT_STREQ(LIBC_NAMESPACE::strsep(&string, "_:"), expected[i]); |
| } |
| } |
| |
| TEST(LlvmLibcStrsepTest, SubsequentSearchesReturnNull) { |
| char s[] = "a"; |
| char *string = s; |
| ASSERT_STREQ(LIBC_NAMESPACE::strsep(&string, ":"), "a"); |
| ASSERT_EQ(LIBC_NAMESPACE::strsep(&string, ":"), nullptr); |
| ASSERT_EQ(LIBC_NAMESPACE::strsep(&string, ":"), nullptr); |
| } |
| |
| TEST(LlvmLibcStrsepTest, TopBitSet) { |
| char top_bit_set_str[] = "hello\x80world"; |
| char *p = top_bit_set_str; |
| ASSERT_STREQ(LIBC_NAMESPACE::strsep(&p, "\x80"), "hello"); |
| ASSERT_STREQ(LIBC_NAMESPACE::strsep(&p, "\x80"), "world"); |
| ASSERT_EQ(LIBC_NAMESPACE::strsep(&p, "\x80"), nullptr); |
| } |
| |
| #if defined(LIBC_ADD_NULL_CHECKS) |
| |
| TEST(LlvmLibcStrsepTest, CrashOnNullPtr) { |
| ASSERT_DEATH([]() { LIBC_NAMESPACE::strsep(nullptr, nullptr); }, |
| WITH_SIGNAL(-1)); |
| } |
| |
| #endif // defined(LIBC_ADD_NULL_CHECKS) |