xref: /llvm-project/libc/test/src/string/strsep_test.cpp (revision b6bc9d72f65a5086f310f321e969d96e9a559e75)
1b4ab398cSAlex Brachet //===-- Unittests for strsep ----------------------------------------------===//
2b4ab398cSAlex Brachet //
3b4ab398cSAlex Brachet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b4ab398cSAlex Brachet // See https://llvm.org/LICENSE.txt for license information.
5b4ab398cSAlex Brachet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b4ab398cSAlex Brachet //
7b4ab398cSAlex Brachet //===----------------------------------------------------------------------===//
8b4ab398cSAlex Brachet 
9b4ab398cSAlex Brachet #include "src/string/strsep.h"
10b4ab398cSAlex Brachet #include "test/UnitTest/Test.h"
11b4ab398cSAlex Brachet 
TEST(LlvmLibcStrsepTest,NullSrc)12b4ab398cSAlex Brachet TEST(LlvmLibcStrsepTest, NullSrc) {
13b4ab398cSAlex Brachet   char *string = nullptr;
14*b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr);
15b4ab398cSAlex Brachet }
16b4ab398cSAlex Brachet 
TEST(LlvmLibcStrsepTest,NoTokenFound)17b4ab398cSAlex Brachet TEST(LlvmLibcStrsepTest, NoTokenFound) {
18b4ab398cSAlex Brachet   {
19b4ab398cSAlex Brachet     char s[] = "";
20b4ab398cSAlex Brachet     char *string = s, *orig = s;
21*b6bc9d72SGuillaume Chatelet     EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), nullptr);
22b4ab398cSAlex Brachet     EXPECT_EQ(orig, string);
23b4ab398cSAlex Brachet   }
24b4ab398cSAlex Brachet   {
25b4ab398cSAlex Brachet     char s[] = "abcde";
26b4ab398cSAlex Brachet     char *string = s, *orig = s;
27*b6bc9d72SGuillaume Chatelet     EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, ""), orig);
28b4ab398cSAlex Brachet     EXPECT_EQ(string, orig + 5);
29b4ab398cSAlex Brachet   }
30b4ab398cSAlex Brachet   {
31b4ab398cSAlex Brachet     char s[] = "abcde";
32b4ab398cSAlex Brachet     char *string = s, *orig = s;
33*b6bc9d72SGuillaume Chatelet     EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "fghijk"), orig);
34b4ab398cSAlex Brachet     EXPECT_EQ(string, orig + 5);
35b4ab398cSAlex Brachet   }
36b4ab398cSAlex Brachet }
37b4ab398cSAlex Brachet 
TEST(LlvmLibcStrsepTest,TokenFound)38b4ab398cSAlex Brachet TEST(LlvmLibcStrsepTest, TokenFound) {
39b4ab398cSAlex Brachet   char s[] = "abacd";
40b4ab398cSAlex Brachet   char *string = s;
41*b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::strsep(&string, "c"), "aba");
42b4ab398cSAlex Brachet   EXPECT_STREQ(string, "d");
43b4ab398cSAlex Brachet }
44b4ab398cSAlex Brachet 
TEST(LlvmLibcStrsepTest,DelimitersShouldNotBeIncludedInToken)45b4ab398cSAlex Brachet TEST(LlvmLibcStrsepTest, DelimitersShouldNotBeIncludedInToken) {
46b4ab398cSAlex Brachet   char s[] = "__ab__:cd_:_ef_:_";
47b4ab398cSAlex Brachet   char *string = s;
48b4ab398cSAlex Brachet   const char *expected[] = {"", "",   "ab", "", "", "cd",   "",
49b4ab398cSAlex Brachet                             "", "ef", "",   "", "", nullptr};
50b4ab398cSAlex Brachet   for (int i = 0; expected[i]; i++) {
51*b6bc9d72SGuillaume Chatelet     ASSERT_STREQ(LIBC_NAMESPACE::strsep(&string, "_:"), expected[i]);
52b4ab398cSAlex Brachet   }
53b4ab398cSAlex Brachet }
54