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