1*71db0c75SAndroid Build Coastguard Worker
2*71db0c75SAndroid Build Coastguard Worker //===-- Unittests for swab ------------------------------------------------===//
3*71db0c75SAndroid Build Coastguard Worker //
4*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
6*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*71db0c75SAndroid Build Coastguard Worker //
8*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*71db0c75SAndroid Build Coastguard Worker
10*71db0c75SAndroid Build Coastguard Worker #include "src/unistd/swab.h"
11*71db0c75SAndroid Build Coastguard Worker
12*71db0c75SAndroid Build Coastguard Worker #include "src/string/string_utils.h"
13*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h"
14*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,NegativeSizeIsNoOp)15*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, NegativeSizeIsNoOp) {
16*71db0c75SAndroid Build Coastguard Worker const char *from = "abc";
17*71db0c75SAndroid Build Coastguard Worker char to[4] = {'x', 'y', 'z', '\0'};
18*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to, -1);
19*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "xyz");
20*71db0c75SAndroid Build Coastguard Worker }
21*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,ZeroSizeIsNoOp)22*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, ZeroSizeIsNoOp) {
23*71db0c75SAndroid Build Coastguard Worker const char *from = "abc";
24*71db0c75SAndroid Build Coastguard Worker char to[4] = {'x', 'y', 'z', '\0'};
25*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to, 0);
26*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "xyz");
27*71db0c75SAndroid Build Coastguard Worker }
28*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,SingleByteIsNoOp)29*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, SingleByteIsNoOp) {
30*71db0c75SAndroid Build Coastguard Worker char from[] = {'a'};
31*71db0c75SAndroid Build Coastguard Worker char to[4] = {'x', 'y', 'z', '\0'};
32*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to, sizeof(from));
33*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "xyz");
34*71db0c75SAndroid Build Coastguard Worker }
35*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,NullPtrsAreNotDeRefedIfNIsLessThanTwo)36*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, NullPtrsAreNotDeRefedIfNIsLessThanTwo) {
37*71db0c75SAndroid Build Coastguard Worker // This test passes if a crash does not happen
38*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(nullptr, nullptr, -1);
39*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(nullptr, nullptr, 0);
40*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(nullptr, nullptr, 1);
41*71db0c75SAndroid Build Coastguard Worker }
42*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,BytesAreSwappedWithEvenN)43*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, BytesAreSwappedWithEvenN) {
44*71db0c75SAndroid Build Coastguard Worker {
45*71db0c75SAndroid Build Coastguard Worker const char *from = "ab";
46*71db0c75SAndroid Build Coastguard Worker char to[3] = {};
47*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
48*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
49*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "ba");
50*71db0c75SAndroid Build Coastguard Worker }
51*71db0c75SAndroid Build Coastguard Worker {
52*71db0c75SAndroid Build Coastguard Worker const char *from = "abcd";
53*71db0c75SAndroid Build Coastguard Worker char to[5] = {};
54*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
55*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
56*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "badc");
57*71db0c75SAndroid Build Coastguard Worker }
58*71db0c75SAndroid Build Coastguard Worker {
59*71db0c75SAndroid Build Coastguard Worker const char *from = "aAaAaA";
60*71db0c75SAndroid Build Coastguard Worker char to[7] = {};
61*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
62*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
63*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "AaAaAa");
64*71db0c75SAndroid Build Coastguard Worker }
65*71db0c75SAndroid Build Coastguard Worker }
66*71db0c75SAndroid Build Coastguard Worker
TEST(LlvmLibcSwabTest,LastByteIgnoredWithOddN)67*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSwabTest, LastByteIgnoredWithOddN) {
68*71db0c75SAndroid Build Coastguard Worker {
69*71db0c75SAndroid Build Coastguard Worker const char *from = "aba";
70*71db0c75SAndroid Build Coastguard Worker char to[3] = {};
71*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
72*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
73*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "ba");
74*71db0c75SAndroid Build Coastguard Worker }
75*71db0c75SAndroid Build Coastguard Worker {
76*71db0c75SAndroid Build Coastguard Worker const char *from = "abcde";
77*71db0c75SAndroid Build Coastguard Worker char to[5] = {};
78*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
79*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
80*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "badc");
81*71db0c75SAndroid Build Coastguard Worker }
82*71db0c75SAndroid Build Coastguard Worker {
83*71db0c75SAndroid Build Coastguard Worker const char *from = "aAaAaAx";
84*71db0c75SAndroid Build Coastguard Worker char to[7] = {};
85*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::swab(from, to,
86*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::internal::string_length(from));
87*71db0c75SAndroid Build Coastguard Worker ASSERT_STREQ(to, "AaAaAa");
88*71db0c75SAndroid Build Coastguard Worker }
89*71db0c75SAndroid Build Coastguard Worker }
90