//===-- 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)
