xref: /llvm-project/libc/test/src/string/strlcat_test.cpp (revision 33bdb53d864e3e244d8fd5649062f17b7d4c958d)
1b1183305SAlex Brachet //===-- Unittests for strlcat ---------------------------------------------===//
2b1183305SAlex Brachet //
3b1183305SAlex Brachet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b1183305SAlex Brachet // See https://llvm.org/LICENSE.txt for license information.
5b1183305SAlex Brachet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b1183305SAlex Brachet //
7b1183305SAlex Brachet //===----------------------------------------------------------------------===//
8b1183305SAlex Brachet 
9b1183305SAlex Brachet #include "src/string/strlcat.h"
10af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
11b1183305SAlex Brachet 
12b1183305SAlex Brachet TEST(LlvmLibcStrlcatTest, TooBig) {
13b1183305SAlex Brachet   const char *str = "cd";
14b1183305SAlex Brachet   char buf[4]{"ab"};
15b6bc9d72SGuillaume Chatelet   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 3), size_t(4));
16b1183305SAlex Brachet   EXPECT_STREQ(buf, "ab");
17b6bc9d72SGuillaume Chatelet   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 4), size_t(4));
18b1183305SAlex Brachet   EXPECT_STREQ(buf, "abc");
19b1183305SAlex Brachet }
20b1183305SAlex Brachet 
21b1183305SAlex Brachet TEST(LlvmLibcStrlcatTest, Smaller) {
22b1183305SAlex Brachet   const char *str = "cd";
23b1183305SAlex Brachet   char buf[7]{"ab"};
24b1183305SAlex Brachet 
25b6bc9d72SGuillaume Chatelet   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 7), size_t(4));
26b1183305SAlex Brachet   EXPECT_STREQ(buf, "abcd");
27b1183305SAlex Brachet }
28b1183305SAlex Brachet 
29*b03c8c4fSGeorge Burgess IV TEST(LlvmLibcStrlcatTest, SmallerNoOverwriteAfter0) {
30*b03c8c4fSGeorge Burgess IV   const char *str = "cd";
31*b03c8c4fSGeorge Burgess IV   char buf[8]{"ab\0\0efg"};
32*b03c8c4fSGeorge Burgess IV 
33*b03c8c4fSGeorge Burgess IV   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 8), size_t(4));
34*b03c8c4fSGeorge Burgess IV   EXPECT_STREQ(buf, "abcd");
35*b03c8c4fSGeorge Burgess IV   EXPECT_STREQ(buf + 5, "fg");
36*b03c8c4fSGeorge Burgess IV }
37*b03c8c4fSGeorge Burgess IV 
38b1183305SAlex Brachet TEST(LlvmLibcStrlcatTest, No0) {
39b1183305SAlex Brachet   const char *str = "cd";
40b1183305SAlex Brachet   char buf[7]{"ab"};
41b6bc9d72SGuillaume Chatelet   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 1), size_t(3));
42b1183305SAlex Brachet   EXPECT_STREQ(buf, "ab");
43b6bc9d72SGuillaume Chatelet   EXPECT_EQ(LIBC_NAMESPACE::strlcat(buf, str, 2), size_t(4));
44b1183305SAlex Brachet   EXPECT_STREQ(buf, "ab");
45b1183305SAlex Brachet }
46