1ded95b79SMichael J. Spencer //===- unittests/Support/SwapByteOrderTest.cpp - swap byte order test -----===// 2ded95b79SMichael J. Spencer // 3ded95b79SMichael J. Spencer // The LLVM Compiler Infrastructure 4ded95b79SMichael J. Spencer // 5ded95b79SMichael J. Spencer // This file is distributed under the University of Illinois Open Source 6ded95b79SMichael J. Spencer // License. See LICENSE.TXT for details. 7ded95b79SMichael J. Spencer // 8ded95b79SMichael J. Spencer //===----------------------------------------------------------------------===// 9ded95b79SMichael J. Spencer 10ded95b79SMichael J. Spencer #include "gtest/gtest.h" 11ded95b79SMichael J. Spencer #include "llvm/System/SwapByteOrder.h" 12ded95b79SMichael J. Spencer #include <cstdlib> 13ded95b79SMichael J. Spencer #include <ctime> 14ded95b79SMichael J. Spencer using namespace llvm; 15ded95b79SMichael J. Spencer 16ded95b79SMichael J. Spencer #undef max 17ded95b79SMichael J. Spencer 18ded95b79SMichael J. Spencer namespace { 19ded95b79SMichael J. Spencer 20ded95b79SMichael J. Spencer // In these first two tests all of the origional_uintx values are truncated 21ded95b79SMichael J. Spencer // except for 64. We could avoid this, but there's really no point. 22ded95b79SMichael J. Spencer 23ded95b79SMichael J. Spencer TEST(SwapByteOrder, UnsignedRoundTrip) { 24ded95b79SMichael J. Spencer // The point of the bit twiddling of magic is to test with and without bits 25ded95b79SMichael J. Spencer // in every byte. 26ded95b79SMichael J. Spencer uint64_t value = 1; 27ded95b79SMichael J. Spencer for (std::size_t i = 0; i <= sizeof(value); ++i) { 28ded95b79SMichael J. Spencer uint8_t origional_uint8 = static_cast<uint8_t>(value); 29ded95b79SMichael J. Spencer EXPECT_EQ(origional_uint8, 30ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_uint8))); 31ded95b79SMichael J. Spencer 32ded95b79SMichael J. Spencer uint16_t origional_uint16 = static_cast<uint16_t>(value); 33ded95b79SMichael J. Spencer EXPECT_EQ(origional_uint16, 34ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_uint16))); 35ded95b79SMichael J. Spencer 36ded95b79SMichael J. Spencer uint32_t origional_uint32 = static_cast<uint32_t>(value); 37ded95b79SMichael J. Spencer EXPECT_EQ(origional_uint32, 38ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_uint32))); 39ded95b79SMichael J. Spencer 40ded95b79SMichael J. Spencer uint64_t origional_uint64 = static_cast<uint64_t>(value); 41ded95b79SMichael J. Spencer EXPECT_EQ(origional_uint64, 42ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_uint64))); 43ded95b79SMichael J. Spencer 44ded95b79SMichael J. Spencer value = (value << 8) | 0x55; // binary 0101 0101. 45ded95b79SMichael J. Spencer } 46ded95b79SMichael J. Spencer } 47ded95b79SMichael J. Spencer 48ded95b79SMichael J. Spencer TEST(SwapByteOrder, SignedRoundTrip) { 49ded95b79SMichael J. Spencer // The point of the bit twiddling of magic is to test with and without bits 50ded95b79SMichael J. Spencer // in every byte. 51ded95b79SMichael J. Spencer uint64_t value = 1; 52ded95b79SMichael J. Spencer for (std::size_t i = 0; i <= sizeof(value); ++i) { 53ded95b79SMichael J. Spencer int8_t origional_int8 = static_cast<int8_t>(value); 54ded95b79SMichael J. Spencer EXPECT_EQ(origional_int8, 55ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int8))); 56ded95b79SMichael J. Spencer 57ded95b79SMichael J. Spencer int16_t origional_int16 = static_cast<int16_t>(value); 58ded95b79SMichael J. Spencer EXPECT_EQ(origional_int16, 59ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int16))); 60ded95b79SMichael J. Spencer 61ded95b79SMichael J. Spencer int32_t origional_int32 = static_cast<int32_t>(value); 62ded95b79SMichael J. Spencer EXPECT_EQ(origional_int32, 63ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int32))); 64ded95b79SMichael J. Spencer 65ded95b79SMichael J. Spencer int64_t origional_int64 = static_cast<int64_t>(value); 66ded95b79SMichael J. Spencer EXPECT_EQ(origional_int64, 67ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int64))); 68ded95b79SMichael J. Spencer 69ded95b79SMichael J. Spencer // Test other sign. 70ded95b79SMichael J. Spencer value *= -1; 71ded95b79SMichael J. Spencer 72ded95b79SMichael J. Spencer origional_int8 = static_cast<int8_t>(value); 73ded95b79SMichael J. Spencer EXPECT_EQ(origional_int8, 74ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int8))); 75ded95b79SMichael J. Spencer 76ded95b79SMichael J. Spencer origional_int16 = static_cast<int16_t>(value); 77ded95b79SMichael J. Spencer EXPECT_EQ(origional_int16, 78ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int16))); 79ded95b79SMichael J. Spencer 80ded95b79SMichael J. Spencer origional_int32 = static_cast<int32_t>(value); 81ded95b79SMichael J. Spencer EXPECT_EQ(origional_int32, 82ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int32))); 83ded95b79SMichael J. Spencer 84ded95b79SMichael J. Spencer origional_int64 = static_cast<int64_t>(value); 85ded95b79SMichael J. Spencer EXPECT_EQ(origional_int64, 86ded95b79SMichael J. Spencer sys::SwapByteOrder(sys::SwapByteOrder(origional_int64))); 87ded95b79SMichael J. Spencer 88ded95b79SMichael J. Spencer // Return to normal sign and twiddle. 89ded95b79SMichael J. Spencer value *= -1; 90ded95b79SMichael J. Spencer value = (value << 8) | 0x55; // binary 0101 0101. 91ded95b79SMichael J. Spencer } 92ded95b79SMichael J. Spencer } 93ded95b79SMichael J. Spencer 94ded95b79SMichael J. Spencer TEST(SwapByteOrder, uint8_t) { 95ded95b79SMichael J. Spencer EXPECT_EQ(uint8_t(0x11), sys::SwapByteOrder<uint8_t>(0x11)); 96ded95b79SMichael J. Spencer } 97ded95b79SMichael J. Spencer 98ded95b79SMichael J. Spencer TEST(SwapByteOrder, uint16_t) { 99ded95b79SMichael J. Spencer EXPECT_EQ(uint16_t(0x1122), sys::SwapByteOrder<uint16_t>(0x2211)); 100ded95b79SMichael J. Spencer } 101ded95b79SMichael J. Spencer 102ded95b79SMichael J. Spencer TEST(SwapByteOrder, uint32_t) { 103ded95b79SMichael J. Spencer EXPECT_EQ(uint32_t(0x11223344), sys::SwapByteOrder<uint32_t>(0x44332211)); 104ded95b79SMichael J. Spencer } 105ded95b79SMichael J. Spencer 106ded95b79SMichael J. Spencer TEST(SwapByteOrder, uint64_t) { 107*b28ce01eSMichael J. Spencer EXPECT_EQ(uint64_t(0x1122334455667788ULL), 108*b28ce01eSMichael J. Spencer sys::SwapByteOrder<uint64_t>(0x8877665544332211ULL)); 109ded95b79SMichael J. Spencer } 110ded95b79SMichael J. Spencer 111ded95b79SMichael J. Spencer TEST(SwapByteOrder, int8_t) { 112ded95b79SMichael J. Spencer EXPECT_EQ(int8_t(0x11), sys::SwapByteOrder<int8_t>(0x11)); 113ded95b79SMichael J. Spencer } 114ded95b79SMichael J. Spencer 115ded95b79SMichael J. Spencer TEST(SwapByteOrder, int16_t) { 116ded95b79SMichael J. Spencer EXPECT_EQ(int16_t(0x1122), sys::SwapByteOrder<int16_t>(0x2211)); 117ded95b79SMichael J. Spencer } 118ded95b79SMichael J. Spencer 119ded95b79SMichael J. Spencer TEST(SwapByteOrder, int32_t) { 120ded95b79SMichael J. Spencer EXPECT_EQ(int32_t(0x11223344), sys::SwapByteOrder<int32_t>(0x44332211)); 121ded95b79SMichael J. Spencer } 122ded95b79SMichael J. Spencer 123ded95b79SMichael J. Spencer TEST(SwapByteOrder, int64_t) { 124*b28ce01eSMichael J. Spencer EXPECT_EQ(int64_t(0x1122334455667788LL), 125*b28ce01eSMichael J. Spencer sys::SwapByteOrder<int64_t>(0x8877665544332211LL)); 126ded95b79SMichael J. Spencer } 127ded95b79SMichael J. Spencer 128ded95b79SMichael J. Spencer } 129