xref: /aosp_15_r20/external/libchrome/base/sys_byteorder_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/sys_byteorder.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <stdint.h>
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker #include "build/build_config.h"
10*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*635a8641SAndroid Build Coastguard Worker 
12*635a8641SAndroid Build Coastguard Worker namespace {
13*635a8641SAndroid Build Coastguard Worker 
14*635a8641SAndroid Build Coastguard Worker const uint16_t k16BitTestData = 0xaabb;
15*635a8641SAndroid Build Coastguard Worker const uint16_t k16BitSwappedTestData = 0xbbaa;
16*635a8641SAndroid Build Coastguard Worker const uint32_t k32BitTestData = 0xaabbccdd;
17*635a8641SAndroid Build Coastguard Worker const uint32_t k32BitSwappedTestData = 0xddccbbaa;
18*635a8641SAndroid Build Coastguard Worker const uint64_t k64BitTestData = 0xaabbccdd44332211;
19*635a8641SAndroid Build Coastguard Worker const uint64_t k64BitSwappedTestData = 0x11223344ddccbbaa;
20*635a8641SAndroid Build Coastguard Worker 
21*635a8641SAndroid Build Coastguard Worker }  // namespace
22*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwap16)23*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwap16) {
24*635a8641SAndroid Build Coastguard Worker   uint16_t swapped = base::ByteSwap(k16BitTestData);
25*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitSwappedTestData, swapped);
26*635a8641SAndroid Build Coastguard Worker   uint16_t reswapped = base::ByteSwap(swapped);
27*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitTestData, reswapped);
28*635a8641SAndroid Build Coastguard Worker }
29*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwap32)30*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwap32) {
31*635a8641SAndroid Build Coastguard Worker   uint32_t swapped = base::ByteSwap(k32BitTestData);
32*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitSwappedTestData, swapped);
33*635a8641SAndroid Build Coastguard Worker   uint32_t reswapped = base::ByteSwap(swapped);
34*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitTestData, reswapped);
35*635a8641SAndroid Build Coastguard Worker }
36*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwap64)37*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwap64) {
38*635a8641SAndroid Build Coastguard Worker   uint64_t swapped = base::ByteSwap(k64BitTestData);
39*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitSwappedTestData, swapped);
40*635a8641SAndroid Build Coastguard Worker   uint64_t reswapped = base::ByteSwap(swapped);
41*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitTestData, reswapped);
42*635a8641SAndroid Build Coastguard Worker }
43*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwapUintPtrT)44*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwapUintPtrT) {
45*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_64_BITS)
46*635a8641SAndroid Build Coastguard Worker   const uintptr_t test_data = static_cast<uintptr_t>(k64BitTestData);
47*635a8641SAndroid Build Coastguard Worker   const uintptr_t swapped_test_data =
48*635a8641SAndroid Build Coastguard Worker       static_cast<uintptr_t>(k64BitSwappedTestData);
49*635a8641SAndroid Build Coastguard Worker #elif defined(ARCH_CPU_32_BITS)
50*635a8641SAndroid Build Coastguard Worker   const uintptr_t test_data = static_cast<uintptr_t>(k32BitTestData);
51*635a8641SAndroid Build Coastguard Worker   const uintptr_t swapped_test_data =
52*635a8641SAndroid Build Coastguard Worker       static_cast<uintptr_t>(k32BitSwappedTestData);
53*635a8641SAndroid Build Coastguard Worker #else
54*635a8641SAndroid Build Coastguard Worker #error architecture not supported
55*635a8641SAndroid Build Coastguard Worker #endif
56*635a8641SAndroid Build Coastguard Worker 
57*635a8641SAndroid Build Coastguard Worker   uintptr_t swapped = base::ByteSwapUintPtrT(test_data);
58*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(swapped_test_data, swapped);
59*635a8641SAndroid Build Coastguard Worker   uintptr_t reswapped = base::ByteSwapUintPtrT(swapped);
60*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(test_data, reswapped);
61*635a8641SAndroid Build Coastguard Worker }
62*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwapToLE16)63*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwapToLE16) {
64*635a8641SAndroid Build Coastguard Worker   uint16_t le = base::ByteSwapToLE16(k16BitTestData);
65*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
66*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitTestData, le);
67*635a8641SAndroid Build Coastguard Worker #else
68*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitSwappedTestData, le);
69*635a8641SAndroid Build Coastguard Worker #endif
70*635a8641SAndroid Build Coastguard Worker }
71*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwapToLE32)72*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwapToLE32) {
73*635a8641SAndroid Build Coastguard Worker   uint32_t le = base::ByteSwapToLE32(k32BitTestData);
74*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
75*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitTestData, le);
76*635a8641SAndroid Build Coastguard Worker #else
77*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitSwappedTestData, le);
78*635a8641SAndroid Build Coastguard Worker #endif
79*635a8641SAndroid Build Coastguard Worker }
80*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,ByteSwapToLE64)81*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, ByteSwapToLE64) {
82*635a8641SAndroid Build Coastguard Worker   uint64_t le = base::ByteSwapToLE64(k64BitTestData);
83*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
84*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitTestData, le);
85*635a8641SAndroid Build Coastguard Worker #else
86*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitSwappedTestData, le);
87*635a8641SAndroid Build Coastguard Worker #endif
88*635a8641SAndroid Build Coastguard Worker }
89*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,NetToHost16)90*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, NetToHost16) {
91*635a8641SAndroid Build Coastguard Worker   uint16_t h = base::NetToHost16(k16BitTestData);
92*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
93*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitSwappedTestData, h);
94*635a8641SAndroid Build Coastguard Worker #else
95*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitTestData, h);
96*635a8641SAndroid Build Coastguard Worker #endif
97*635a8641SAndroid Build Coastguard Worker }
98*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,NetToHost32)99*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, NetToHost32) {
100*635a8641SAndroid Build Coastguard Worker   uint32_t h = base::NetToHost32(k32BitTestData);
101*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
102*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitSwappedTestData, h);
103*635a8641SAndroid Build Coastguard Worker #else
104*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitTestData, h);
105*635a8641SAndroid Build Coastguard Worker #endif
106*635a8641SAndroid Build Coastguard Worker }
107*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,NetToHost64)108*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, NetToHost64) {
109*635a8641SAndroid Build Coastguard Worker   uint64_t h = base::NetToHost64(k64BitTestData);
110*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
111*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitSwappedTestData, h);
112*635a8641SAndroid Build Coastguard Worker #else
113*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitTestData, h);
114*635a8641SAndroid Build Coastguard Worker #endif
115*635a8641SAndroid Build Coastguard Worker }
116*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,HostToNet16)117*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, HostToNet16) {
118*635a8641SAndroid Build Coastguard Worker   uint16_t n = base::HostToNet16(k16BitTestData);
119*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
120*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitSwappedTestData, n);
121*635a8641SAndroid Build Coastguard Worker #else
122*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k16BitTestData, n);
123*635a8641SAndroid Build Coastguard Worker #endif
124*635a8641SAndroid Build Coastguard Worker }
125*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,HostToNet32)126*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, HostToNet32) {
127*635a8641SAndroid Build Coastguard Worker   uint32_t n = base::HostToNet32(k32BitTestData);
128*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
129*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitSwappedTestData, n);
130*635a8641SAndroid Build Coastguard Worker #else
131*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k32BitTestData, n);
132*635a8641SAndroid Build Coastguard Worker #endif
133*635a8641SAndroid Build Coastguard Worker }
134*635a8641SAndroid Build Coastguard Worker 
TEST(ByteOrderTest,HostToNet64)135*635a8641SAndroid Build Coastguard Worker TEST(ByteOrderTest, HostToNet64) {
136*635a8641SAndroid Build Coastguard Worker   uint64_t n = base::HostToNet64(k64BitTestData);
137*635a8641SAndroid Build Coastguard Worker #if defined(ARCH_CPU_LITTLE_ENDIAN)
138*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitSwappedTestData, n);
139*635a8641SAndroid Build Coastguard Worker #else
140*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(k64BitTestData, n);
141*635a8641SAndroid Build Coastguard Worker #endif
142*635a8641SAndroid Build Coastguard Worker }
143