blob: 0aacc3f9c18ae8611d4d08fbc143889133c708e8 [file] [log] [blame]
/*
* Copyright (c) 2019 The Regents of the University of California
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met: redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer;
* redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution;
* neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <gtest/gtest.h>
#include "sim/byteswap.hh"
using namespace gem5;
TEST(ByteswapTest, swap_byte64)
{
EXPECT_EQ(0x0123456789abcdef, swap_byte64(0xefcdab8967452301));
EXPECT_EQ(0xfedcba9876543210, swap_byte64(0x1032547698badcfe));
EXPECT_EQ(0x0b1cb071b77141b1, swap_byte64(0xb14171b771b01c0b));
EXPECT_EQ(0x00000000ffffffff, swap_byte64(0xffffffff00000000));
EXPECT_EQ(0x5555555555555555, swap_byte64(0x5555555555555555));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, swap_byte64(0xa0a0a0a0a0a0a0a0));
}
TEST(ByteswapTest, swap_byte32)
{
EXPECT_EQ(0x0123cdef, swap_byte32(0xefcd2301));
EXPECT_EQ(0xfedc3210, swap_byte32(0x1032dcfe));
EXPECT_EQ(0x0b1c41b1, swap_byte32(0xb1411c0b));
EXPECT_EQ(0x0000ffff, swap_byte32(0xffff0000));
EXPECT_EQ(0x55555555, swap_byte32(0x55555555));
EXPECT_EQ(0xa0a0a0a0, swap_byte32(0xa0a0a0a0));
}
TEST(ByteswapTest, swap_byte16)
{
EXPECT_EQ(0x01ef, swap_byte16(0xef01));
EXPECT_EQ(0xfe10, swap_byte16(0x10fe));
EXPECT_EQ(0x0bb1, swap_byte16(0xb10b));
EXPECT_EQ(0x00ff, swap_byte16(0xff00));
EXPECT_EQ(0x5555, swap_byte16(0x5555));
EXPECT_EQ(0xa0a0, swap_byte16(0xa0a0));
}
TEST(ByteswapTest, swap_byte)
{
EXPECT_EQ(0x0123456789abcdef, swap_byte((uint64_t)0xefcdab8967452301));
EXPECT_EQ(0xfedcba9876543210, swap_byte((uint64_t)0x1032547698badcfe));
EXPECT_EQ(0x0b1cb071b77141b1, swap_byte((uint64_t)0xb14171b771b01c0b));
EXPECT_EQ(0x00000000ffffffff, swap_byte((uint64_t)0xffffffff00000000));
EXPECT_EQ(0x5555555555555555, swap_byte((uint64_t)0x5555555555555555));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, swap_byte((uint64_t)0xa0a0a0a0a0a0a0a0));
EXPECT_EQ(0x0123cdef, swap_byte((uint32_t)0xefcd2301));
EXPECT_EQ(0xfedc3210, swap_byte((uint32_t)0x1032dcfe));
EXPECT_EQ(0x0b1c41b1, swap_byte((uint32_t)0xb1411c0b));
EXPECT_EQ(0x0000ffff, swap_byte((uint32_t)0xffff0000));
EXPECT_EQ(0x55555555, swap_byte((uint32_t)0x55555555));
EXPECT_EQ(0xa0a0a0a0, swap_byte((uint32_t)0xa0a0a0a0));
EXPECT_EQ(0x01ef, swap_byte((uint16_t)0xef01));
EXPECT_EQ(0xfe10, swap_byte((uint16_t)0x10fe));
EXPECT_EQ(0x0bb1, swap_byte((uint16_t)0xb10b));
EXPECT_EQ(0x00ff, swap_byte((uint16_t)0xff00));
EXPECT_EQ(0x5555, swap_byte((uint16_t)0x5555));
EXPECT_EQ(0xa0a0, swap_byte((uint16_t)0xa0a0));
}
TEST(ByteswapTest, htog)
{
#if (defined(_BIG_ENDIAN)||!defined(_LITTLE_ENDIAN)) && BYTE_ORDER==BIG_ENDIAN
EXPECT_EQ(0xefcdab8967452301, htog((uint64_t)0xefcdab8967452301,
ByteOrder::big));
EXPECT_EQ(0x1032547698badcfe, htog((uint64_t)0x1032547698badcfe,
ByteOrder::big));
EXPECT_EQ(0xb14171b771b01c0b, htog((uint64_t)0xb14171b771b01c0b,
ByteOrder::big));
EXPECT_EQ(0xffffffff00000000, htog((uint64_t)0xffffffff00000000,
ByteOrder::big));
EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::big));
EXPECT_EQ(0xefcd2301, htog((uint32_t)0xefcd2301, ByteOrder::big));
EXPECT_EQ(0x1032dcfe, htog((uint32_t)0x1032dcfe, ByteOrder::big));
EXPECT_EQ(0xb1411c0b, htog((uint32_t)0xb1411c0b, ByteOrder::big));
EXPECT_EQ(0xffff0000, htog((uint32_t)0xffff0000, ByteOrder::big));
EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, ByteOrder::big));
EXPECT_EQ(0xef01, htog((uint16_t)0xef01, ByteOrder::big));
EXPECT_EQ(0x10fe, htog((uint16_t)0x10fe, ByteOrder::big));
EXPECT_EQ(0xb10b, htog((uint16_t)0xb10b, ByteOrder::big));
EXPECT_EQ(0xff00, htog((uint16_t)0xff00, ByteOrder::big));
EXPECT_EQ(0x5555, htog((uint16_t)0x5555, ByteOrder::big));
EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, ByteOrder::big));
EXPECT_EQ(0x0123456789abcdef, htog((uint64_t)0xefcdab8967452301,
ByteOrder::little));
EXPECT_EQ(0xfedcba9876543210, htog((uint64_t)0x1032547698badcfe,
ByteOrder::little));
EXPECT_EQ(0x0b1cb071b77141b1, htog((uint64_t)0xb14171b771b01c0b,
ByteOrder::little));
EXPECT_EQ(0x00000000ffffffff, htog((uint64_t)0xffffffff00000000,
ByteOrder::little));
EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::little));
EXPECT_EQ(0x0123cdef, htog((uint32_t)0xefcd2301, ByteOrder::little));
EXPECT_EQ(0xfedc3210, htog((uint32_t)0x1032dcfe, ByteOrder::little));
EXPECT_EQ(0x0b1c41b1, htog((uint32_t)0xb1411c0b, ByteOrder::little));
EXPECT_EQ(0x0000ffff, htog((uint32_t)0xffff0000, ByteOrder::little));
EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, ByteOrder::little));
EXPECT_EQ(0x01ef, htog((uint16_t)0xef01, ByteOrder::little));
EXPECT_EQ(0xfe10, htog((uint16_t)0x10fe, ByteOrder::little));
EXPECT_EQ(0x0bb1, htog((uint16_t)0xb10b, ByteOrder::little));
EXPECT_EQ(0x00ff, htog((uint16_t)0xff00, ByteOrder::little));
EXPECT_EQ(0x5555, htog((uint16_t)0x5555, ByteOrder::little));
EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, ByteOrder::little));
#elif defined(_LITTLE_ENDIAN) || BYTE_ORDER==LITTLE_ENDIAN
EXPECT_EQ(0x0123456789abcdef, htog((uint64_t)0xefcdab8967452301,
ByteOrder::big));
EXPECT_EQ(0xfedcba9876543210, htog((uint64_t)0x1032547698badcfe,
ByteOrder::big));
EXPECT_EQ(0x0b1cb071b77141b1, htog((uint64_t)0xb14171b771b01c0b,
ByteOrder::big));
EXPECT_EQ(0x00000000ffffffff, htog((uint64_t)0xffffffff00000000,
ByteOrder::big));
EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::big));
EXPECT_EQ(0x0123cdef, htog((uint32_t)0xefcd2301, ByteOrder::big));
EXPECT_EQ(0xfedc3210, htog((uint32_t)0x1032dcfe, ByteOrder::big));
EXPECT_EQ(0x0b1c41b1, htog((uint32_t)0xb1411c0b, ByteOrder::big));
EXPECT_EQ(0x0000ffff, htog((uint32_t)0xffff0000, ByteOrder::big));
EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, ByteOrder::big));
EXPECT_EQ(0x01ef, htog((uint16_t)0xef01, ByteOrder::big));
EXPECT_EQ(0xfe10, htog((uint16_t)0x10fe, ByteOrder::big));
EXPECT_EQ(0x0bb1, htog((uint16_t)0xb10b, ByteOrder::big));
EXPECT_EQ(0x00ff, htog((uint16_t)0xff00, ByteOrder::big));
EXPECT_EQ(0x5555, htog((uint16_t)0x5555, ByteOrder::big));
EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, ByteOrder::big));
EXPECT_EQ(0xefcdab8967452301, htog((uint64_t)0xefcdab8967452301,
ByteOrder::little));
EXPECT_EQ(0x1032547698badcfe, htog((uint64_t)0x1032547698badcfe,
ByteOrder::little));
EXPECT_EQ(0xb14171b771b01c0b, htog((uint64_t)0xb14171b771b01c0b,
ByteOrder::little));
EXPECT_EQ(0xffffffff00000000, htog((uint64_t)0xffffffff00000000,
ByteOrder::little));
EXPECT_EQ(0x5555555555555555, htog((uint64_t)0x5555555555555555,
ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, htog((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::little));
EXPECT_EQ(0xefcd2301, htog((uint32_t)0xefcd2301, ByteOrder::little));
EXPECT_EQ(0x1032dcfe, htog((uint32_t)0x1032dcfe, ByteOrder::little));
EXPECT_EQ(0xb1411c0b, htog((uint32_t)0xb1411c0b, ByteOrder::little));
EXPECT_EQ(0xffff0000, htog((uint32_t)0xffff0000, ByteOrder::little));
EXPECT_EQ(0x55555555, htog((uint32_t)0x55555555, ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0, htog((uint32_t)0xa0a0a0a0, ByteOrder::little));
EXPECT_EQ(0xef01, htog((uint16_t)0xef01, ByteOrder::little));
EXPECT_EQ(0x10fe, htog((uint16_t)0x10fe, ByteOrder::little));
EXPECT_EQ(0xb10b, htog((uint16_t)0xb10b, ByteOrder::little));
EXPECT_EQ(0xff00, htog((uint16_t)0xff00, ByteOrder::little));
EXPECT_EQ(0x5555, htog((uint16_t)0x5555, ByteOrder::little));
EXPECT_EQ(0xa0a0, htog((uint16_t)0xa0a0, ByteOrder::little));
#else
#error Invalid Endianess
#endif
}
TEST(ByteswapTest, gtoh)
{
#if (defined(_BIG_ENDIAN)||!defined(_LITTLE_ENDIAN)) && BYTE_ORDER==BIG_ENDIAN
EXPECT_EQ(0xefcdab8967452301, gtoh((uint64_t)0xefcdab8967452301,
ByteOrder::big));
EXPECT_EQ(0x1032547698badcfe, gtoh((uint64_t)0x1032547698badcfe,
ByteOrder::big));
EXPECT_EQ(0xb14171b771b01c0b, gtoh((uint64_t)0xb14171b771b01c0b,
ByteOrder::big));
EXPECT_EQ(0xffffffff00000000, gtoh((uint64_t)0xffffffff00000000,
ByteOrder::big));
EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::big));
EXPECT_EQ(0xefcd2301, gtoh((uint32_t)0xefcd2301, ByteOrder::big));
EXPECT_EQ(0x1032dcfe, gtoh((uint32_t)0x1032dcfe, ByteOrder::big));
EXPECT_EQ(0xb1411c0b, gtoh((uint32_t)0xb1411c0b, ByteOrder::big));
EXPECT_EQ(0xffff0000, gtoh((uint32_t)0xffff0000, ByteOrder::big));
EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, ByteOrder::big));
EXPECT_EQ(0xef01, gtoh((uint16_t)0xef01, ByteOrder::big));
EXPECT_EQ(0x10fe, gtoh((uint16_t)0x10fe, ByteOrder::big));
EXPECT_EQ(0xb10b, gtoh((uint16_t)0xb10b, ByteOrder::big));
EXPECT_EQ(0xff00, gtoh((uint16_t)0xff00, ByteOrder::big));
EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, ByteOrder::big));
EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, ByteOrder::big));
EXPECT_EQ(0x0123456789abcdef, gtoh((uint64_t)0xefcdab8967452301,
ByteOrder::little));
EXPECT_EQ(0xfedcba9876543210, gtoh((uint64_t)0x1032547698badcfe,
ByteOrder::little));
EXPECT_EQ(0x0b1cb071b77141b1, gtoh((uint64_t)0xb14171b771b01c0b,
ByteOrder::little));
EXPECT_EQ(0x00000000ffffffff, gtoh((uint64_t)0xffffffff00000000,
ByteOrder::little));
EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::little));
EXPECT_EQ(0x0123cdef, gtoh((uint32_t)0xefcd2301, ByteOrder::little));
EXPECT_EQ(0xfedc3210, gtoh((uint32_t)0x1032dcfe, ByteOrder::little));
EXPECT_EQ(0x0b1c41b1, gtoh((uint32_t)0xb1411c0b, ByteOrder::little));
EXPECT_EQ(0x0000ffff, gtoh((uint32_t)0xffff0000, ByteOrder::little));
EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, ByteOrder::little));
EXPECT_EQ(0x01ef, gtoh((uint16_t)0xef01, ByteOrder::little));
EXPECT_EQ(0xfe10, gtoh((uint16_t)0x10fe, ByteOrder::little));
EXPECT_EQ(0x0bb1, gtoh((uint16_t)0xb10b, ByteOrder::little));
EXPECT_EQ(0x00ff, gtoh((uint16_t)0xff00, ByteOrder::little));
EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, ByteOrder::little));
EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, ByteOrder::little));
#elif defined(_LITTLE_ENDIAN) || BYTE_ORDER==LITTLE_ENDIAN
EXPECT_EQ(0x0123456789abcdef, gtoh((uint64_t)0xefcdab8967452301,
ByteOrder::big));
EXPECT_EQ(0xfedcba9876543210, gtoh((uint64_t)0x1032547698badcfe,
ByteOrder::big));
EXPECT_EQ(0x0b1cb071b77141b1, gtoh((uint64_t)0xb14171b771b01c0b,
ByteOrder::big));
EXPECT_EQ(0x00000000ffffffff, gtoh((uint64_t)0xffffffff00000000,
ByteOrder::big));
EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::big));
EXPECT_EQ(0x0123cdef, gtoh((uint32_t)0xefcd2301, ByteOrder::big));
EXPECT_EQ(0xfedc3210, gtoh((uint32_t)0x1032dcfe, ByteOrder::big));
EXPECT_EQ(0x0b1c41b1, gtoh((uint32_t)0xb1411c0b, ByteOrder::big));
EXPECT_EQ(0x0000ffff, gtoh((uint32_t)0xffff0000, ByteOrder::big));
EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, ByteOrder::big));
EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, ByteOrder::big));
EXPECT_EQ(0x01ef, gtoh((uint16_t)0xef01, ByteOrder::big));
EXPECT_EQ(0xfe10, gtoh((uint16_t)0x10fe, ByteOrder::big));
EXPECT_EQ(0x0bb1, gtoh((uint16_t)0xb10b, ByteOrder::big));
EXPECT_EQ(0x00ff, gtoh((uint16_t)0xff00, ByteOrder::big));
EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, ByteOrder::big));
EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, ByteOrder::big));
EXPECT_EQ(0xefcdab8967452301, gtoh((uint64_t)0xefcdab8967452301,
ByteOrder::little));
EXPECT_EQ(0x1032547698badcfe, gtoh((uint64_t)0x1032547698badcfe,
ByteOrder::little));
EXPECT_EQ(0xb14171b771b01c0b, gtoh((uint64_t)0xb14171b771b01c0b,
ByteOrder::little));
EXPECT_EQ(0xffffffff00000000, gtoh((uint64_t)0xffffffff00000000,
ByteOrder::little));
EXPECT_EQ(0x5555555555555555, gtoh((uint64_t)0x5555555555555555,
ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, gtoh((uint64_t)0xa0a0a0a0a0a0a0a0,
ByteOrder::little));
EXPECT_EQ(0xefcd2301, gtoh((uint32_t)0xefcd2301, ByteOrder::little));
EXPECT_EQ(0x1032dcfe, gtoh((uint32_t)0x1032dcfe, ByteOrder::little));
EXPECT_EQ(0xb1411c0b, gtoh((uint32_t)0xb1411c0b, ByteOrder::little));
EXPECT_EQ(0xffff0000, gtoh((uint32_t)0xffff0000, ByteOrder::little));
EXPECT_EQ(0x55555555, gtoh((uint32_t)0x55555555, ByteOrder::little));
EXPECT_EQ(0xa0a0a0a0, gtoh((uint32_t)0xa0a0a0a0, ByteOrder::little));
EXPECT_EQ(0xef01, gtoh((uint16_t)0xef01, ByteOrder::little));
EXPECT_EQ(0x10fe, gtoh((uint16_t)0x10fe, ByteOrder::little));
EXPECT_EQ(0xb10b, gtoh((uint16_t)0xb10b, ByteOrder::little));
EXPECT_EQ(0xff00, gtoh((uint16_t)0xff00, ByteOrder::little));
EXPECT_EQ(0x5555, gtoh((uint16_t)0x5555, ByteOrder::little));
EXPECT_EQ(0xa0a0, gtoh((uint16_t)0xa0a0, ByteOrder::little));
#else
#error Invalid Endianess
#endif
}
TEST(ByteswapTest, betole)
{
EXPECT_EQ(0x0123456789abcdef, betole((uint64_t)0xefcdab8967452301));
EXPECT_EQ(0xfedcba9876543210, betole((uint64_t)0x1032547698badcfe));
EXPECT_EQ(0x0b1cb071b77141b1, betole((uint64_t)0xb14171b771b01c0b));
EXPECT_EQ(0x00000000ffffffff, betole((uint64_t)0xffffffff00000000));
EXPECT_EQ(0x5555555555555555, betole((uint64_t)0x5555555555555555));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, betole((uint64_t)0xa0a0a0a0a0a0a0a0));
EXPECT_EQ(0x0123cdef, betole((uint32_t)0xefcd2301));
EXPECT_EQ(0xfedc3210, betole((uint32_t)0x1032dcfe));
EXPECT_EQ(0x0b1c41b1, betole((uint32_t)0xb1411c0b));
EXPECT_EQ(0x0000ffff, betole((uint32_t)0xffff0000));
EXPECT_EQ(0x55555555, betole((uint32_t)0x55555555));
EXPECT_EQ(0xa0a0a0a0, betole((uint32_t)0xa0a0a0a0));
EXPECT_EQ(0x01ef, betole((uint16_t)0xef01));
EXPECT_EQ(0xfe10, betole((uint16_t)0x10fe));
EXPECT_EQ(0x0bb1, betole((uint16_t)0xb10b));
EXPECT_EQ(0x00ff, betole((uint16_t)0xff00));
EXPECT_EQ(0x5555, betole((uint16_t)0x5555));
EXPECT_EQ(0xa0a0, betole((uint16_t)0xa0a0));
}
TEST(ByteswapTest, letobe)
{
EXPECT_EQ(0x0123456789abcdef, letobe((uint64_t)0xefcdab8967452301));
EXPECT_EQ(0xfedcba9876543210, letobe((uint64_t)0x1032547698badcfe));
EXPECT_EQ(0x0b1cb071b77141b1, letobe((uint64_t)0xb14171b771b01c0b));
EXPECT_EQ(0x00000000ffffffff, letobe((uint64_t)0xffffffff00000000));
EXPECT_EQ(0x5555555555555555, letobe((uint64_t)0x5555555555555555));
EXPECT_EQ(0xa0a0a0a0a0a0a0a0, letobe((uint64_t)0xa0a0a0a0a0a0a0a0));
EXPECT_EQ(0x0123cdef, letobe((uint32_t)0xefcd2301));
EXPECT_EQ(0xfedc3210, letobe((uint32_t)0x1032dcfe));
EXPECT_EQ(0x0b1c41b1, letobe((uint32_t)0xb1411c0b));
EXPECT_EQ(0x0000ffff, letobe((uint32_t)0xffff0000));
EXPECT_EQ(0x55555555, letobe((uint32_t)0x55555555));
EXPECT_EQ(0xa0a0a0a0, letobe((uint32_t)0xa0a0a0a0));
EXPECT_EQ(0x01ef, letobe((uint16_t)0xef01));
EXPECT_EQ(0xfe10, letobe((uint16_t)0x10fe));
EXPECT_EQ(0x0bb1, letobe((uint16_t)0xb10b));
EXPECT_EQ(0x00ff, letobe((uint16_t)0xff00));
EXPECT_EQ(0x5555, letobe((uint16_t)0x5555));
EXPECT_EQ(0xa0a0, letobe((uint16_t)0xa0a0));
}