xref: /llvm-project/libc/test/src/__support/endian_internal_test.cpp (revision 95b680e4c353d479fbfb96adb39696042c005e99)
1*95b680e4SDaniel Thornburgh //===-- Unittests for endian ----------------------------------------------===//
2*95b680e4SDaniel Thornburgh //
3*95b680e4SDaniel Thornburgh // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*95b680e4SDaniel Thornburgh // See https://llvm.org/LICENSE.txt for license information.
5*95b680e4SDaniel Thornburgh // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*95b680e4SDaniel Thornburgh //
7*95b680e4SDaniel Thornburgh //===----------------------------------------------------------------------===//
8*95b680e4SDaniel Thornburgh 
9*95b680e4SDaniel Thornburgh #include "src/__support/endian_internal.h"
10*95b680e4SDaniel Thornburgh #include "src/__support/macros/config.h"
11*95b680e4SDaniel Thornburgh #include "test/UnitTest/Test.h"
12*95b680e4SDaniel Thornburgh 
13*95b680e4SDaniel Thornburgh namespace LIBC_NAMESPACE_DECL {
14*95b680e4SDaniel Thornburgh 
15*95b680e4SDaniel Thornburgh struct LlvmLibcEndian : testing::Test {
16*95b680e4SDaniel Thornburgh   template <typename T> void check(const T original, const T swapped) {
17*95b680e4SDaniel Thornburgh #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
18*95b680e4SDaniel Thornburgh     EXPECT_EQ(Endian::to_little_endian(original), original);
19*95b680e4SDaniel Thornburgh     EXPECT_EQ(Endian::to_big_endian(original), swapped);
20*95b680e4SDaniel Thornburgh #endif
21*95b680e4SDaniel Thornburgh #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
22*95b680e4SDaniel Thornburgh     EXPECT_EQ(Endian::to_big_endian(original), original);
23*95b680e4SDaniel Thornburgh     EXPECT_EQ(Endian::to_little_endian(original), swapped);
24*95b680e4SDaniel Thornburgh #endif
25*95b680e4SDaniel Thornburgh   }
26*95b680e4SDaniel Thornburgh };
27*95b680e4SDaniel Thornburgh 
28*95b680e4SDaniel Thornburgh TEST_F(LlvmLibcEndian, Field) {
29*95b680e4SDaniel Thornburgh   EXPECT_EQ(Endian::IS_LITTLE, __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__);
30*95b680e4SDaniel Thornburgh   EXPECT_EQ(Endian::IS_BIG, __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__);
31*95b680e4SDaniel Thornburgh }
32*95b680e4SDaniel Thornburgh 
33*95b680e4SDaniel Thornburgh TEST_F(LlvmLibcEndian, uint8_t) {
34*95b680e4SDaniel Thornburgh   const uint8_t original = uint8_t(0x12);
35*95b680e4SDaniel Thornburgh   check(original, original);
36*95b680e4SDaniel Thornburgh }
37*95b680e4SDaniel Thornburgh 
38*95b680e4SDaniel Thornburgh TEST_F(LlvmLibcEndian, uint16_t) {
39*95b680e4SDaniel Thornburgh   const uint16_t original = uint16_t(0x1234);
40*95b680e4SDaniel Thornburgh   const uint16_t swapped = __builtin_bswap16(original);
41*95b680e4SDaniel Thornburgh   check(original, swapped);
42*95b680e4SDaniel Thornburgh }
43*95b680e4SDaniel Thornburgh 
44*95b680e4SDaniel Thornburgh TEST_F(LlvmLibcEndian, uint32_t) {
45*95b680e4SDaniel Thornburgh   const uint32_t original = uint32_t(0x12345678);
46*95b680e4SDaniel Thornburgh   const uint32_t swapped = __builtin_bswap32(original);
47*95b680e4SDaniel Thornburgh   check(original, swapped);
48*95b680e4SDaniel Thornburgh }
49*95b680e4SDaniel Thornburgh 
50*95b680e4SDaniel Thornburgh TEST_F(LlvmLibcEndian, uint64_t) {
51*95b680e4SDaniel Thornburgh   const uint64_t original = uint64_t(0x123456789ABCDEF0);
52*95b680e4SDaniel Thornburgh   const uint64_t swapped = __builtin_bswap64(original);
53*95b680e4SDaniel Thornburgh   check(original, swapped);
54*95b680e4SDaniel Thornburgh }
55*95b680e4SDaniel Thornburgh 
56*95b680e4SDaniel Thornburgh } // namespace LIBC_NAMESPACE_DECL
57