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