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