Skip to content

Commit f3d100c

Browse files
author
Sriya Pratipati
committed
[libc] wcpcpy implementation
Implemented wcpcpy and tests.
1 parent 8c96b21 commit f3d100c

File tree

1 file changed

+52
-29
lines changed

1 file changed

+52
-29
lines changed

libc/test/src/wchar/wcpncpy_test.cpp

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,58 @@ TEST(LlvmLibcWCPNCpyTest, EmptySrc) {
2222
ASSERT_TRUE(dest[2] == L'\0');
2323
}
2424

25-
// TEST(LlvmLibcWCPCpyTest, EmptyDest) {
26-
// // Empty dest should result in src
27-
// const wchar_t *src = L"abc";
28-
// wchar_t dest[4];
29-
// wchar_t *result = LIBC_NAMESPACE::wcpcpy(dest, src);
30-
// ASSERT_EQ(dest + 3, result);
31-
// ASSERT_TRUE(result[0] == L'\0');
32-
// ASSERT_TRUE(dest[0] == L'a');
33-
// ASSERT_TRUE(dest[1] == L'b');
34-
// ASSERT_TRUE(dest[2] == L'c');
35-
// }
36-
37-
// TEST(LlvmLibcWCPCpyTest, OffsetDest) {
38-
// // Offsetting should result in a concatenation.
39-
// const wchar_t *src = L"abc";
40-
// wchar_t dest[7];
41-
// dest[0] = L'x';
42-
// dest[1] = L'y';
43-
// dest[2] = L'z';
44-
// wchar_t *result = LIBC_NAMESPACE::wcpcpy(dest + 3, src);
45-
// ASSERT_TRUE(dest[0] == L'x');
46-
// ASSERT_TRUE(dest[1] == L'y');
47-
// ASSERT_TRUE(dest[2] == L'z');
48-
// ASSERT_TRUE(dest[3] == src[0]);
49-
// ASSERT_TRUE(dest[4] == src[1]);
50-
// ASSERT_TRUE(dest[5] == src[2]);
51-
// ASSERT_TRUE(result[0] == L'\0');
52-
// ASSERT_EQ(dest + 6, result);
53-
// }
25+
TEST(LlvmLibcWCPNCpyTest, Untouched) {
26+
wchar_t dest[] = {L'a', L'b'};
27+
const wchar_t src[] = {L'x', L'\0'};
28+
LIBC_NAMESPACE::wcpncpy(dest, src, 0);
29+
ASSERT_TRUE(dest[0] == L'a');
30+
ASSERT_TRUE(dest[1] == L'b');
31+
}
32+
33+
TEST(LlvmLibcWCPNCpyTest, CopyOne) {
34+
wchar_t dest[] = {L'a', L'b'};
35+
const wchar_t src[] = {L'x', L'y'};
36+
wchar_t * res = LIBC_NAMESPACE::wcpncpy(dest, src, 1);
37+
ASSERT_TRUE(dest[0] == L'x');
38+
ASSERT_TRUE(dest[1] == L'b');
39+
ASSERT_EQ(dest + 1, res);
40+
}
41+
42+
TEST(LlvmLibcWCPNCpyTest, CopyNull) {
43+
wchar_t dest[] = {L'a', L'b'};
44+
const wchar_t src[] = {L'\0', L'y'};
45+
wchar_t * res = LIBC_NAMESPACE::wcpncpy(dest, src, 1);
46+
ASSERT_TRUE(dest[0] == L'\0');
47+
ASSERT_TRUE(dest[1] == L'b');
48+
ASSERT_EQ(dest + 1, res);
49+
}
50+
51+
TEST(LlvmLibcWCPNCpyTest, CopyPastSrc) {
52+
wchar_t dest[] = {L'a', L'b'};
53+
const wchar_t src[] = {L'\0', L'y'};
54+
wchar_t * res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);
55+
ASSERT_TRUE(dest[0] == L'\0');
56+
ASSERT_TRUE(dest[1] == L'\0');
57+
ASSERT_EQ(dest + 2, res);
58+
}
59+
60+
TEST(LlvmLibcWCPNCpyTest, CopyTwoNoNull) {
61+
wchar_t dest[] = {L'a', L'b'};
62+
const wchar_t src[] = {L'x', L'y'};
63+
wchar_t * res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);
64+
ASSERT_TRUE(dest[0] == L'x');
65+
ASSERT_TRUE(dest[1] == L'y');
66+
ASSERT_EQ(dest + 2, res);
67+
}
68+
69+
TEST(LlvmLibcWCPNCpyTest, CopyTwoWithNull) {
70+
wchar_t dest[] = {L'a', L'b'};
71+
const wchar_t src[] = {L'x', L'\0'};
72+
wchar_t * res = LIBC_NAMESPACE::wcpncpy(dest, src, 2);
73+
ASSERT_TRUE(dest[0] == L'x');
74+
ASSERT_TRUE(dest[1] == L'\0');
75+
ASSERT_EQ(dest + 2, res);
76+
}
5477

5578
#if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
5679
TEST(LlvmLibcWCPNCpyTest, NullptrCrash) {

0 commit comments

Comments
 (0)