80 lines · cpp
1//===-- Unittests for strsep ----------------------------------------------===//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/signal_macros.h"10#include "src/string/strsep.h"11#include "test/UnitTest/Test.h"12 13TEST(LlvmLibcStrsepTest, NullSrc) {14 char *string = nullptr;15 EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr);16}17 18TEST(LlvmLibcStrsepTest, NoTokenFound) {19 {20 char s[] = "";21 char *string = s;22 EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr);23 EXPECT_TRUE(string == nullptr);24 }25 {26 char s[] = "abcde";27 char *string = s, *orig = s;28 EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), orig);29 EXPECT_TRUE(string == nullptr);30 }31 {32 char s[] = "abcde";33 char *string = s, *orig = s;34 EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "fghijk"), orig);35 EXPECT_TRUE(string == nullptr);36 }37}38 39TEST(LlvmLibcStrsepTest, TokenFound) {40 char s[] = "abacd";41 char *string = s;42 EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "c"), "aba");43 EXPECT_STREQ(string, "d");44}45 46TEST(LlvmLibcStrsepTest, DelimitersShouldNotBeIncludedInToken) {47 char s[] = "__ab__:cd_:_ef_:_";48 char *string = s;49 const char *expected[] = {"", "", "ab", "", "", "cd", "",50 "", "ef", "", "", "", nullptr};51 for (int i = 0; expected[i]; i++) {52 ASSERT_STREQ(LIBC_NAMESPACE::strsep(&string, "_:"), expected[i]);53 }54}55 56TEST(LlvmLibcStrsepTest, SubsequentSearchesReturnNull) {57 char s[] = "a";58 char *string = s;59 ASSERT_STREQ(LIBC_NAMESPACE::strsep(&string, ":"), "a");60 ASSERT_EQ(LIBC_NAMESPACE::strsep(&string, ":"), nullptr);61 ASSERT_EQ(LIBC_NAMESPACE::strsep(&string, ":"), nullptr);62}63 64TEST(LlvmLibcStrsepTest, TopBitSet) {65 char top_bit_set_str[] = "hello\x80world";66 char *p = top_bit_set_str;67 ASSERT_STREQ(LIBC_NAMESPACE::strsep(&p, "\x80"), "hello");68 ASSERT_STREQ(LIBC_NAMESPACE::strsep(&p, "\x80"), "world");69 ASSERT_EQ(LIBC_NAMESPACE::strsep(&p, "\x80"), nullptr);70}71 72#if defined(LIBC_ADD_NULL_CHECKS)73 74TEST(LlvmLibcStrsepTest, CrashOnNullPtr) {75 ASSERT_DEATH([]() { LIBC_NAMESPACE::strsep(nullptr, nullptr); },76 WITH_SIGNAL(-1));77}78 79#endif // defined(LIBC_ADD_NULL_CHECKS)80