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