xref: /llvm-project/libc/test/src/string/strdup_test.cpp (revision 33bdb53d864e3e244d8fd5649062f17b7d4c958d)
165bb6593SMichael Jones //===-- Unittests for strdup ----------------------------------------------===//
265bb6593SMichael Jones //
365bb6593SMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
465bb6593SMichael Jones // See https://llvm.org/LICENSE.txt for license information.
565bb6593SMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
665bb6593SMichael Jones //
765bb6593SMichael Jones //===----------------------------------------------------------------------===//
865bb6593SMichael Jones 
930d89423SSiva Chandra Reddy #include "src/errno/libc_errno.h"
1065bb6593SMichael Jones #include "src/string/strdup.h"
11af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
12f3400305SSiva Chandra Reddy 
1365bb6593SMichael Jones TEST(LlvmLibcStrDupTest, EmptyString) {
1465bb6593SMichael Jones   const char *empty = "";
1565bb6593SMichael Jones 
16*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
17b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(empty);
1873874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
19f3400305SSiva Chandra Reddy 
2065bb6593SMichael Jones   ASSERT_NE(result, static_cast<char *>(nullptr));
2165bb6593SMichael Jones   ASSERT_NE(empty, const_cast<const char *>(result));
2265bb6593SMichael Jones   ASSERT_STREQ(empty, result);
2365bb6593SMichael Jones   ::free(result);
2465bb6593SMichael Jones }
2565bb6593SMichael Jones 
2665bb6593SMichael Jones TEST(LlvmLibcStrDupTest, AnyString) {
2765bb6593SMichael Jones   const char *abc = "abc";
2865bb6593SMichael Jones 
29*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
30b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(abc);
3173874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
3265bb6593SMichael Jones 
3365bb6593SMichael Jones   ASSERT_NE(result, static_cast<char *>(nullptr));
3465bb6593SMichael Jones   ASSERT_NE(abc, const_cast<const char *>(result));
3565bb6593SMichael Jones   ASSERT_STREQ(abc, result);
3665bb6593SMichael Jones   ::free(result);
3765bb6593SMichael Jones }
3865bb6593SMichael Jones 
3965bb6593SMichael Jones TEST(LlvmLibcStrDupTest, NullPtr) {
40*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
41b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(nullptr);
4273874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
4365bb6593SMichael Jones 
4465bb6593SMichael Jones   ASSERT_EQ(result, static_cast<char *>(nullptr));
4565bb6593SMichael Jones }
46