xref: /llvm-project/libc/test/src/string/strxfrm_test.cpp (revision b6bc9d72f65a5086f310f321e969d96e9a559e75)
1a1e4f1d0SCaslyn Tonelli //===-- Unittests for strxfrm ---------------------------------------------===//
2a1e4f1d0SCaslyn Tonelli //
3a1e4f1d0SCaslyn Tonelli // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4a1e4f1d0SCaslyn Tonelli // See https://llvm.org/LICENSE.txt for license information.
5a1e4f1d0SCaslyn Tonelli // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a1e4f1d0SCaslyn Tonelli //
7a1e4f1d0SCaslyn Tonelli //===----------------------------------------------------------------------===//
8a1e4f1d0SCaslyn Tonelli 
9a1e4f1d0SCaslyn Tonelli #include "src/string/strxfrm.h"
10a1e4f1d0SCaslyn Tonelli #include "test/UnitTest/Test.h"
11a1e4f1d0SCaslyn Tonelli 
12a1e4f1d0SCaslyn Tonelli #include "src/string/string_utils.h"
13a1e4f1d0SCaslyn Tonelli 
14a1e4f1d0SCaslyn Tonelli // TODO: Add more comprehensive tests once locale support is added.
15a1e4f1d0SCaslyn Tonelli 
TEST(LlvmLibcStrxfrmTest,SimpleTestSufficientlySizedN)16a1e4f1d0SCaslyn Tonelli TEST(LlvmLibcStrxfrmTest, SimpleTestSufficientlySizedN) {
17a1e4f1d0SCaslyn Tonelli   const char *src = "abc";
18a1e4f1d0SCaslyn Tonelli   const size_t n = 5;
19a1e4f1d0SCaslyn Tonelli 
20a1e4f1d0SCaslyn Tonelli   char dest[n];
21*b6bc9d72SGuillaume Chatelet   size_t result = LIBC_NAMESPACE::strxfrm(dest, src, n);
22*b6bc9d72SGuillaume Chatelet   ASSERT_EQ(result, LIBC_NAMESPACE::internal::string_length(src));
23a1e4f1d0SCaslyn Tonelli   ASSERT_STREQ(dest, src);
24a1e4f1d0SCaslyn Tonelli }
25a1e4f1d0SCaslyn Tonelli 
TEST(LlvmLibcStrxfrmTest,SimpleTestExactSizedN)26a1e4f1d0SCaslyn Tonelli TEST(LlvmLibcStrxfrmTest, SimpleTestExactSizedN) {
27a1e4f1d0SCaslyn Tonelli   const char *src = "abc";
28a1e4f1d0SCaslyn Tonelli   const size_t n = 4;
29a1e4f1d0SCaslyn Tonelli 
30a1e4f1d0SCaslyn Tonelli   char dest[n];
31*b6bc9d72SGuillaume Chatelet   size_t result = LIBC_NAMESPACE::strxfrm(dest, src, n);
32*b6bc9d72SGuillaume Chatelet   ASSERT_EQ(result, LIBC_NAMESPACE::internal::string_length(src));
33a1e4f1d0SCaslyn Tonelli   ASSERT_STREQ(dest, src);
34a1e4f1d0SCaslyn Tonelli }
35a1e4f1d0SCaslyn Tonelli 
TEST(LlvmLibcStrxfrmTest,SimpleTestInsufficientlySizedN)36a1e4f1d0SCaslyn Tonelli TEST(LlvmLibcStrxfrmTest, SimpleTestInsufficientlySizedN) {
37a1e4f1d0SCaslyn Tonelli   const char *src = "abc";
38a1e4f1d0SCaslyn Tonelli   const size_t n = 3;
39a1e4f1d0SCaslyn Tonelli 
40a1e4f1d0SCaslyn Tonelli   // Verify strxfrm does not modify dest if src len >= n
41a1e4f1d0SCaslyn Tonelli   char dest[n] = {'x', 'x', '\0'};
42*b6bc9d72SGuillaume Chatelet   size_t result = LIBC_NAMESPACE::strxfrm(dest, src, n);
43a1e4f1d0SCaslyn Tonelli   ASSERT_GE(result, n);
44a1e4f1d0SCaslyn Tonelli   ASSERT_STREQ(dest, "xx");
45a1e4f1d0SCaslyn Tonelli }
46