scons: fix --gold-linker build after --as-needed
[gem5.git] / src / sim / byteswap.test.cc
1 /*
2 * Copyright (c) 2019 The Regents of the University of California
3 * All rights reserved
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Authors: Mahyar Samani
29 */
30
31 #include <gtest/gtest.h>
32
33 #include "sim/byteswap.hh"
34
35 TEST(ByteswapTest, swap_byte64)
36 {
37 EXPECT_EQ(0x0123456789abcdef, swap_byte64(0xefcdab8967452301));
38 EXPECT_EQ(0xfedcba9876543210, swap_byte64(0x1032547698badcfe));
39 EXPECT_EQ(0x0b1cb071b77141b1, swap_byte64(0xb14171b771b01c0b));
40 EXPECT_EQ(0x00000000ffffffff, swap_byte64(0xffffffff00000000));
41 EXPECT_EQ(0x5555555555555555, swap_byte64(0x5555555555555555));
42 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, swap_byte64(0xa0a0a0a0a0a0a0a0));
43 }
44
45 TEST(ByteswapTest, swap_byte32)
46 {
47 EXPECT_EQ(0x0123cdef, swap_byte32(0xefcd2301));
48 EXPECT_EQ(0xfedc3210, swap_byte32(0x1032dcfe));
49 EXPECT_EQ(0x0b1c41b1, swap_byte32(0xb1411c0b));
50 EXPECT_EQ(0x0000ffff, swap_byte32(0xffff0000));
51 EXPECT_EQ(0x55555555, swap_byte32(0x55555555));
52 EXPECT_EQ(0xa0a0a0a0, swap_byte32(0xa0a0a0a0));
53 }
54
55 TEST(ByteswapTest, swap_byte16)
56 {
57 EXPECT_EQ(0x01ef, swap_byte16(0xef01));
58 EXPECT_EQ(0xfe10, swap_byte16(0x10fe));
59 EXPECT_EQ(0x0bb1, swap_byte16(0xb10b));
60 EXPECT_EQ(0x00ff, swap_byte16(0xff00));
61 EXPECT_EQ(0x5555, swap_byte16(0x5555));
62 EXPECT_EQ(0xa0a0, swap_byte16(0xa0a0));
63 }
64
65 TEST(ByteswapTest, swap_byte)
66 {
67 EXPECT_EQ(0x0123456789abcdef, swap_byte((uint64_t)0xefcdab8967452301));
68 EXPECT_EQ(0xfedcba9876543210, swap_byte((uint64_t)0x1032547698badcfe));
69 EXPECT_EQ(0x0b1cb071b77141b1, swap_byte((uint64_t)0xb14171b771b01c0b));
70 EXPECT_EQ(0x00000000ffffffff, swap_byte((uint64_t)0xffffffff00000000));
71 EXPECT_EQ(0x5555555555555555, swap_byte((uint64_t)0x5555555555555555));
72 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, swap_byte((uint64_t)0xa0a0a0a0a0a0a0a0));
73 EXPECT_EQ(0x0123cdef, swap_byte((uint32_t)0xefcd2301));
74 EXPECT_EQ(0xfedc3210, swap_byte((uint32_t)0x1032dcfe));
75 EXPECT_EQ(0x0b1c41b1, swap_byte((uint32_t)0xb1411c0b));
76 EXPECT_EQ(0x0000ffff, swap_byte((uint32_t)0xffff0000));
77 EXPECT_EQ(0x55555555, swap_byte((uint32_t)0x55555555));
78 EXPECT_EQ(0xa0a0a0a0, swap_byte((uint32_t)0xa0a0a0a0));
79 EXPECT_EQ(0x01ef, swap_byte((uint16_t)0xef01));
80 EXPECT_EQ(0xfe10, swap_byte((uint16_t)0x10fe));
81 EXPECT_EQ(0x0bb1, swap_byte((uint16_t)0xb10b));
82 EXPECT_EQ(0x00ff, swap_byte((uint16_t)0xff00));
83 EXPECT_EQ(0x5555, swap_byte((uint16_t)0x5555));
84 EXPECT_EQ(0xa0a0, swap_byte((uint16_t)0xa0a0));
85 }
86
87 TEST(ByteswapTest, htog)
88 {
89 #if (defined(_BIG_ENDIAN)||!defined(_LITTLE_ENDIAN)) && BYTE_ORDER==BIG_ENDIAN
90 EXPECT_EQ(0xefcdab8967452301, htog((uint64_t)0xefcdab8967452301,
91 BigEndianByteOrder));
92 EXPECT_EQ(0x1032547698badcfe, htog((uint64_t)0x1032547698badcfe,
93 BigEndianByteOrder));
94 EXPECT_EQ(0xb14171b771b01c0b, htog((uint64_t)0xb14171b771b01c0b,
95 BigEndianByteOrder));
96 EXPECT_EQ(0xffffffff00000000, htog((uint64_t)0xffffffff00000000,
97 BigEndianByteOrder));
98 EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
99 BigEndianByteOrder));
100 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
101 BigEndianByteOrder));
102 EXPECT_EQ(0xefcd2301, htog((uint32_t)0xefcd2301, BigEndianByteOrder));
103 EXPECT_EQ(0x1032dcfe, htog((uint32_t)0x1032dcfe, BigEndianByteOrder));
104 EXPECT_EQ(0xb1411c0b, htog((uint32_t)0xb1411c0b, BigEndianByteOrder));
105 EXPECT_EQ(0xffff0000, htog((uint32_t)0xffff0000, BigEndianByteOrder));
106 EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, BigEndianByteOrder));
107 EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, BigEndianByteOrder));
108 EXPECT_EQ(0xef01, htog((uint16_t)0xef01, BigEndianByteOrder));
109 EXPECT_EQ(0x10fe, htog((uint16_t)0x10fe, BigEndianByteOrder));
110 EXPECT_EQ(0xb10b, htog((uint16_t)0xb10b, BigEndianByteOrder));
111 EXPECT_EQ(0xff00, htog((uint16_t)0xff00, BigEndianByteOrder));
112 EXPECT_EQ(0x5555, htog((uint16_t)0x5555, BigEndianByteOrder));
113 EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, BigEndianByteOrder));
114 EXPECT_EQ(0x0123456789abcdef, htog((uint64_t)0xefcdab8967452301,
115 LittleEndianByteOrder));
116 EXPECT_EQ(0xfedcba9876543210, htog((uint64_t)0x1032547698badcfe,
117 LittleEndianByteOrder));
118 EXPECT_EQ(0x0b1cb071b77141b1, htog((uint64_t)0xb14171b771b01c0b,
119 LittleEndianByteOrder));
120 EXPECT_EQ(0x00000000ffffffff, htog((uint64_t)0xffffffff00000000,
121 LittleEndianByteOrder));
122 EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
123 LittleEndianByteOrder));
124 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
125 LittleEndianByteOrder));
126 EXPECT_EQ(0x0123cdef, htog((uint32_t)0xefcd2301, LittleEndianByteOrder));
127 EXPECT_EQ(0xfedc3210, htog((uint32_t)0x1032dcfe, LittleEndianByteOrder));
128 EXPECT_EQ(0x0b1c41b1, htog((uint32_t)0xb1411c0b, LittleEndianByteOrder));
129 EXPECT_EQ(0x0000ffff, htog((uint32_t)0xffff0000, LittleEndianByteOrder));
130 EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, LittleEndianByteOrder));
131 EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, LittleEndianByteOrder));
132 EXPECT_EQ(0x01ef, htog((uint16_t)0xef01, LittleEndianByteOrder));
133 EXPECT_EQ(0xfe10, htog((uint16_t)0x10fe, LittleEndianByteOrder));
134 EXPECT_EQ(0x0bb1, htog((uint16_t)0xb10b, LittleEndianByteOrder));
135 EXPECT_EQ(0x00ff, htog((uint16_t)0xff00, LittleEndianByteOrder));
136 EXPECT_EQ(0x5555, htog((uint16_t)0x5555, LittleEndianByteOrder));
137 EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, LittleEndianByteOrder));
138 #elif defined(_LITTLE_ENDIAN) || BYTE_ORDER==LITTLE_ENDIAN
139 EXPECT_EQ(0x0123456789abcdef, htog((uint64_t)0xefcdab8967452301,
140 BigEndianByteOrder));
141 EXPECT_EQ(0xfedcba9876543210, htog((uint64_t)0x1032547698badcfe,
142 BigEndianByteOrder));
143 EXPECT_EQ(0x0b1cb071b77141b1, htog((uint64_t)0xb14171b771b01c0b,
144 BigEndianByteOrder));
145 EXPECT_EQ(0x00000000ffffffff, htog((uint64_t)0xffffffff00000000,
146 BigEndianByteOrder));
147 EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
148 BigEndianByteOrder));
149 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
150 BigEndianByteOrder));
151 EXPECT_EQ(0x0123cdef, htog((uint32_t)0xefcd2301, BigEndianByteOrder));
152 EXPECT_EQ(0xfedc3210, htog((uint32_t)0x1032dcfe, BigEndianByteOrder));
153 EXPECT_EQ(0x0b1c41b1, htog((uint32_t)0xb1411c0b, BigEndianByteOrder));
154 EXPECT_EQ(0x0000ffff, htog((uint32_t)0xffff0000, BigEndianByteOrder));
155 EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, BigEndianByteOrder));
156 EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, BigEndianByteOrder));
157 EXPECT_EQ(0x01ef, htog((uint16_t)0xef01, BigEndianByteOrder));
158 EXPECT_EQ(0xfe10, htog((uint16_t)0x10fe, BigEndianByteOrder));
159 EXPECT_EQ(0x0bb1, htog((uint16_t)0xb10b, BigEndianByteOrder));
160 EXPECT_EQ(0x00ff, htog((uint16_t)0xff00, BigEndianByteOrder));
161 EXPECT_EQ(0x5555, htog((uint16_t)0x5555, BigEndianByteOrder));
162 EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, BigEndianByteOrder));
163 EXPECT_EQ(0xefcdab8967452301, htog((uint64_t)0xefcdab8967452301,
164 LittleEndianByteOrder));
165 EXPECT_EQ(0x1032547698badcfe, htog((uint64_t)0x1032547698badcfe,
166 LittleEndianByteOrder));
167 EXPECT_EQ(0xb14171b771b01c0b, htog((uint64_t)0xb14171b771b01c0b,
168 LittleEndianByteOrder));
169 EXPECT_EQ(0xffffffff00000000, htog((uint64_t)0xffffffff00000000,
170 LittleEndianByteOrder));
171 EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
172 LittleEndianByteOrder));
173 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
174 LittleEndianByteOrder));
175 EXPECT_EQ(0xefcd2301, htog((uint32_t)0xefcd2301, LittleEndianByteOrder));
176 EXPECT_EQ(0x1032dcfe, htog((uint32_t)0x1032dcfe, LittleEndianByteOrder));
177 EXPECT_EQ(0xb1411c0b, htog((uint32_t)0xb1411c0b, LittleEndianByteOrder));
178 EXPECT_EQ(0xffff0000, htog((uint32_t)0xffff0000, LittleEndianByteOrder));
179 EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, LittleEndianByteOrder));
180 EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, LittleEndianByteOrder));
181 EXPECT_EQ(0xef01, htog((uint16_t)0xef01, LittleEndianByteOrder));
182 EXPECT_EQ(0x10fe, htog((uint16_t)0x10fe, LittleEndianByteOrder));
183 EXPECT_EQ(0xb10b, htog((uint16_t)0xb10b, LittleEndianByteOrder));
184 EXPECT_EQ(0xff00, htog((uint16_t)0xff00, LittleEndianByteOrder));
185 EXPECT_EQ(0x5555, htog((uint16_t)0x5555, LittleEndianByteOrder));
186 EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, LittleEndianByteOrder));
187 #else
188 #error Invalid Endianess
189 #endif
190 }
191
192 TEST(ByteswapTest, gtoh)
193 {
194 #if (defined(_BIG_ENDIAN)||!defined(_LITTLE_ENDIAN)) && BYTE_ORDER==BIG_ENDIAN
195 EXPECT_EQ(0xefcdab8967452301, gtoh((uint64_t)0xefcdab8967452301,
196 BigEndianByteOrder));
197 EXPECT_EQ(0x1032547698badcfe, gtoh((uint64_t)0x1032547698badcfe,
198 BigEndianByteOrder));
199 EXPECT_EQ(0xb14171b771b01c0b, gtoh((uint64_t)0xb14171b771b01c0b,
200 BigEndianByteOrder));
201 EXPECT_EQ(0xffffffff00000000, gtoh((uint64_t)0xffffffff00000000,
202 BigEndianByteOrder));
203 EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
204 BigEndianByteOrder));
205 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
206 BigEndianByteOrder));
207 EXPECT_EQ(0xefcd2301, gtoh((uint32_t)0xefcd2301, BigEndianByteOrder));
208 EXPECT_EQ(0x1032dcfe, gtoh((uint32_t)0x1032dcfe, BigEndianByteOrder));
209 EXPECT_EQ(0xb1411c0b, gtoh((uint32_t)0xb1411c0b, BigEndianByteOrder));
210 EXPECT_EQ(0xffff0000, gtoh((uint32_t)0xffff0000, BigEndianByteOrder));
211 EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, BigEndianByteOrder));
212 EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, BigEndianByteOrder));
213 EXPECT_EQ(0xef01, gtoh((uint16_t)0xef01, BigEndianByteOrder));
214 EXPECT_EQ(0x10fe, gtoh((uint16_t)0x10fe, BigEndianByteOrder));
215 EXPECT_EQ(0xb10b, gtoh((uint16_t)0xb10b, BigEndianByteOrder));
216 EXPECT_EQ(0xff00, gtoh((uint16_t)0xff00, BigEndianByteOrder));
217 EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, BigEndianByteOrder));
218 EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, BigEndianByteOrder));
219 EXPECT_EQ(0x0123456789abcdef, gtoh((uint64_t)0xefcdab8967452301,
220 LittleEndianByteOrder));
221 EXPECT_EQ(0xfedcba9876543210, gtoh((uint64_t)0x1032547698badcfe,
222 LittleEndianByteOrder));
223 EXPECT_EQ(0x0b1cb071b77141b1, gtoh((uint64_t)0xb14171b771b01c0b,
224 LittleEndianByteOrder));
225 EXPECT_EQ(0x00000000ffffffff, gtoh((uint64_t)0xffffffff00000000,
226 LittleEndianByteOrder));
227 EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
228 LittleEndianByteOrder));
229 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
230 LittleEndianByteOrder));
231 EXPECT_EQ(0x0123cdef, gtoh((uint32_t)0xefcd2301, LittleEndianByteOrder));
232 EXPECT_EQ(0xfedc3210, gtoh((uint32_t)0x1032dcfe, LittleEndianByteOrder));
233 EXPECT_EQ(0x0b1c41b1, gtoh((uint32_t)0xb1411c0b, LittleEndianByteOrder));
234 EXPECT_EQ(0x0000ffff, gtoh((uint32_t)0xffff0000, LittleEndianByteOrder));
235 EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, LittleEndianByteOrder));
236 EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, LittleEndianByteOrder));
237 EXPECT_EQ(0x01ef, gtoh((uint16_t)0xef01, LittleEndianByteOrder));
238 EXPECT_EQ(0xfe10, gtoh((uint16_t)0x10fe, LittleEndianByteOrder));
239 EXPECT_EQ(0x0bb1, gtoh((uint16_t)0xb10b, LittleEndianByteOrder));
240 EXPECT_EQ(0x00ff, gtoh((uint16_t)0xff00, LittleEndianByteOrder));
241 EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, LittleEndianByteOrder));
242 EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, LittleEndianByteOrder));
243 #elif defined(_LITTLE_ENDIAN) || BYTE_ORDER==LITTLE_ENDIAN
244 EXPECT_EQ(0x0123456789abcdef, gtoh((uint64_t)0xefcdab8967452301,
245 BigEndianByteOrder));
246 EXPECT_EQ(0xfedcba9876543210, gtoh((uint64_t)0x1032547698badcfe,
247 BigEndianByteOrder));
248 EXPECT_EQ(0x0b1cb071b77141b1, gtoh((uint64_t)0xb14171b771b01c0b,
249 BigEndianByteOrder));
250 EXPECT_EQ(0x00000000ffffffff, gtoh((uint64_t)0xffffffff00000000,
251 BigEndianByteOrder));
252 EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
253 BigEndianByteOrder));
254 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
255 BigEndianByteOrder));
256 EXPECT_EQ(0x0123cdef, gtoh((uint32_t)0xefcd2301, BigEndianByteOrder));
257 EXPECT_EQ(0xfedc3210, gtoh((uint32_t)0x1032dcfe, BigEndianByteOrder));
258 EXPECT_EQ(0x0b1c41b1, gtoh((uint32_t)0xb1411c0b, BigEndianByteOrder));
259 EXPECT_EQ(0x0000ffff, gtoh((uint32_t)0xffff0000, BigEndianByteOrder));
260 EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, BigEndianByteOrder));
261 EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, BigEndianByteOrder));
262 EXPECT_EQ(0x01ef, gtoh((uint16_t)0xef01, BigEndianByteOrder));
263 EXPECT_EQ(0xfe10, gtoh((uint16_t)0x10fe, BigEndianByteOrder));
264 EXPECT_EQ(0x0bb1, gtoh((uint16_t)0xb10b, BigEndianByteOrder));
265 EXPECT_EQ(0x00ff, gtoh((uint16_t)0xff00, BigEndianByteOrder));
266 EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, BigEndianByteOrder));
267 EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, BigEndianByteOrder));
268 EXPECT_EQ(0xefcdab8967452301, gtoh((uint64_t)0xefcdab8967452301,
269 LittleEndianByteOrder));
270 EXPECT_EQ(0x1032547698badcfe, gtoh((uint64_t)0x1032547698badcfe,
271 LittleEndianByteOrder));
272 EXPECT_EQ(0xb14171b771b01c0b, gtoh((uint64_t)0xb14171b771b01c0b,
273 LittleEndianByteOrder));
274 EXPECT_EQ(0xffffffff00000000, gtoh((uint64_t)0xffffffff00000000,
275 LittleEndianByteOrder));
276 EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
277 LittleEndianByteOrder));
278 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
279 LittleEndianByteOrder));
280 EXPECT_EQ(0xefcd2301, gtoh((uint32_t)0xefcd2301, LittleEndianByteOrder));
281 EXPECT_EQ(0x1032dcfe, gtoh((uint32_t)0x1032dcfe, LittleEndianByteOrder));
282 EXPECT_EQ(0xb1411c0b, gtoh((uint32_t)0xb1411c0b, LittleEndianByteOrder));
283 EXPECT_EQ(0xffff0000, gtoh((uint32_t)0xffff0000, LittleEndianByteOrder));
284 EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, LittleEndianByteOrder));
285 EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, LittleEndianByteOrder));
286 EXPECT_EQ(0xef01, gtoh((uint16_t)0xef01, LittleEndianByteOrder));
287 EXPECT_EQ(0x10fe, gtoh((uint16_t)0x10fe, LittleEndianByteOrder));
288 EXPECT_EQ(0xb10b, gtoh((uint16_t)0xb10b, LittleEndianByteOrder));
289 EXPECT_EQ(0xff00, gtoh((uint16_t)0xff00, LittleEndianByteOrder));
290 EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, LittleEndianByteOrder));
291 EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, LittleEndianByteOrder));
292 #else
293 #error Invalid Endianess
294 #endif
295 }
296
297 TEST(ByteswapTest, betole)
298 {
299 EXPECT_EQ(0x0123456789abcdef, betole((uint64_t)0xefcdab8967452301));
300 EXPECT_EQ(0xfedcba9876543210, betole((uint64_t)0x1032547698badcfe));
301 EXPECT_EQ(0x0b1cb071b77141b1, betole((uint64_t)0xb14171b771b01c0b));
302 EXPECT_EQ(0x00000000ffffffff, betole((uint64_t)0xffffffff00000000));
303 EXPECT_EQ(0x5555555555555555, betole((uint64_t)0x5555555555555555));
304 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, betole((uint64_t)0xa0a0a0a0a0a0a0a0));
305 EXPECT_EQ(0x0123cdef, betole((uint32_t)0xefcd2301));
306 EXPECT_EQ(0xfedc3210, betole((uint32_t)0x1032dcfe));
307 EXPECT_EQ(0x0b1c41b1, betole((uint32_t)0xb1411c0b));
308 EXPECT_EQ(0x0000ffff, betole((uint32_t)0xffff0000));
309 EXPECT_EQ(0x55555555, betole((uint32_t)0x55555555));
310 EXPECT_EQ(0xa0a0a0a0, betole((uint32_t)0xa0a0a0a0));
311 EXPECT_EQ(0x01ef, betole((uint16_t)0xef01));
312 EXPECT_EQ(0xfe10, betole((uint16_t)0x10fe));
313 EXPECT_EQ(0x0bb1, betole((uint16_t)0xb10b));
314 EXPECT_EQ(0x00ff, betole((uint16_t)0xff00));
315 EXPECT_EQ(0x5555, betole((uint16_t)0x5555));
316 EXPECT_EQ(0xa0a0, betole((uint16_t)0xa0a0));
317 }
318
319 TEST(ByteswapTest, letobe)
320 {
321 EXPECT_EQ(0x0123456789abcdef, letobe((uint64_t)0xefcdab8967452301));
322 EXPECT_EQ(0xfedcba9876543210, letobe((uint64_t)0x1032547698badcfe));
323 EXPECT_EQ(0x0b1cb071b77141b1, letobe((uint64_t)0xb14171b771b01c0b));
324 EXPECT_EQ(0x00000000ffffffff, letobe((uint64_t)0xffffffff00000000));
325 EXPECT_EQ(0x5555555555555555, letobe((uint64_t)0x5555555555555555));
326 EXPECT_EQ(0xa0a0a0a0a0a0a0a0, letobe((uint64_t)0xa0a0a0a0a0a0a0a0));
327 EXPECT_EQ(0x0123cdef, letobe((uint32_t)0xefcd2301));
328 EXPECT_EQ(0xfedc3210, letobe((uint32_t)0x1032dcfe));
329 EXPECT_EQ(0x0b1c41b1, letobe((uint32_t)0xb1411c0b));
330 EXPECT_EQ(0x0000ffff, letobe((uint32_t)0xffff0000));
331 EXPECT_EQ(0x55555555, letobe((uint32_t)0x55555555));
332 EXPECT_EQ(0xa0a0a0a0, letobe((uint32_t)0xa0a0a0a0));
333 EXPECT_EQ(0x01ef, letobe((uint16_t)0xef01));
334 EXPECT_EQ(0xfe10, letobe((uint16_t)0x10fe));
335 EXPECT_EQ(0x0bb1, letobe((uint16_t)0xb10b));
336 EXPECT_EQ(0x00ff, letobe((uint16_t)0xff00));
337 EXPECT_EQ(0x5555, letobe((uint16_t)0x5555));
338 EXPECT_EQ(0xa0a0, letobe((uint16_t)0xa0a0));
339 }