xref: /llvm-project/libc/test/src/string/strdup_test.cpp (revision 3eb1e6d8e930f5aff17b8d6bcc160f5bbf8cabc7)
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 #include <stdlib.h>
1465bb6593SMichael Jones 
1565bb6593SMichael Jones TEST(LlvmLibcStrDupTest, EmptyString) {
1665bb6593SMichael Jones   const char *empty = "";
1765bb6593SMichael Jones 
18*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
19b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(empty);
2073874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
21f3400305SSiva Chandra Reddy 
2265bb6593SMichael Jones   ASSERT_NE(result, static_cast<char *>(nullptr));
2365bb6593SMichael Jones   ASSERT_NE(empty, const_cast<const char *>(result));
2465bb6593SMichael Jones   ASSERT_STREQ(empty, result);
2565bb6593SMichael Jones   ::free(result);
2665bb6593SMichael Jones }
2765bb6593SMichael Jones 
2865bb6593SMichael Jones TEST(LlvmLibcStrDupTest, AnyString) {
2965bb6593SMichael Jones   const char *abc = "abc";
3065bb6593SMichael Jones 
31*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
32b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(abc);
3373874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
3465bb6593SMichael Jones 
3565bb6593SMichael Jones   ASSERT_NE(result, static_cast<char *>(nullptr));
3665bb6593SMichael Jones   ASSERT_NE(abc, const_cast<const char *>(result));
3765bb6593SMichael Jones   ASSERT_STREQ(abc, result);
3865bb6593SMichael Jones   ::free(result);
3965bb6593SMichael Jones }
4065bb6593SMichael Jones 
4165bb6593SMichael Jones TEST(LlvmLibcStrDupTest, NullPtr) {
42*3eb1e6d8Smichaelrj-google   LIBC_NAMESPACE::libc_errno = 0;
43b6bc9d72SGuillaume Chatelet   char *result = LIBC_NAMESPACE::strdup(nullptr);
4473874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
4565bb6593SMichael Jones 
4665bb6593SMichael Jones   ASSERT_EQ(result, static_cast<char *>(nullptr));
4765bb6593SMichael Jones }
48