brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 553edd9 Raw
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