brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 2bab71c Raw
208 lines · cpp
1//===- unittests/Support/EndianStreamTest.cpp - EndianStream.h tests ------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/Support/EndianStream.h"10#include "llvm/ADT/SmallString.h"11#include "llvm/Support/DataTypes.h"12#include "gtest/gtest.h"13using namespace llvm;14using namespace support;15 16namespace {17 18TEST(EndianStream, WriteInt32LE) {19  SmallString<16> data;20 21  {22    raw_svector_ostream OS(data);23    endian::Writer LE(OS, llvm::endianness::little);24    LE.write(static_cast<int32_t>(-1362446643));25  }26 27  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xCD);28  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xB6);29  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xCA);30  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xAE);31}32 33TEST(EndianStream, WriteInt32BE) {34  SmallVector<char, 16> data;35 36  {37    raw_svector_ostream OS(data);38    endian::Writer BE(OS, llvm::endianness::big);39    BE.write(static_cast<int32_t>(-1362446643));40  }41 42  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xAE);43  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xCA);44  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xB6);45  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xCD);46}47 48 49TEST(EndianStream, WriteFloatLE) {50  SmallString<16> data;51 52  {53    raw_svector_ostream OS(data);54    endian::Writer LE(OS, llvm::endianness::little);55    LE.write(12345.0f);56  }57 58  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x00);59  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xE4);60  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0x40);61  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x46);62}63 64TEST(EndianStream, WriteFloatBE) {65  SmallVector<char, 16> data;66 67  {68    raw_svector_ostream OS(data);69    endian::Writer BE(OS, llvm::endianness::big);70    BE.write(12345.0f);71  }72 73  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x46);74  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x40);75  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xE4);76  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x00);77}78 79TEST(EndianStream, WriteInt64LE) {80  SmallString<16> data;81 82  {83    raw_svector_ostream OS(data);84    endian::Writer LE(OS, llvm::endianness::little);85    LE.write(static_cast<int64_t>(-136244664332342323));86  }87 88  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xCD);89  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xAB);90  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xED);91  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x1B);92  EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x33);93  EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xF6);94  EXPECT_EQ(static_cast<uint8_t>(data[6]), 0x1B);95  EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xFE);96}97 98TEST(EndianStream, WriteInt64BE) {99  SmallVector<char, 16> data;100 101  {102    raw_svector_ostream OS(data);103    endian::Writer BE(OS, llvm::endianness::big);104    BE.write(static_cast<int64_t>(-136244664332342323));105  }106 107  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xFE);108  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x1B);109  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xF6);110  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x33);111  EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x1B);112  EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xED);113  EXPECT_EQ(static_cast<uint8_t>(data[6]), 0xAB);114  EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xCD);115}116 117TEST(EndianStream, WriteDoubleLE) {118  SmallString<16> data;119 120  {121    raw_svector_ostream OS(data);122    endian::Writer LE(OS, llvm::endianness::little);123    LE.write(-2349214918.58107);124  }125 126  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x20);127  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x98);128  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xD2);129  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x98);130  EXPECT_EQ(static_cast<uint8_t>(data[4]), 0xC5);131  EXPECT_EQ(static_cast<uint8_t>(data[5]), 0x80);132  EXPECT_EQ(static_cast<uint8_t>(data[6]), 0xE1);133  EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xC1);134}135 136TEST(EndianStream, WriteDoubleBE) {137  SmallVector<char, 16> data;138 139  {140    raw_svector_ostream OS(data);141    endian::Writer BE(OS, llvm::endianness::big);142    BE.write(-2349214918.58107);143  }144 145  EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xC1);146  EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xE1);147  EXPECT_EQ(static_cast<uint8_t>(data[2]), 0x80);148  EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xC5);149  EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x98);150  EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xD2);151  EXPECT_EQ(static_cast<uint8_t>(data[6]), 0x98);152  EXPECT_EQ(static_cast<uint8_t>(data[7]), 0x20);153}154 155TEST(EndianStream, WriteArrayLE) {156  SmallString<16> Data;157 158  {159    raw_svector_ostream OS(Data);160    endian::Writer LE(OS, llvm::endianness::little);161    LE.write<uint16_t>({0x1234, 0x5678});162  }163 164  EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x34);165  EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0x12);166  EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x78);167  EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x56);168}169 170TEST(EndianStream, WriteVectorLE) {171  SmallString<16> Data;172 173  {174    raw_svector_ostream OS(Data);175    endian::Writer LE(OS, llvm::endianness::little);176    std::vector<uint16_t> Vec{0x1234, 0x5678};177    LE.write<uint16_t>(Vec);178  }179 180  EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x34);181  EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0x12);182  EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x78);183  EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x56);184}185 186TEST(EndianStream, WriteFloatArrayLE) {187  SmallString<16> Data;188 189  {190    raw_svector_ostream OS(Data);191    endian::Writer LE(OS, llvm::endianness::little);192    LE.write<float>({12345.0f, 12346.0f});193  }194 195  EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x00);196  EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0xE4);197  EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x40);198  EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x46);199 200  EXPECT_EQ(static_cast<uint8_t>(Data[4]), 0x00);201  EXPECT_EQ(static_cast<uint8_t>(Data[5]), 0xE8);202  EXPECT_EQ(static_cast<uint8_t>(Data[6]), 0x40);203  EXPECT_EQ(static_cast<uint8_t>(Data[7]), 0x46);204}205 206 207} // end anon namespace208