2
0

BufferTest.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright (c) 2016-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under both the BSD-style license (found in the
  6. * LICENSE file in the root directory of this source tree) and the GPLv2 (found
  7. * in the COPYING file in the root directory of this source tree).
  8. */
  9. #include "utils/Buffer.h"
  10. #include "utils/Range.h"
  11. #include <gtest/gtest.h>
  12. #include <memory>
  13. using namespace pzstd;
  14. namespace {
  15. void deleter(const unsigned char* buf) {
  16. delete[] buf;
  17. }
  18. }
  19. TEST(Buffer, Constructors) {
  20. Buffer empty;
  21. EXPECT_TRUE(empty.empty());
  22. EXPECT_EQ(0, empty.size());
  23. Buffer sized(5);
  24. EXPECT_FALSE(sized.empty());
  25. EXPECT_EQ(5, sized.size());
  26. Buffer moved(std::move(sized));
  27. EXPECT_FALSE(sized.empty());
  28. EXPECT_EQ(5, sized.size());
  29. Buffer assigned;
  30. assigned = std::move(moved);
  31. EXPECT_FALSE(sized.empty());
  32. EXPECT_EQ(5, sized.size());
  33. }
  34. TEST(Buffer, BufferManagement) {
  35. std::shared_ptr<unsigned char> buf(new unsigned char[10], deleter);
  36. {
  37. Buffer acquired(buf, MutableByteRange(buf.get(), buf.get() + 10));
  38. EXPECT_EQ(2, buf.use_count());
  39. Buffer moved(std::move(acquired));
  40. EXPECT_EQ(2, buf.use_count());
  41. Buffer assigned;
  42. assigned = std::move(moved);
  43. EXPECT_EQ(2, buf.use_count());
  44. Buffer split = assigned.splitAt(5);
  45. EXPECT_EQ(3, buf.use_count());
  46. split.advance(1);
  47. assigned.subtract(1);
  48. EXPECT_EQ(3, buf.use_count());
  49. }
  50. EXPECT_EQ(1, buf.use_count());
  51. }
  52. TEST(Buffer, Modifiers) {
  53. Buffer buf(10);
  54. {
  55. unsigned char i = 0;
  56. for (auto& byte : buf.range()) {
  57. byte = i++;
  58. }
  59. }
  60. auto prefix = buf.splitAt(2);
  61. ASSERT_EQ(2, prefix.size());
  62. EXPECT_EQ(0, *prefix.data());
  63. ASSERT_EQ(8, buf.size());
  64. EXPECT_EQ(2, *buf.data());
  65. buf.advance(2);
  66. EXPECT_EQ(4, *buf.data());
  67. EXPECT_EQ(9, *(buf.range().end() - 1));
  68. buf.subtract(2);
  69. EXPECT_EQ(7, *(buf.range().end() - 1));
  70. EXPECT_EQ(4, buf.size());
  71. }