17e075ad0SGuillaume Chatelet //===-- Unittests for endian ----------------------------------------------===//
27e075ad0SGuillaume Chatelet //
37e075ad0SGuillaume Chatelet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47e075ad0SGuillaume Chatelet // See https://llvm.org/LICENSE.txt for license information.
57e075ad0SGuillaume Chatelet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67e075ad0SGuillaume Chatelet //
77e075ad0SGuillaume Chatelet //===----------------------------------------------------------------------===//
87e075ad0SGuillaume Chatelet 
97e075ad0SGuillaume Chatelet #include "src/__support/endian.h"
107e075ad0SGuillaume Chatelet #include "utils/UnitTest/Test.h"
117e075ad0SGuillaume Chatelet 
127e075ad0SGuillaume Chatelet namespace __llvm_libc {
137e075ad0SGuillaume Chatelet 
147e075ad0SGuillaume Chatelet struct LlvmLibcEndian : testing::Test {
check__llvm_libc::LlvmLibcEndian157e075ad0SGuillaume Chatelet   template <typename T> void check(const T original, const T swapped) {
167e075ad0SGuillaume Chatelet #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
17*1c92911eSMichael Jones     EXPECT_EQ(Endian::to_little_endian(original), original);
18*1c92911eSMichael Jones     EXPECT_EQ(Endian::to_big_endian(original), swapped);
197e075ad0SGuillaume Chatelet #endif
207e075ad0SGuillaume Chatelet #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
21*1c92911eSMichael Jones     EXPECT_EQ(Endian::to_big_endian(original), original);
22*1c92911eSMichael Jones     EXPECT_EQ(Endian::to_little_endian(original), swapped);
237e075ad0SGuillaume Chatelet #endif
247e075ad0SGuillaume Chatelet   }
257e075ad0SGuillaume Chatelet };
267e075ad0SGuillaume Chatelet 
TEST_F(LlvmLibcEndian,Field)277e075ad0SGuillaume Chatelet TEST_F(LlvmLibcEndian, Field) {
28*1c92911eSMichael Jones   EXPECT_EQ(Endian::IS_LITTLE, __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__);
29*1c92911eSMichael Jones   EXPECT_EQ(Endian::IS_BIG, __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__);
307e075ad0SGuillaume Chatelet }
317e075ad0SGuillaume Chatelet 
TEST_F(LlvmLibcEndian,uint8_t)327e075ad0SGuillaume Chatelet TEST_F(LlvmLibcEndian, uint8_t) {
332bfe1581SGuillaume Chatelet   const uint8_t original = uint8_t(0x12);
347e075ad0SGuillaume Chatelet   check(original, original);
357e075ad0SGuillaume Chatelet }
367e075ad0SGuillaume Chatelet 
TEST_F(LlvmLibcEndian,uint16_t)377e075ad0SGuillaume Chatelet TEST_F(LlvmLibcEndian, uint16_t) {
382bfe1581SGuillaume Chatelet   const uint16_t original = uint16_t(0x1234);
392bfe1581SGuillaume Chatelet   const uint16_t swapped = __builtin_bswap16(original);
407e075ad0SGuillaume Chatelet   check(original, swapped);
417e075ad0SGuillaume Chatelet }
427e075ad0SGuillaume Chatelet 
TEST_F(LlvmLibcEndian,uint32_t)437e075ad0SGuillaume Chatelet TEST_F(LlvmLibcEndian, uint32_t) {
442bfe1581SGuillaume Chatelet   const uint32_t original = uint32_t(0x12345678);
452bfe1581SGuillaume Chatelet   const uint32_t swapped = __builtin_bswap32(original);
467e075ad0SGuillaume Chatelet   check(original, swapped);
477e075ad0SGuillaume Chatelet }
487e075ad0SGuillaume Chatelet 
TEST_F(LlvmLibcEndian,uint64_t)497e075ad0SGuillaume Chatelet TEST_F(LlvmLibcEndian, uint64_t) {
502bfe1581SGuillaume Chatelet   const uint64_t original = uint64_t(0x123456789ABCDEF0);
512bfe1581SGuillaume Chatelet   const uint64_t swapped = __builtin_bswap64(original);
527e075ad0SGuillaume Chatelet   check(original, swapped);
537e075ad0SGuillaume Chatelet }
547e075ad0SGuillaume Chatelet 
557e075ad0SGuillaume Chatelet } // namespace __llvm_libc
56