zig_zag_ut.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <library/cpp/testing/gtest/gtest.h>
  2. #include <library/cpp/yt/coding/zig_zag.h>
  3. namespace NYT {
  4. namespace {
  5. ////////////////////////////////////////////////////////////////////////////////
  6. TEST(TZigZagTest, Encode32)
  7. {
  8. EXPECT_EQ(0u, ZigZagEncode32( 0));
  9. EXPECT_EQ(1u, ZigZagEncode32(-1));
  10. EXPECT_EQ(2u, ZigZagEncode32( 1));
  11. EXPECT_EQ(3u, ZigZagEncode32(-2));
  12. // ...
  13. EXPECT_EQ(std::numeric_limits<ui32>::max() - 1, ZigZagEncode32(std::numeric_limits<i32>::max()));
  14. EXPECT_EQ(std::numeric_limits<ui32>::max(), ZigZagEncode32(std::numeric_limits<i32>::min()));
  15. }
  16. TEST(TZigZagTest, Decode32)
  17. {
  18. EXPECT_EQ( 0, ZigZagDecode32(0));
  19. EXPECT_EQ(-1, ZigZagDecode32(1));
  20. EXPECT_EQ( 1, ZigZagDecode32(2));
  21. EXPECT_EQ(-2, ZigZagDecode32(3));
  22. // ...
  23. EXPECT_EQ(std::numeric_limits<i32>::max(), ZigZagDecode32(std::numeric_limits<ui32>::max() - 1));
  24. EXPECT_EQ(std::numeric_limits<i32>::min(), ZigZagDecode32(std::numeric_limits<ui32>::max()));
  25. }
  26. TEST(TZigZagTest, Encode64)
  27. {
  28. EXPECT_EQ(0ull, ZigZagEncode64( 0));
  29. EXPECT_EQ(1ull, ZigZagEncode64(-1));
  30. EXPECT_EQ(2ull, ZigZagEncode64( 1));
  31. EXPECT_EQ(3ull, ZigZagEncode64(-2));
  32. // ...
  33. EXPECT_EQ(std::numeric_limits<ui64>::max() - 1, ZigZagEncode64(std::numeric_limits<i64>::max()));
  34. EXPECT_EQ(std::numeric_limits<ui64>::max(), ZigZagEncode64(std::numeric_limits<i64>::min()));
  35. }
  36. TEST(TZigZagTest, Decode64)
  37. {
  38. EXPECT_EQ(ZigZagDecode64(0), 0ll);
  39. EXPECT_EQ(ZigZagDecode64(1), -1ll);
  40. EXPECT_EQ(ZigZagDecode64(2), 1ll);
  41. EXPECT_EQ(ZigZagDecode64(3), -2ll);
  42. // ...
  43. EXPECT_EQ(std::numeric_limits<i64>::max(), ZigZagDecode64(std::numeric_limits<ui64>::max() - 1));
  44. EXPECT_EQ(std::numeric_limits<i64>::min(), ZigZagDecode64(std::numeric_limits<ui64>::max()));
  45. }
  46. ////////////////////////////////////////////////////////////////////////////////
  47. } // namespace
  48. } // namespace NYT