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