1e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <errno.h> 2e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <fcntl.h> 3e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <unistd.h> 4e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 5e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <memory> 6e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <string> 7e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <thread> 8e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <utility> 9e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 10e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <gtest/gtest.h> 11e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/argument_encoder.h> 12e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/array_wrapper.h> 13e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/default_initialization_allocator.h> 14e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/payload.h> 15e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/serializable.h> 16e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/serialization.h> 17e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/rpc/string_wrapper.h> 18e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/utility.h> 19e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 20e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkousing namespace android::pdx; 21e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkousing namespace android::pdx::rpc; 22e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 23e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Tests the serialization/deserialization of all supported types, verifying all 24e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// reasonable boundary conditions for types with multiple encodings. 25e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// 26e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// NOTE: Sometimes this file uses the construct "var = decltype(var)({...})" 27e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// instead of the equivalent "var = {...}" to construct vectors. This is to 28e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// prevent clang-format from producing annoyingly vertical code from long 29e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// initializers. 30e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 31e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// TODO(eieio): Automatically generate some of these tests? 32e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 33e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace { 34e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 35e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Test data for serialization/deserialization of floats. 36e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst float kZeroFloat = 0.0f; 37e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst float kOneFloat = 1.0f; 38e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst auto kZeroFloatBytes = reinterpret_cast<const std::uint8_t*>(&kZeroFloat); 39e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst auto kOneFloatBytes = reinterpret_cast<const std::uint8_t*>(&kOneFloat); 40e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst double kZeroDouble = 0.0; 41e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst double kOneDouble = 1.0; 42e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst auto kZeroDoubleBytes = 43e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko reinterpret_cast<const std::uint8_t*>(&kZeroDouble); 44e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoconst auto kOneDoubleBytes = reinterpret_cast<const std::uint8_t*>(&kOneDouble); 45e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 46e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkostruct TestType { 47e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko enum class Foo { kFoo, kBar, kBaz }; 48e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 49e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int a; 50e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko float b; 51e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string c; 52e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Foo d; 53e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 54e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestType() {} 55e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestType(int a, float b, const std::string& c, Foo d) 56e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko : a(a), b(b), c(c), d(d) {} 57e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 58e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Make gtest expressions simpler by defining equality operator. This is not 59e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // needed for serialization. 60e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko bool operator==(const TestType& other) const { 61e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return a == other.a && b == other.b && c == other.c && d == other.d; 62e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 63e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 64e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko private: 65e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko PDX_SERIALIZABLE_MEMBERS(TestType, a, b, c, d); 66e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko}; 67e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 68e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkotemplate <typename FileHandleType> 69e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkostruct TestTemplateType { 70e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko FileHandleType fd; 71e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 72e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestTemplateType() {} 73e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestTemplateType(FileHandleType fd) : fd(std::move(fd)) {} 74e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 75e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko bool operator==(const TestTemplateType& other) const { 76e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return fd.Get() == other.fd.Get(); 77e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 78e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 79e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko private: 80e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko PDX_SERIALIZABLE_MEMBERS(TestTemplateType<FileHandleType>, fd); 81e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko}; 82e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 83e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Utilities to generate test maps and payloads. 84e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkotemplate <typename MapType> 85e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoMapType MakeMap(std::size_t size) { 86e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko MapType result; 87e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (std::size_t i = 0; i < size; i++) { 88e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.emplace(i, i); 89e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 90e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return result; 91e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 92e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 93e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkotemplate <typename MapType> 94e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkovoid InsertKeyValue(MessageWriter* writer, std::size_t size) { 95e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko MapType map; 96e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (std::size_t i = 0; i < size; i++) { 97e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko map.emplace(i, i); 98e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 99e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (const auto& element : map) { 100e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(element.first, writer); 101e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(element.second, writer); 102e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 103e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 104e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 105e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // anonymous namespace 106e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 107e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializableTypes, Constructor) { 108e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestType tt(1, 2.0, "three", TestType::Foo::kBar); 109e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(1, tt.a); 110e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(2.0, tt.b); 111e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ("three", tt.c); 112e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(TestType::Foo::kBar, tt.d); 113e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 114e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 115e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, bool) { 116e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 117e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 118e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko bool value; 119e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 120e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // True. 121e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = true; 122e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 123e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_TRUE}; 124e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 125e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 126e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 127e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // False. 128e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = false; 129e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 130e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FALSE}; 131e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 132e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 133e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 134e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 135e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, uint8_t) { 136e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 137e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 138e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint8_t value; 139e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 140e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 141e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 142e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 143e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 144e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 145e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 146e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 147e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 148e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7) - 1; 149e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 150e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 151e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 152e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 153e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 154e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 155e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7); 156e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 157e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, (1 << 7)}; 158e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 159e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 160e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 161e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 162e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xff; 163e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 164e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, 0xff}; 165e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 166e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 167e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 168e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 169e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, uint16_t) { 170e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 171e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 172e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint16_t value; 173e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 174e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 175e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 176e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 177e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 178e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 179e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 180e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 181e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 182e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7) - 1; 183e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 184e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 185e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 186e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 187e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 188e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 189e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7); 190e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 191e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, (1 << 7)}; 192e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 193e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 194e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 195e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 196e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xff; 197e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 198e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, 0xff}; 199e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 200e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 201e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 202e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 203e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 8); 204e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 205e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0, 1}; 206e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 207e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 208e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 209e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 210e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffff; 211e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 212e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 213e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 214e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 215e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 216e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 217e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, uint32_t) { 218e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 219e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 220e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint32_t value; 221e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 222e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 223e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 224e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 225e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 226e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 227e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 228e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 229e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 230e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7) - 1; 231e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 232e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 233e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 234e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 235e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 236e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 237e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7); 238e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 239e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, (1 << 7)}; 240e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 241e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 242e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 243e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 244e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xff; 245e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 246e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, 0xff}; 247e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 248e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 249e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 250e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 251e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 8); 252e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 253e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0, 1}; 254e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 255e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 256e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 257e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 258e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffff; 259e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 260e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 261e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 262e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 263e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 264e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT32. 265e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 16); 266e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 267e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT32, 0, 0, 1, 0}; 268e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 269e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 270e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 271e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT32. 272e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffffffff; 273e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 274e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT32, 0xff, 0xff, 0xff, 0xff}; 275e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 276e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 277e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 278e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 279e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, uint64_t) { 280e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 281e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 282e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint64_t value; 283e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 284e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 285e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 286e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 287e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 288e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 289e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 290e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 291e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 292e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7) - 1; 293e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 294e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 295e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 296e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 297e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 298e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 299e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 7); 300e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 301e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, (1 << 7)}; 302e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 303e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 304e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 305e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 306e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xff; 307e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 308e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT8, 0xff}; 309e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 310e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 311e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 312e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 313e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 8); 314e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 315e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0, 1}; 316e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 317e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 318e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 319e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 320e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffff; 321e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 322e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 323e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 324e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 325e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 326e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT32. 327e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1 << 16); 328e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 329e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT32, 0, 0, 1, 0}; 330e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 331e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 332e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 333e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT32. 334e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffffffff; 335e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 336e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT32, 0xff, 0xff, 0xff, 0xff}; 337e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 338e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 339e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 340e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT64. 341e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = (1ULL << 32); 342e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 343e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_UINT64, 0, 0, 0, 0, 1, 0, 0, 0}; 344e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 345e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 346e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 347e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT64. 348e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0xffffffffffffffffULL; 349e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 350e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = { 351e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_UINT64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 352e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 353e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 354e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 355e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 356e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, int8_t) { 357e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 358e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 359e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int8_t value; 360e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 361e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 362e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32; 363e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 364e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 365e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 366e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 367e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 368e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 369e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -1; 370e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 371e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 372e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 373e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 374e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 375e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 376e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 377e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 378e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 379e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 380e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 381e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 382e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 383e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 127; 384e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 385e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 386e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 387e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 388e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 389e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 390e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -128; 391e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 392e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0x80}; 393e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 394e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 395e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 396e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 397e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -33; 398e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 399e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0xdf}; 400e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 401e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 402e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 403e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 404e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, int16_t) { 405e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 406e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 407e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int16_t value; 408e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 409e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 410e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32; 411e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 412e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 413e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 414e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 415e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 416e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 417e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -1; 418e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 419e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 420e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 421e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 422e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 423e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 424e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 425e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 426e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 427e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 428e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 429e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 430e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 431e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 127; 432e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 433e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 434e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 435e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 436e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 437e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 438e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -128; 439e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 440e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0x80}; 441e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 442e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 443e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 444e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 445e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -33; 446e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 447e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0xdf}; 448e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 449e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 450e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 451e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 452e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32768; 453e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 454e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0x00, 0x80}; 455e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 456e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 457e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 458e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 459e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 32767; 460e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 461e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 462e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 463e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 464e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 465e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 466e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, int32_t) { 467e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 468e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 469e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int32_t value; 470e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 471e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 472e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32; 473e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 474e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 475e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 476e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 477e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 478e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 479e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -1; 480e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 481e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 482e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 483e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 484e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 485e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 486e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 487e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 488e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 489e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 490e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 491e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 492e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 493e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 127; 494e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 495e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 496e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 497e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 498e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 499e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 500e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -128; 501e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 502e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0x80}; 503e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 504e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 505e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 506e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 507e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -33; 508e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 509e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0xdf}; 510e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 511e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 512e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 513e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 514e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32768; 515e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 516e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0x00, 0x80}; 517e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 518e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 519e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 520e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 521e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 32767; 522e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 523e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 524e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 525e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 526e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 527e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT32. 528e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -2147483648; 529e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 530e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT32, 0x00, 0x00, 0x00, 0x80}; 531e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 532e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 533e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 534e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT32. 535e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 2147483647; 536e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 537e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT32, 0xff, 0xff, 0xff, 0x7f}; 538e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 539e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 540e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 541e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 542e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, int64_t) { 543e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 544e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 545e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int64_t value; 546e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 547e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 548e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32; 549e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 550e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 551e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 552e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 553e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 554e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 555e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -1; 556e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 557e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 558e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 559e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 560e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 561e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 562e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0; 563e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 564e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 565e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 566e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 567e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 568e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 569e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 127; 570e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 571e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 572e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 573e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 574e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 575e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 576e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -128; 577e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 578e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0x80}; 579e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 580e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 581e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 582e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 583e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -33; 584e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 585e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT8, 0xdf}; 586e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 587e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 588e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 589e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 590e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -32768; 591e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 592e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0x00, 0x80}; 593e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 594e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 595e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 596e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 597e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 32767; 598e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 599e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 600e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 601e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 602e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 603e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT32. 604e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -2147483648; 605e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 606e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT32, 0x00, 0x00, 0x00, 0x80}; 607e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 608e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 609e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 610e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT32. 611e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 2147483647; 612e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 613e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_INT32, 0xff, 0xff, 0xff, 0x7f}; 614e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 615e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 616e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 617e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT64. 618e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = -9223372036854775808ULL; 619e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 620e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = { 621e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_INT64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}; 622e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 623e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 624e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 625e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT64. 626e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 9223372036854775807ULL; 627e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 628e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = { 629e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_INT64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}; 630e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 631e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 632e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 633e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 634e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, float) { 635e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 636e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 637e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko float value; 638e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 639e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0.0f; 640e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 641e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FLOAT32, kZeroFloatBytes[0], kZeroFloatBytes[1], 642e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[2], kZeroFloatBytes[3]}; 643e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 644e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 645e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 646e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 1.0f; 647e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 648e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FLOAT32, kOneFloatBytes[0], kOneFloatBytes[1], 649e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[2], kOneFloatBytes[3]}; 650e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 651e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 652e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 653e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 654e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, double) { 655e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 656e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 657e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko double value; 658e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 659e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 0.0f; 660e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 661e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FLOAT64, kZeroDoubleBytes[0], kZeroDoubleBytes[1], 662e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroDoubleBytes[2], kZeroDoubleBytes[3], kZeroDoubleBytes[4], 663e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroDoubleBytes[5], kZeroDoubleBytes[6], kZeroDoubleBytes[7]}; 664e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 665e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 666e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 667e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = 1.0f; 668e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 669e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FLOAT64, kOneDoubleBytes[0], kOneDoubleBytes[1], 670e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneDoubleBytes[2], kOneDoubleBytes[3], kOneDoubleBytes[4], 671e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneDoubleBytes[5], kOneDoubleBytes[6], kOneDoubleBytes[7]}; 672e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 673e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 674e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 675e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 676e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, Enum) { 677e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 678e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 679e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 680e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko enum Foo { kFoo, kBar, kBaz }; 681e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Foo value = kBar; 682e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 683e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1}; 684e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 685e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 686e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 687e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 688e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, EnumClass) { 689e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 690e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 691e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 692e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko enum class Foo { kFoo, kBar, kBaz }; 693e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Foo value = Foo::kBaz; 694e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 695e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_POSITIVE_FIXINT_MIN + 2}; 696e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 697e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 698e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 699e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 700e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, LocalHandle) { 701e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 702e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 703e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko LocalHandle fd1; 704e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko LocalHandle fd2; 705e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 706e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko fd1 = LocalHandle(100); 707e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(fd1, &result); 708e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXEXT2, ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0, 0}; 709e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 710e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(1u, result.FdCount()); 711e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(100, result.FdArray()[0]); 712e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 713e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 714e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko fd2 = LocalHandle(200); 715e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(std::forward_as_tuple(fd1, fd2), &result); 716e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)( 717e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXARRAY_MIN + 2, ENCODING_TYPE_FIXEXT2, 718e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0, 0, ENCODING_TYPE_FIXEXT2, 719e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 1, 0}); 720e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 721e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(2u, result.FdCount()); 722e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(100, result.FdArray()[0]); 723e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(200, result.FdArray()[1]); 724e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 725e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 726e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko fd1.Release(); // Don't try to close fd 100. 727e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko fd2.Release(); // Don't try to close fd 200. 728e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 729e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko fd1 = LocalHandle(-2); 730e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(fd1, &result); 731e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXEXT2, ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0xfe, 732e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 0xff}; 733e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 734e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0u, result.FdCount()); 735e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 736e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 737e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 738e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, string) { 739e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 740e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 741e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string value; 742e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 743e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXSTR. 744e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = ""; 745e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 746e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXSTR_MIN}; 747e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 748e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 749e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 750e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXSTR. 751e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 5) - 1, 'x'); 752e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 753e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXSTR_MAX}; 754e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 5) - 1, 'x'); 755e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 756e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 757e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 758e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR8. 759e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 5), 'x'); 760e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 761e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR8, (1 << 5)}; 762e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 5), 'x'); 763e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 764e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 765e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 766e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR8. 767e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 8) - 1, 'x'); 768e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 769e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR8, (1 << 8) - 1}; 770e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 8) - 1, 'x'); 771e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 772e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 773e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 774e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR16. 775e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 8), 'x'); 776e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 777e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR16, 0x00, 0x01}; 778e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 8), 'x'); 779e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 780e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 781e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 782e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR16. 783e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 16) - 1, 'x'); 784e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 785e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR16, 0xff, 0xff}; 786e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16) - 1, 'x'); 787e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 788e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 789e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 790e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR32. 791e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 16), 'x'); 792e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 793e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR32, 0x00, 0x00, 0x01, 0x00}; 794e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 795e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 796e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 797e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 798e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 799e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, StringWrapper) { 800e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 801e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 802e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string value; 803e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 804e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXSTR. 805e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = ""; 806e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 807e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXSTR_MIN}; 808e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 809e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 810e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 811e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXSTR. 812e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 5) - 1, 'x'); 813e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 814e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXSTR_MAX}; 815e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 5) - 1, 'x'); 816e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 817e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 818e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 819e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR8. 820e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 5), 'x'); 821e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 822e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR8, (1 << 5)}; 823e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 5), 'x'); 824e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 825e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 826e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 827e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR8. 828e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 8) - 1, 'x'); 829e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 830e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR8, (1 << 8) - 1}; 831e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 8) - 1, 'x'); 832e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 833e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 834e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 835e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR16. 836e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 8), 'x'); 837e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 838e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR16, 0x00, 0x01}; 839e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 8), 'x'); 840e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 841e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 842e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 843e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR16. 844e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 16) - 1, 'x'); 845e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 846e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR16, 0xff, 0xff}; 847e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16) - 1, 'x'); 848e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 849e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 850e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 851e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR32. 852e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = std::string((1 << 16), 'x'); 853e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(WrapString(value), &result); 854e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_STR32, 0x00, 0x00, 0x01, 0x00}; 855e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 856e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 857e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 858e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 859e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 860e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, vector) { 861e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 862e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 863e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<uint8_t> value; 864e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 865e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 866e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = {}; 867e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 868e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MIN}; 869e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 870e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 871e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 872e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 873e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 4) - 1, 'x'); 874e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 875e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MAX}; 876e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4) - 1, 'x'); 877e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 878e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 879e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 880e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 881e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 4), 'x'); 882e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 883e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0x10, 0x00}; 884e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4), 'x'); 885e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 886e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 887e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 888e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 889e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 16) - 1, 'x'); 890e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 891e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 892e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16) - 1, 'x'); 893e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 894e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 895e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 896e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 897e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 16), 'x'); 898e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 899e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 900e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 901e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 902e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 903e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 904e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 905e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, map) { 906e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 907e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 908e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::map<std::uint32_t, std::uint32_t> value; 909e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 910e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXMAP. 911e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = {}; 912e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 913e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN}; 914e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 915e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 916e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 917e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXMAP. 918e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 4) - 1); 919e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 920e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MAX}; 921e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 4) - 1); 922e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 923e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 924e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 925e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP16. 926e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 4)); 927e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 928e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP16, 0x10, 0x00}; 929e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 4)); 930e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 931e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 932e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 933e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max MAP16. 934e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 16) - 1); 935e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 936e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP16, 0xff, 0xff}; 937e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 16) - 1); 938e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 939e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 940e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 941e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP32. 942e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 16)); 943e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 944e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x01, 0x00}; 945e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 16)); 946e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 947e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 948e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 949e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 950e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, unordered_map) { 951e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 952e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 953e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::unordered_map<std::uint32_t, std::uint32_t> value; 954e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 955e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXMAP. 956e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = {}; 957e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 958e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN}; 959e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 960e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 961e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 962e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXMAP. 963e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 4) - 1); 964e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 965e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MAX}; 966e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 4) - 1); 967e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 968e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 969e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 970e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP16. 971e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 4)); 972e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 973e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP16, 0x10, 0x00}; 974e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 4)); 975e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 976e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 977e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 978e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max MAP16. 979e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 16) - 1); 980e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 981e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP16, 0xff, 0xff}; 982e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 16) - 1); 983e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 984e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 985e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 986e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP32. 987e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = MakeMap<decltype(value)>((1 << 16)); 988e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(value, &result); 989e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x01, 0x00}; 990e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(value)>(&expected, (1 << 16)); 991e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 992e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 993e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 994e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 995e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, array) { 996e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 997e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 998e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 999e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 1000e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, 0> a0; 1001e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(a0, &result); 1002e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MIN}; 1003e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1004e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1005e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1006e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 1007e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 4) - 1> a1; 1008e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : a1) 1009e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 1010e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(a1, &result); 1011e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MAX}; 1012e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4) - 1, 'x'); 1013e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1014e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1015e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1016e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 1017e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 4)> a2; 1018e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : a2) 1019e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 1020e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(a2, &result); 1021e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0x10, 0x00}; 1022e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4), 'x'); 1023e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1024e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1025e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1026e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 1027e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 16) - 1> a3; 1028e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : a3) 1029e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 1030e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(a3, &result); 1031e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 1032e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16) - 1, 'x'); 1033e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1034e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1035e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1036e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 1037e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 16)> a4; 1038e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : a4) 1039e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 1040e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(a4, &result); 1041e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 1042e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 1043e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1044e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1045e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1046e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1047e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, ArrayWrapper) { 1048e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1049e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1050e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<std::uint8_t, DefaultInitializationAllocator<std::uint8_t>> value; 1051e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ArrayWrapper<std::uint8_t> wrapper; 1052e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1053e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 1054e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = {}; 1055e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(wrapper, &result); 1056e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MIN}; 1057e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1058e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1059e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1060e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 1061e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 4) - 1, 'x'); 1062e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko wrapper = decltype(wrapper)(value.data(), value.capacity(), value.size()); 1063e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(wrapper, &result); 1064e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MAX}; 1065e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4) - 1, 'x'); 1066e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1067e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1068e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1069e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 1070e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 4), 'x'); 1071e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko wrapper = decltype(wrapper)(value.data(), value.capacity(), value.size()); 1072e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(wrapper, &result); 1073e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0x10, 0x00}; 1074e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4), 'x'); 1075e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1076e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1077e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1078e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 1079e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 16) - 1, 'x'); 1080e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko wrapper = decltype(wrapper)(value.data(), value.capacity(), value.size()); 1081e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(wrapper, &result); 1082e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 1083e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16) - 1, 'x'); 1084e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1085e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1086e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1087e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 1088e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko value = decltype(value)((1 << 16), 'x'); 1089e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko wrapper = decltype(wrapper)(value.data(), value.capacity(), value.size()); 1090e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(wrapper, &result); 1091e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 1092e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 1093e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1094e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1095e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1096e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1097e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, pair) { 1098e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1099e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1100e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1101e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto p1 = std::make_pair(1, 2); 1102e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(p1, &result); 1103e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MIN + 2, 1, 2}; 1104e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1105e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1106e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1107e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto p2 = std::make_pair('x', std::string("12345")); 1108e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(p2, &result); 1109e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)({ENCODING_TYPE_FIXARRAY_MIN + 2, 'x', 1110e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXSTR_MIN + 5, '1', '2', '3', 1111e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko '4', '5'}); 1112e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1113e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1114e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1115e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1116e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, tuple) { 1117e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1118e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1119e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1120e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 1121e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t1 = std::make_tuple(); 1122e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t1, &result); 1123e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MIN}; 1124e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1125e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1126e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1127e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 1128e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t2 = GetNTuple<15>('x'); 1129e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t2, &result); 1130e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXARRAY_MAX}; 1131e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4) - 1, 'x'); 1132e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1133e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1134e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1135e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 1136e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t3 = GetNTuple<(1 << 4)>('x'); 1137e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t3, &result); 1138e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0x10, 0x00}; 1139e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 4), 'x'); 1140e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1141e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1142e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1143e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Template instantiation depth is an issue for these tests. They are commented 1144e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// out to document the expected behavior, even though tuples of this order are 1145e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// not expected in practice. 1146e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#if 0 1147e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 1148e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t4 = GetNTuple<(1 << 16)-1>('x'); 1149e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t4, &result); 1150e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 1151e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16)-1, 'x'); 1152e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1153e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1154e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1155e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 1156e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t5 = GetNTuple<(1 << 16)>('x'); 1157e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t5, &result); 1158e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 1159e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected.Append((1 << 16), 'x'); 1160e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1161e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1162e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#endif 1163e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1164e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1165e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// TODO(eieio): More exhaustive testing of type nesting. 1166e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, NestedTuple) { 1167e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1168e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1169e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1170e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t1 = std::make_tuple('x', std::make_tuple<int, int>(1, 2)); 1171e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t1, &result); 1172e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)({ENCODING_TYPE_FIXARRAY_MIN + 2, 'x', 1173e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXARRAY_MIN + 2, 1, 2}); 1174e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1175e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1176e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1177e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t2 = std::make_tuple('x', std::make_tuple<int, int>(1, 2), 1178e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string("0123456789")); 1179e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t2, &result); 1180e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)({ENCODING_TYPE_FIXARRAY_MIN + 3, 'x', 1181e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXARRAY_MIN + 2, 1, 2, 1182e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXSTR | 10, '0', '1', '2', '3', 1183e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko '4', '5', '6', '7', '8', '9'}); 1184e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1185e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1186e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1187e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t3 = std::make_tuple(0.0f, std::uint64_t(10ULL), 1188e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<char>{'a', 'b', 'c'}); 1189e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t3, &result); 1190e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)( 1191e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXARRAY_MIN + 3, ENCODING_TYPE_FLOAT32, 1192e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[0], kZeroFloatBytes[1], kZeroFloatBytes[2], 1193e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[3], ENCODING_TYPE_POSITIVE_FIXINT_MIN + 10, 1194e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXARRAY_MIN + 3, 'a', 'b', 'c'}); 1195e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1196e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1197e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1198e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1199e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, NestedMap) { 1200e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1201e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1202e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1203e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::map<int, std::pair<std::string, int>> m1 = {{0, {"a", 2}}, 1204e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {1, {"b", 10}}}; 1205e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(m1, &result); 1206e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)( 1207e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXMAP_MIN + 2, 0, ENCODING_TYPE_FIXARRAY_MIN + 2, 1208e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXSTR_MIN + 1, 'a', 2, 1, ENCODING_TYPE_FIXARRAY_MIN + 2, 1209e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FIXSTR_MIN + 1, 'b', 10}); 1210e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1211e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1212e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1213e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1214e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, Serializable) { 1215e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1216e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1217e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1218e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestType t1{10, 0.0, "12345", TestType::Foo::kBaz}; 1219e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(t1, &result); 1220e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)( 1221e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXARRAY_MIN + 4, 10, ENCODING_TYPE_FLOAT32, 1222e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[0], kZeroFloatBytes[1], kZeroFloatBytes[2], 1223e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[3], ENCODING_TYPE_FIXSTR_MIN + 5, '1', '2', '3', '4', 1224e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko '5', ENCODING_TYPE_POSITIVE_FIXINT_MIN + 2}); 1225e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1226e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1227e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1228e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestTemplateType<LocalHandle> tt{LocalHandle(-1)}; 1229e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(tt, &result); 1230e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = 1231e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko decltype(expected)({ENCODING_TYPE_FIXARRAY_MIN + 1, ENCODING_TYPE_FIXEXT2, 1232e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0xff, 0xff}); 1233e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1234e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1235e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1236e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(SerializationTest, Variant) { 1237e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload result; 1238e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1239e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1240e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Variant<int, bool, float> v; 1241e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1242e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Empty variant. 1243e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(v, &result); 1244e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN + 1, ENCODING_TYPE_NEGATIVE_FIXINT_MAX, 1245e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_NIL}; 1246e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1247e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1248e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1249e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko v = 10; 1250e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(v, &result); 1251e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN + 1, 1252e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 0, 1253e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 10}; 1254e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1255e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1256e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1257e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko v = true; 1258e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(v, &result); 1259e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN + 1, 1260e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1, ENCODING_TYPE_TRUE}; 1261e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1262e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1263e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1264e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko v = false; 1265e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(v, &result); 1266e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN + 1, 1267e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1, ENCODING_TYPE_FALSE}; 1268e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1269e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1270e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1271e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko v = 1.0f; 1272e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Serialize(v, &result); 1273e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {ENCODING_TYPE_FIXMAP_MIN + 1, 1274e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 2, 1275e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FLOAT32, 1276e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[0], 1277e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[1], 1278e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[2], 1279e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[3]}; 1280e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 1281e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.Clear(); 1282e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1283e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // TODO(eieio): Add more serialization tests for Variant. 1284e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1285e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1286e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, bool) { 1287e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1288e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko bool result = false; 1289e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1290e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1291e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // True. 1292e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_TRUE}; 1293e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1294e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1295e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(1, result); // Gtest generates warning from bool literals. 1296e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1297e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // False. 1298e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FALSE}; 1299e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1300e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1301e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result); // Gtest generates warning from bool literals. 1302e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1303e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1304e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, uint8_t) { 1305e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1306e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint8_t result = 0; 1307e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1308e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1309e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1310e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1311e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1312e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1313e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1314e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1315e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1316e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1317e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1318e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1319e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127U, result); 1320e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1321e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 1322e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0x00}; 1323e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1324e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1325e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1326e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1327e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 1328e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0xff}; 1329e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1330e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1331e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffU, result); 1332e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1333e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT16 out of range. 1334e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16}; 1335e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1336e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1337e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1338e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT16, error.encoding_type()); 1339e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1340e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT32 out of range. 1341e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32}; 1342e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1343e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1344e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1345e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT32, error.encoding_type()); 1346e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1347e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT64 out of range. 1348e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT64}; 1349e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1350e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1351e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1352e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT64, error.encoding_type()); 1353e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1354e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1355e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, uint16_t) { 1356e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1357e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint16_t result = 0; 1358e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1359e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1360e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1361e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1362e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1363e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1364e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1365e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1366e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1367e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1368e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1369e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1370e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127U, result); 1371e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1372e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 1373e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0x00}; 1374e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1375e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1376e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1377e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1378e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 1379e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0xff}; 1380e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1381e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1382e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffU, result); 1383e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1384e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 1385e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0x00, 0x00}; 1386e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1387e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1388e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1389e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1390e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 1391e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 1392e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1393e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1394e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffU, result); 1395e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1396e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT32 out of range. 1397e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32}; 1398e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1399e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1400e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1401e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT32, error.encoding_type()); 1402e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1403e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT64 out of range. 1404e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT64}; 1405e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1406e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1407e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1408e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT64, error.encoding_type()); 1409e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1410e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1411e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, uint32_t) { 1412e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1413e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint32_t result = 0; 1414e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1415e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1416e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1417e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1418e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1419e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1420e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1421e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1422e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1423e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1424e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1425e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1426e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127U, result); 1427e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1428e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 1429e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0x00}; 1430e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1431e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1432e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1433e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1434e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 1435e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0xff}; 1436e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1437e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1438e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffU, result); 1439e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1440e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 1441e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0x00, 0x00}; 1442e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1443e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1444e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1445e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1446e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 1447e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 1448e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1449e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1450e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffU, result); 1451e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1452e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT32. 1453e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32, 0x00, 0x00, 0x00, 0x00}; 1454e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1455e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1456e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1457e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1458e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT32. 1459e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32, 0xff, 0xff, 0xff, 0xff}; 1460e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1461e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1462e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffffffU, result); 1463e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1464e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // UINT64 out of range. 1465e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT64}; 1466e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1467e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1468e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 1469e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_UINT64, error.encoding_type()); 1470e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1471e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1472e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, uint64_t) { 1473e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1474e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint64_t result = 0; 1475e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1476e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1477e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1478e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1479e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1480e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1481e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1482e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1483e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1484e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1485e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1486e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1487e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127U, result); 1488e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1489e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT8. 1490e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0x00}; 1491e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1492e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1493e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1494e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1495e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT8. 1496e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT8, 0xff}; 1497e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1498e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1499e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffU, result); 1500e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1501e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT16. 1502e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0x00, 0x00}; 1503e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1504e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1505e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1506e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1507e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT16. 1508e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT16, 0xff, 0xff}; 1509e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1510e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1511e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffU, result); 1512e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1513e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT32. 1514e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32, 0x00, 0x00, 0x00, 0x00}; 1515e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1516e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1517e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1518e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1519e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT32. 1520e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_UINT32, 0xff, 0xff, 0xff, 0xff}; 1521e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1522e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1523e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffffffU, result); 1524e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1525e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min UINT64. 1526e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = { 1527e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_UINT64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 1528e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1529e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1530e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0U, result); 1531e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1532e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max UINT64. 1533e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = { 1534e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_UINT64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 1535e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1536e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1537e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0xffffffffffffffffUL, result); 1538e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1539e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1540e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, int8_t) { 1541e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1542e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int8_t result = 0; 1543e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1544e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1545e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 1546e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 1547e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1548e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1549e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32, result); 1550e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1551e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 1552e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 1553e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1554e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1555e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-1, result); 1556e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1557e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1558e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1559e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1560e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1561e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result); 1562e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1563e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1564e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1565e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1566e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1567e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1568e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1569e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 1570e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x80}; 1571e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1572e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1573e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-128, result); 1574e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1575e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 1576e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x7f}; 1577e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1578e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1579e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1580e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1581e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT16 out of range. 1582e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16}; 1583e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1584e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1585e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1586e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT16, error.encoding_type()); 1587e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1588e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT32 out of range. 1589e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32}; 1590e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1591e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1592e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1593e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT32, error.encoding_type()); 1594e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1595e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT64 out of range. 1596e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT64}; 1597e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1598e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1599e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1600e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT64, error.encoding_type()); 1601e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1602e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1603e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, int16_t) { 1604e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1605e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int16_t result = 0; 1606e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1607e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1608e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 1609e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 1610e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1611e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1612e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32, result); 1613e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1614e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 1615e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 1616e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1617e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1618e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-1, result); 1619e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1620e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1621e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1622e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1623e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1624e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result); 1625e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1626e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1627e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1628e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1629e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1630e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1631e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1632e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 1633e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x80}; 1634e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1635e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1636e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-128, result); 1637e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1638e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 1639e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x7f}; 1640e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1641e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1642e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1643e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1644e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 1645e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0x00, 0x80}; 1646e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1647e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1648e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32768, result); 1649e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1650e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 1651e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 1652e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1653e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1654e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(32767, result); 1655e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1656e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT32 out of range. 1657e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32}; 1658e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1659e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1660e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1661e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT32, error.encoding_type()); 1662e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1663e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT64 out of range. 1664e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT64}; 1665e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1666e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1667e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1668e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT64, error.encoding_type()); 1669e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1670e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1671e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, int32_t) { 1672e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1673e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int32_t result = 0; 1674e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1675e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1676e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 1677e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 1678e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1679e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1680e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32, result); 1681e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1682e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 1683e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 1684e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1685e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1686e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-1, result); 1687e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1688e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1689e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1690e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1691e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1692e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result); 1693e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1694e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1695e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1696e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1697e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1698e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1699e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1700e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 1701e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x80}; 1702e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1703e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1704e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-128, result); 1705e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1706e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 1707e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x7f}; 1708e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1709e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1710e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1711e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1712e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 1713e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0x00, 0x80}; 1714e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1715e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1716e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32768, result); 1717e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1718e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 1719e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 1720e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1721e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1722e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(32767, result); 1723e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1724e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT32. 1725e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32, 0x00, 0x00, 0x00, 0x80}; 1726e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1727e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1728e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-2147483648, result); 1729e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1730e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT32. 1731e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32, 0xff, 0xff, 0xff, 0x7f}; 1732e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1733e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1734e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(2147483647, result); 1735e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1736e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // INT64 out of range. 1737e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT64}; 1738e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1739e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 1740e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 1741e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_INT64, error.encoding_type()); 1742e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1743e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1744e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, int64_t) { 1745e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1746e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int64_t result = 0; 1747e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1748e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1749e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min NEGATIVE FIXINT. 1750e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MIN}; 1751e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1752e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1753e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32, result); 1754e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1755e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max NEGATIVE FIXINT. 1756e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_NEGATIVE_FIXINT_MAX}; 1757e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1758e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1759e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-1, result); 1760e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1761e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXINT. 1762e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN}; 1763e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1764e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1765e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result); 1766e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1767e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXINT. 1768e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MAX}; 1769e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1770e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1771e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1772e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1773e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT8. 1774e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x80}; 1775e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1776e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1777e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-128, result); 1778e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1779e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT8. 1780e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT8, 0x7f}; 1781e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1782e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1783e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(127, result); 1784e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1785e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT16. 1786e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0x00, 0x80}; 1787e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1788e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1789e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-32768, result); 1790e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1791e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT16. 1792e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT16, 0xff, 0x7f}; 1793e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1794e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1795e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(32767, result); 1796e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1797e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT32. 1798e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32, 0x00, 0x00, 0x00, 0x80}; 1799e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1800e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1801e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-2147483648, result); 1802e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1803e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT32. 1804e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_INT32, 0xff, 0xff, 0xff, 0x7f}; 1805e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1806e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1807e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(2147483647, result); 1808e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1809e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min INT64. 1810e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = { 1811e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_INT64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}; 1812e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1813e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1814e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Believe it or not, this is actually the correct way to specify the most 1815e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // negative signed long long. 1816e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-9223372036854775807LL - 1, result); 1817e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1818e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max INT64. 1819e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = { 1820e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_INT64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}; 1821e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1822e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1823e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(9223372036854775807LL, result); 1824e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1825e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1826e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, float) { 1827e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1828e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko float result; 1829e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1830e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1831e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT32. 1832e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT32, kZeroFloatBytes[0], kZeroFloatBytes[1], 1833e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[2], kZeroFloatBytes[3]}; 1834e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1835e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1836e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kZeroFloat, result); 1837e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1838e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT32. 1839e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT32, kOneFloatBytes[0], kOneFloatBytes[1], 1840e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[2], kOneFloatBytes[3]}; 1841e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1842e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1843e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kOneFloat, result); 1844e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1845e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1846e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, double) { 1847e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1848e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko double result; 1849e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1850e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1851e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT32. 1852e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT32, kZeroFloatBytes[0], kZeroFloatBytes[1], 1853e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[2], kZeroFloatBytes[3]}; 1854e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1855e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1856e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kZeroDouble, result); 1857e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1858e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT64. 1859e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT64, kZeroDoubleBytes[0], kZeroDoubleBytes[1], 1860e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroDoubleBytes[2], kZeroDoubleBytes[3], kZeroDoubleBytes[4], 1861e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroDoubleBytes[5], kZeroDoubleBytes[6], kZeroDoubleBytes[7]}; 1862e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1863e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1864e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kZeroDouble, result); 1865e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1866e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT32. 1867e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT32, kOneFloatBytes[0], kOneFloatBytes[1], 1868e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[2], kOneFloatBytes[3]}; 1869e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1870e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1871e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kOneDouble, result); 1872e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1873e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // FLOAT64. 1874e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FLOAT64, kOneDoubleBytes[0], kOneDoubleBytes[1], 1875e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneDoubleBytes[2], kOneDoubleBytes[3], kOneDoubleBytes[4], 1876e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneDoubleBytes[5], kOneDoubleBytes[6], kOneDoubleBytes[7]}; 1877e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1878e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1879e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kOneDouble, result); 1880e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1881e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1882e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, Enum) { 1883e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1884e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko enum Foo { kFoo, kBar, kBaz } result; 1885e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1886e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1887e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1}; 1888e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1889e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1890e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(kBar, result); 1891e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1892e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1893e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, EnumClass) { 1894e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1895e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko enum Foo { kFoo, kBar, kBaz } result; 1896e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1897e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1898e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT_MIN + 2}; 1899e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1900e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1901e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(Foo::kBaz, result); 1902e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1903e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1904e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, LocalHandle) { 1905e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1906e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko LocalHandle result1; 1907e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko LocalHandle result2; 1908e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1909e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1910e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXEXT2, ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0, 0}; 1911e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result1, &buffer); 1912e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1913e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result1.Get()); 1914e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result1.Release(); // Don't close fd 0. 1915e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1916e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::tuple<LocalHandle&, LocalHandle&> t1(result1, result2); 1917e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = decltype(buffer)( 1918e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXARRAY_MIN + 2, ENCODING_TYPE_FIXEXT2, 1919e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0, 0, ENCODING_TYPE_FIXEXT2, 1920e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 1, 0}); 1921e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t1, &buffer); 1922e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1923e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(0, result1.Get()); 1924e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(1, result2.Get()); 1925e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result1.Release(); // Don't close fd 0. 1926e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result2.Release(); // Don't close fd 1. 1927e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1928e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXEXT2, ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0xfe, 1929e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 0xff}; 1930e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result1, &buffer); 1931e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1932e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(-2, result1.Get()); 1933e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1934e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1935e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, string) { 1936e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1937e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string result = ""; 1938e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 1939e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1940e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXSTR. 1941e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXSTR_MIN}; 1942e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1943e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1944e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ("", result); 1945e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1946e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXSTR. 1947e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXSTR_MAX}; 1948e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 5) - 1, 'x'); 1949e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1950e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1951e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::string((1 << 5) - 1, 'x'), result); 1952e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1953e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR8. 1954e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8, 0x00}; 1955e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1956e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1957e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ("", result); 1958e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1959e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR8. 1960e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8, 0xff}; 1961e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0xff, 'x'); 1962e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1963e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1964e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::string(0xff, 'x'), result); 1965e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1966e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR16. 1967e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR16, 0x00, 0x00}; 1968e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1969e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1970e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ("", result); 1971e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1972e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max STR16. 1973e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR16, 0xff, 0xff}; 1974e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0xffff, 'x'); 1975e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1976e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1977e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::string(0xffff, 'x'), result); 1978e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1979e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min STR32. 1980e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR32, 0x00, 0x00, 0x00, 0x00}; 1981e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1982e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1983e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ("", result); 1984e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1985e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Test STR32 with max STR16 + 1 bytes. It's not practical to test max 1986e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // STR32. 1987e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR32, 0x00, 0x00, 0x01, 0x00}; 1988e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0x10000, 'x'); 1989e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 1990e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 1991e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::string(0x10000, 'x'), result); 1992e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 1993e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1994e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, vector) { 1995e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 1996e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<std::uint8_t, DefaultInitializationAllocator<std::uint8_t>> 1997e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result; 1998e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload expected; 1999e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2000e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2001e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 2002e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN}; 2003e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2004e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2005e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2006e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2007e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2008e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 2009e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MAX}; 2010e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4) - 1, 1); 2011e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2012e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)((1 << 4) - 1, 1); 2013e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2014e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2015e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2016e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 2017e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0x00, 0x00}; 2018e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2019e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2020e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2021e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2022e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2023e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 2024e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 2025e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0xffff, 1); 2026e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2027e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)(0xffff, 1); 2028e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2029e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2030e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2031e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 2032e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x00, 0x00}; 2033e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2034e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2035e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2036e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2037e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2038e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // ARRAY32 with max ARRAY16 + 1. It's not practical to test max ARRAY32. 2039e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 2040e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0x10000, 1); 2041e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2042e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)(0x10000, 1); 2043e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2044e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2045e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2046e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2047e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, map) { 2048e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2049e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::map<std::uint32_t, std::uint32_t> result; 2050e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::map<std::uint32_t, std::uint32_t> expected; 2051e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2052e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2053e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXMAP. 2054e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN}; 2055e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2056e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2057e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2058e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2059e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2060e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Size mismatch. 2061e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1}; 2062e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2063e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::INSUFFICIENT_BUFFER, error); 2064e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2065e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXMAP. 2066e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MAX}; 2067e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 4) - 1); 2068e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2069e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 4) - 1); 2070e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error) << std::string(error); 2071e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2072e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2073e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP16. 2074e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP16, 0x00, 0x00}; 2075e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2076e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2077e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2078e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2079e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2080e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max MAP16. 2081e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP16, 0xff, 0xff}; 2082e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 16) - 1); 2083e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2084e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 16) - 1); 2085e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2086e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2087e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2088e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP32. 2089e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x00, 0x00}; 2090e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2091e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2092e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2093e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2094e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2095e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // MAP32 with max MAP16 + 1. It's not practical to test max MAP32. 2096e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x01, 0x00}; 2097e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 16)); 2098e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2099e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 16)); 2100e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2101e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2102e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2103e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2104e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, unordered_map) { 2105e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2106e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::unordered_map<std::uint32_t, std::uint32_t> result; 2107e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::unordered_map<std::uint32_t, std::uint32_t> expected; 2108e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2109e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2110e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXMAP. 2111e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN}; 2112e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2113e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2114e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2115e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2116e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2117e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Size mismatch. 2118e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1}; 2119e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2120e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::INSUFFICIENT_BUFFER, error); 2121e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2122e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXMAP. 2123e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MAX}; 2124e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 4) - 1); 2125e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2126e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 4) - 1); 2127e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2128e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2129e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2130e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP16. 2131e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP16, 0x00, 0x00}; 2132e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2133e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2134e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2135e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2136e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2137e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max MAP16. 2138e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP16, 0xff, 0xff}; 2139e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 16) - 1); 2140e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2141e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 16) - 1); 2142e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2143e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2144e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2145e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min MAP32. 2146e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x00, 0x00}; 2147e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2148e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2149e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2150e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2151e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2152e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // MAP32 with max MAP16 + 1. It's not practical to test max MAP32. 2153e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_MAP32, 0x00, 0x00, 0x01, 0x00}; 2154e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko InsertKeyValue<decltype(result)>(&buffer, (1 << 16)); 2155e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&result, &buffer); 2156e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = MakeMap<decltype(expected)>((1 << 16)); 2157e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2158e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2159e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2160e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2161e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, array) { 2162e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2163e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2164e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2165e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 2166e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN}; 2167e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, 0> a0; 2168e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a0, &buffer); 2169e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2170e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2171e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Size mismatch. 2172e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN + 1}; 2173e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a0, &buffer); 2174e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::INSUFFICIENT_DESTINATION_SIZE, error); 2175e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2176e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 2177e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MAX}; 2178e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4) - 1, 'x'); 2179e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 4) - 1> a1, expected1; 2180e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : expected1) 2181e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 2182e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a1, &buffer); 2183e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2184e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected1, a1); 2185e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2186e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 2187e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0x00, 0x00}; 2188e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a0, &buffer); 2189e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2190e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2191e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 2192e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 2193e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 16) - 1, 'x'); 2194e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 16) - 1> a3, expected3; 2195e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : expected3) 2196e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 2197e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a3, &buffer); 2198e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2199e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected3, a3); 2200e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2201e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 2202e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x00, 0x00}; 2203e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a0, &buffer); 2204e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2205e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2206e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // ARRAY32 with max ARRAY16 + 1. It's not practical to test max ARRAY32. 2207e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 2208e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 16), 'x'); 2209e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::array<std::uint8_t, (1 << 16)> a4, expected4; 2210e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko for (auto& element : expected4) 2211e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko element = 'x'; 2212e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&a4, &buffer); 2213e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2214e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected4, a4); 2215e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2216e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2217e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, ArrayWrapper) { 2218e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2219e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<std::uint8_t, DefaultInitializationAllocator<std::uint8_t>> 2220e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result; 2221e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<std::uint8_t, DefaultInitializationAllocator<std::uint8_t>> 2222e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected; 2223e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2224e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2225e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.reserve(0x10000); 2226e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ArrayWrapper<std::uint8_t> wrapper(result.data(), result.capacity()); 2227e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2228e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 2229e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN}; 2230e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2231e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2232e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2233e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2234e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2235e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2236e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 2237e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MAX}; 2238e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4) - 1, 1); 2239e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2240e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)((1 << 4) - 1, 1); 2241e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2242e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2243e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2244e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2245e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 2246e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0x00, 0x00}; 2247e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2248e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2249e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2250e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2251e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2252e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2253e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max ARRAY16. 2254e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0xff, 0xff}; 2255e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0xffff, 1); 2256e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2257e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)(0xffff, 1); 2258e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2259e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2260e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2261e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2262e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 2263e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x00, 0x00}; 2264e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2265e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = {}; 2266e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2267e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2268e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2269e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2270e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // ARRAY32 with max ARRAY16 + 1. It's not practical to test max ARRAY32. 2271e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x01, 0x00}; 2272e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append(0x10000, 1); 2273e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&wrapper, &buffer); 2274e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko expected = decltype(expected)(0x10000, 1); 2275e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko result.resize(wrapper.size()); 2276e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2277e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(expected, result); 2278e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2279e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2280e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, pair) { 2281e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2282e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2283e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2284e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::pair<int, int> p1; 2285e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN + 2, 1, 2}; 2286e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&p1, &buffer); 2287e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2288e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::make_pair(1, 2), p1); 2289e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2290e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2291e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, tuple) { 2292e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2293e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2294e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2295e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min FIXARRAY. 2296e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::tuple<> t1; 2297e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN}; 2298e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t1, &buffer); 2299e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2300e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::make_tuple(), t1); // Superfluous. 2301e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2302e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Max FIXARRAY. 2303e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t2 = GetNTuple<15, int>(0); 2304e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MAX}; 2305e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4) - 1, 1); 2306e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t2, &buffer); 2307e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2308e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ((GetNTuple<15, int>(1)), t2); 2309e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2310e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY16. 2311e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Using t1 above. 2312e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0x00, 0x00}; 2313e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t1, &buffer); 2314e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2315e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::make_tuple(), t1); 2316e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2317e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // ARRAY16 at Max FIXARRAY + 1 2318e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t3 = GetNTuple<(1 << 4), int>(0); 2319e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY16, 0x10, 0x00}; 2320e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4), 1); 2321e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t3, &buffer); 2322e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2323e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ((GetNTuple<(1 << 4), int>(1)), t3); 2324e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2325e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Min ARRAY32. 2326e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Using t1 from above. 2327e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x00, 0x00, 0x00, 0x00}; 2328e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t1, &buffer); 2329e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2330e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(std::make_tuple(), t1); 2331e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2332e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // ARRAY32 at Max FIXARRAY + 1 2333e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko auto t4 = GetNTuple<(1 << 4), int>(0); 2334e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_ARRAY32, 0x10, 0x00, 0x00, 0x00}; 2335e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer.Append((1 << 4), 1); 2336e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t4, &buffer); 2337e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2338e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ((GetNTuple<(1 << 4), int>(1)), t4); 2339e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2340e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Template instantiation depth is an issue for tuples with large numbers of 2341e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // elements. As these are not expected in practice, the limits of ARRAY16 2342e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // and ARRAY32 are not tested. 2343e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2344e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2345e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, Serializable) { 2346e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2347e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2348e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2349e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = decltype(buffer)( 2350e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko {ENCODING_TYPE_FIXARRAY_MIN + 4, 10, ENCODING_TYPE_FLOAT32, 2351e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[0], kZeroFloatBytes[1], kZeroFloatBytes[2], 2352e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kZeroFloatBytes[3], ENCODING_TYPE_FIXSTR_MIN + 5, '1', '2', '3', '4', 2353e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko '5', ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1}); 2354e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestType t1; 2355e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t1, &buffer); 2356e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2357e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(TestType(10, 0.f, "12345", TestType::Foo::kBar), t1); 2358e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2359e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = 2360e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko decltype(buffer)({ENCODING_TYPE_FIXARRAY_MIN + 1, ENCODING_TYPE_FIXEXT2, 2361e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_EXT_TYPE_FILE_DESCRIPTOR, 0xff, 0xff}); 2362e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko TestTemplateType<LocalHandle> tt; 2363e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&tt, &buffer); 2364e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2365e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(TestTemplateType<LocalHandle>(LocalHandle(-1)), tt); 2366e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2367e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2368e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, Variant) { 2369e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2370e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2371e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2372e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Variant<int, bool, float> v; 2373e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2374e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1, ENCODING_TYPE_NEGATIVE_FIXINT_MAX, 2375e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_NIL}; 2376e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2377e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2378e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_TRUE(v.empty()); 2379e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2380e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1, ENCODING_TYPE_POSITIVE_FIXINT_MIN + 0, 2381e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 10}; 2382e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2383e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2384e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ASSERT_TRUE(v.is<int>()); 2385e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(10, std::get<int>(v)); 2386e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2387e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1, ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1, 2388e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_TRUE}; 2389e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2390e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2391e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ASSERT_TRUE(v.is<bool>()); 2392e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(true, std::get<bool>(v)); 2393e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2394e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1, ENCODING_TYPE_POSITIVE_FIXINT_MIN + 1, 2395e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FALSE}; 2396e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2397e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2398e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ASSERT_TRUE(v.is<bool>()); 2399e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(false, std::get<bool>(v)); 2400e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2401e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXMAP_MIN + 1, 2402e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_POSITIVE_FIXINT_MIN + 2, 2403e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ENCODING_TYPE_FLOAT32, 2404e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[0], 2405e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[1], 2406e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[2], 2407e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko kOneFloatBytes[3]}; 2408e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2409e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::NO_ERROR, error); 2410e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ASSERT_TRUE(v.is<float>()); 2411e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_FLOAT_EQ(1.0, std::get<float>(v)); 2412e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2413e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // TODO(eieio): Add more deserialization tests for Variant. 2414e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2415e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2416e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoTEST(DeserializationTest, ErrorType) { 2417e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Payload buffer; 2418e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ErrorType error; 2419e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2420e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint8_t u8; 2421e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2422e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&u8, &buffer); 2423e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2424e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 2425e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2426e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2427e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint16_t u16; 2428e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2429e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&u16, &buffer); 2430e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2431e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 2432e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2433e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2434e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint32_t u32; 2435e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2436e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&u32, &buffer); 2437e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2438e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 2439e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2440e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2441e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::uint64_t u64; 2442e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2443e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&u64, &buffer); 2444e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2445e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 2446e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2447e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2448e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int8_t i8; 2449e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2450e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&i8, &buffer); 2451e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2452e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 2453e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2454e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2455e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int16_t i16; 2456e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2457e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&i16, &buffer); 2458e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2459e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 2460e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2461e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2462e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int32_t i32; 2463e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2464e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&i32, &buffer); 2465e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2466e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 2467e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2468e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2469e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::int64_t i64; 2470e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_STR8}; 2471e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&i64, &buffer); 2472e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2473e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_INT, error.encoding_class()); 2474e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2475e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2476e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::string s; 2477e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT}; 2478e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&s, &buffer); 2479e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2480e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_STRING, error.encoding_class()); 2481e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_POSITIVE_FIXINT, error.encoding_type()); 2482e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2483e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::vector<std::uint8_t> v; 2484e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_POSITIVE_FIXINT}; 2485e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2486e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2487e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_ARRAY, error.encoding_class()); 2488e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_POSITIVE_FIXINT, error.encoding_type()); 2489e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2490e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN + 1, ENCODING_TYPE_STR8}; 2491e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&v, &buffer); 2492e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_ENCODING, error); 2493e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_CLASS_UINT, error.encoding_class()); 2494e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ENCODING_TYPE_STR8, error.encoding_type()); 2495e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2496e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN + 2, 0, 1}; 2497e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::tuple<int> t; 2498e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&t, &buffer); 2499e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_TYPE_SIZE, error); 2500e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 2501e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko buffer = {ENCODING_TYPE_FIXARRAY_MIN + 3, 0, 1, 2}; 2502e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko std::pair<int, int> p; 2503e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko error = Deserialize(&p, &buffer); 2504e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko EXPECT_EQ(ErrorCode::UNEXPECTED_TYPE_SIZE, error); 2505e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 2506