deserializationtest.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*
  2. * MIT License
  3. *
  4. * Copyright (c) 2019 Alexey Edelev <semlanik@gmail.com>
  5. *
  6. * This file is part of qtprotobuf project https://git.semlanik.org/semlanik/qtprotobuf
  7. *
  8. * Permission is hereby granted, free of charge, to any person obtaining a copy of this
  9. * software and associated documentation files (the "Software"), to deal in the Software
  10. * without restriction, including without limitation the rights to use, copy, modify,
  11. * merge, publish, distribute, sublicense, and/or sell copies of the Software, and
  12. * to permit persons to whom the Software is furnished to do so, subject to the following
  13. * conditions:
  14. *
  15. * The above copyright notice and this permission notice shall be included in all copies
  16. * or substantial portions of the Software.
  17. *
  18. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  19. * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  20. * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
  21. * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  22. * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  23. * DEALINGS IN THE SOFTWARE.
  24. */
  25. #include "deserializationtest.h"
  26. #include "qtprotobuf.h"
  27. #include "simplefixedint32message.h"
  28. #include "simplefixedint64message.h"
  29. #include "simplefloatmessage.h"
  30. #include "simpledoublemessage.h"
  31. #include "simpleintmessage.h"
  32. using namespace qtprotobufnamespace::tests;
  33. using namespace qtprotobuf::tests;
  34. using namespace qtprotobuf;
  35. DeserializationTest::DeserializationTest()
  36. {
  37. QtProtobuf::init();
  38. }
  39. TEST_F(DeserializationTest, FixedInt32MessageDeserializeTest)
  40. {
  41. SimpleFixedInt32Message test;
  42. test.deserialize(QByteArray::fromHex("0d0f000000"));
  43. ASSERT_EQ(test.testFieldFixedInt32(), 15);
  44. test.deserialize(QByteArray::fromHex("0d2c010000"));
  45. ASSERT_EQ(test.testFieldFixedInt32(), 300);
  46. test.deserialize(QByteArray::fromHex("0d09000100"));
  47. ASSERT_EQ(test.testFieldFixedInt32(), 65545);
  48. test.deserialize(QByteArray::fromHex("0d00000000"));
  49. ASSERT_EQ(test.testFieldFixedInt32(), 0);
  50. test.deserialize(QByteArray::fromHex("0d2c010000"));
  51. ASSERT_EQ(test.testFieldFixedInt32(), 300);
  52. test.deserialize(QByteArray::fromHex("0d00010000"));
  53. ASSERT_EQ(test.testFieldFixedInt32(), UINT8_MAX + 1);
  54. test.deserialize(QByteArray::fromHex("0d00000100"));
  55. ASSERT_EQ(test.testFieldFixedInt32(), UINT16_MAX + 1);
  56. test.deserialize(QByteArray::fromHex("0dff000000"));
  57. ASSERT_EQ(test.testFieldFixedInt32(), UINT8_MAX);
  58. test.deserialize(QByteArray::fromHex("0dffff0000"));
  59. ASSERT_EQ(test.testFieldFixedInt32(), UINT16_MAX);
  60. test.deserialize(QByteArray::fromHex("0dffffffff"));
  61. ASSERT_EQ(test.testFieldFixedInt32(), UINT32_MAX);
  62. }
  63. TEST_F(DeserializationTest, FixedInt64MessageDeserializeTest)
  64. {
  65. SimpleFixedInt64Message test;
  66. test.deserialize(QByteArray::fromHex("090f00000000000000"));
  67. ASSERT_EQ(test.testFieldFixedInt64(), 15);
  68. test.deserialize(QByteArray::fromHex("092c01000000000000"));
  69. ASSERT_EQ(test.testFieldFixedInt64(), 300);
  70. test.deserialize(QByteArray::fromHex("090900010000000000"));
  71. ASSERT_EQ(test.testFieldFixedInt64(), 65545);
  72. test.deserialize(QByteArray::fromHex("090000000000000000"));
  73. ASSERT_EQ(test.testFieldFixedInt64(), 0);
  74. test.deserialize(QByteArray::fromHex("090001000000000000"));
  75. ASSERT_EQ(test.testFieldFixedInt64(), UINT8_MAX + 1);
  76. test.deserialize(QByteArray::fromHex("090000010000000000"));
  77. ASSERT_EQ(test.testFieldFixedInt64(), UINT16_MAX + 1);
  78. test.deserialize(QByteArray::fromHex("090000000001000000"));
  79. ASSERT_EQ(test.testFieldFixedInt64(), (unsigned long long)(UINT32_MAX) + 1);
  80. test.deserialize(QByteArray::fromHex("09ff00000000000000"));
  81. ASSERT_EQ(test.testFieldFixedInt64(), UINT8_MAX);
  82. test.deserialize(QByteArray::fromHex("09ffff000000000000"));
  83. ASSERT_EQ(test.testFieldFixedInt64(), UINT16_MAX);
  84. test.deserialize(QByteArray::fromHex("09ffffffff00000000"));
  85. ASSERT_EQ(test.testFieldFixedInt64(), UINT32_MAX);
  86. test.deserialize(QByteArray::fromHex("09ffffffffffffffff"));
  87. ASSERT_EQ(test.testFieldFixedInt64(), UINT64_MAX);
  88. }
  89. TEST_F(DeserializationTest, FloatMessageDeserializeTest)
  90. {
  91. SimpleFloatMessage test;
  92. test.deserialize(QByteArray::fromHex("3dcdcccc3d"));
  93. ASSERT_FLOAT_EQ(test.testFieldFloat(), 0.1f);
  94. test.deserialize(QByteArray::fromHex("3d00008000"));
  95. ASSERT_FLOAT_EQ(test.testFieldFloat(), FLT_MIN);
  96. test.deserialize(QByteArray::fromHex("3dffff7f7f"));
  97. ASSERT_FLOAT_EQ(test.testFieldFloat(), FLT_MAX);
  98. test.deserialize(QByteArray::fromHex("3d666686c0"));
  99. ASSERT_FLOAT_EQ(test.testFieldFloat(), -4.2f);
  100. test.deserialize(QByteArray::fromHex("3d00000000"));
  101. ASSERT_FLOAT_EQ(test.testFieldFloat(), -0.0f);
  102. }
  103. TEST_F(DeserializationTest, DoubleMessageDeserializeTest)
  104. {
  105. SimpleDoubleMessage test;
  106. test.deserialize(QByteArray::fromHex("419a9999999999b93f"));
  107. ASSERT_DOUBLE_EQ(0.1, test.testFieldDouble());
  108. test.deserialize(QByteArray::fromHex("410000000000001000"));
  109. ASSERT_DOUBLE_EQ(DBL_MIN, test.testFieldDouble());
  110. test.deserialize(QByteArray::fromHex("41ffffffffffffef7f"));
  111. ASSERT_DOUBLE_EQ(DBL_MAX, test.testFieldDouble());
  112. test.deserialize(QByteArray::fromHex("41cdcccccccccc10c0"));
  113. ASSERT_DOUBLE_EQ(-4.2, test.testFieldDouble());
  114. test.deserialize(QByteArray::fromHex("410000000000000000"));
  115. ASSERT_DOUBLE_EQ(0.0, test.testFieldDouble());
  116. }
  117. TEST_F(DeserializationTest, IntMessageDeserializeTest)
  118. {
  119. SimpleIntMessage test;
  120. test.deserialize(QByteArray::fromHex("081e"));
  121. ASSERT_EQ(15, test.testFieldInt());
  122. }