test_WireFormatter.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "gtest/gtest.h"
  2. #include <WireFormatter.h>
  3. #include <cstdint>
  4. #include <limits>
  5. namespace test_EmbeddedAMS_WireFormatter
  6. {
  7. TEST(WireFormatter, MakeTag)
  8. {
  9. // Varints
  10. EXPECT_EQ(0x0000, ::EmbeddedProto::WireFormatter::MakeTag(0, ::EmbeddedProto::WireFormatter::WireType::VARINT));
  11. EXPECT_EQ(0x0008, ::EmbeddedProto::WireFormatter::MakeTag(1, ::EmbeddedProto::WireFormatter::WireType::VARINT));
  12. EXPECT_EQ(0x07F8, ::EmbeddedProto::WireFormatter::MakeTag(255, ::EmbeddedProto::WireFormatter::WireType::VARINT));
  13. // Doubles
  14. EXPECT_EQ(0x0001, ::EmbeddedProto::WireFormatter::MakeTag(0, ::EmbeddedProto::WireFormatter::WireType::FIXED64));
  15. EXPECT_EQ(0x0009, ::EmbeddedProto::WireFormatter::MakeTag(1, ::EmbeddedProto::WireFormatter::WireType::FIXED64));
  16. EXPECT_EQ(0x07F9, ::EmbeddedProto::WireFormatter::MakeTag(255, ::EmbeddedProto::WireFormatter::WireType::FIXED64));
  17. // Repeated fields
  18. EXPECT_EQ(0x0002, ::EmbeddedProto::WireFormatter::MakeTag(0, ::EmbeddedProto::WireFormatter::WireType::LENGTH_DELIMITED));
  19. EXPECT_EQ(0x000A, ::EmbeddedProto::WireFormatter::MakeTag(1, ::EmbeddedProto::WireFormatter::WireType::LENGTH_DELIMITED));
  20. EXPECT_EQ(0x07FA, ::EmbeddedProto::WireFormatter::MakeTag(255, ::EmbeddedProto::WireFormatter::WireType::LENGTH_DELIMITED));
  21. // Skip the depricated group type.
  22. // Floats
  23. EXPECT_EQ(0x0005, ::EmbeddedProto::WireFormatter::MakeTag(0, ::EmbeddedProto::WireFormatter::WireType::FIXED32));
  24. EXPECT_EQ(0x000D, ::EmbeddedProto::WireFormatter::MakeTag(1, ::EmbeddedProto::WireFormatter::WireType::FIXED32));
  25. EXPECT_EQ(0x07FD, ::EmbeddedProto::WireFormatter::MakeTag(255, ::EmbeddedProto::WireFormatter::WireType::FIXED32));
  26. }
  27. TEST(WireFormatter, WriteVarint32ToArray)
  28. {
  29. // There are five bytes required to encode a 32bit value, take one extra for checking the return
  30. // values.
  31. uint8_t target[6];
  32. EXPECT_EQ(&target[1], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(0, target));
  33. EXPECT_EQ(0, target[0]);
  34. EXPECT_EQ(&target[1], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(1, target));
  35. EXPECT_EQ(1, target[0]);
  36. // Edge case of the first byte.
  37. EXPECT_EQ(&target[1], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(127, target));
  38. EXPECT_EQ(127, target[0]);
  39. // Just over the first byte.
  40. EXPECT_EQ(&target[2], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(128, target));
  41. EXPECT_EQ(128, target[0]);
  42. EXPECT_EQ(1, target[1]);
  43. // Full first byte.
  44. EXPECT_EQ(&target[2], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(255, target));
  45. EXPECT_EQ(255, target[0]);
  46. EXPECT_EQ(1, target[1]);
  47. // Fast forward to the largest possible number.
  48. EXPECT_EQ(&target[5], ::EmbeddedProto::WireFormatter::WriteVarint32ToArray(std::numeric_limits<uint32_t>::max(), target));
  49. EXPECT_EQ(255, target[0]);
  50. EXPECT_EQ(255, target[1]);
  51. EXPECT_EQ(255, target[2]);
  52. EXPECT_EQ(255, target[3]);
  53. EXPECT_EQ(15, target[4]);
  54. }
  55. } // End of namespace test_EmbeddedAMS_WireFormatter