xref: /aosp_15_r20/external/zstd/contrib/pzstd/utils/test/RangeTest.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/Range.h"
10*01826a49SYabin Cui 
11*01826a49SYabin Cui #include <gtest/gtest.h>
12*01826a49SYabin Cui #include <string>
13*01826a49SYabin Cui 
14*01826a49SYabin Cui using namespace pzstd;
15*01826a49SYabin Cui 
16*01826a49SYabin Cui // Range is directly copied from folly.
17*01826a49SYabin Cui // Just some sanity tests to make sure everything seems to work.
18*01826a49SYabin Cui 
TEST(Range,Constructors)19*01826a49SYabin Cui TEST(Range, Constructors) {
20*01826a49SYabin Cui   StringPiece empty;
21*01826a49SYabin Cui   EXPECT_TRUE(empty.empty());
22*01826a49SYabin Cui   EXPECT_EQ(0, empty.size());
23*01826a49SYabin Cui 
24*01826a49SYabin Cui   std::string str = "hello";
25*01826a49SYabin Cui   {
26*01826a49SYabin Cui     Range<std::string::const_iterator> piece(str.begin(), str.end());
27*01826a49SYabin Cui     EXPECT_EQ(5, piece.size());
28*01826a49SYabin Cui     EXPECT_EQ('h', *piece.data());
29*01826a49SYabin Cui     EXPECT_EQ('o', *(piece.end() - 1));
30*01826a49SYabin Cui   }
31*01826a49SYabin Cui 
32*01826a49SYabin Cui   {
33*01826a49SYabin Cui     StringPiece piece(str.data(), str.size());
34*01826a49SYabin Cui     EXPECT_EQ(5, piece.size());
35*01826a49SYabin Cui     EXPECT_EQ('h', *piece.data());
36*01826a49SYabin Cui     EXPECT_EQ('o', *(piece.end() - 1));
37*01826a49SYabin Cui   }
38*01826a49SYabin Cui 
39*01826a49SYabin Cui   {
40*01826a49SYabin Cui     StringPiece piece(str);
41*01826a49SYabin Cui     EXPECT_EQ(5, piece.size());
42*01826a49SYabin Cui     EXPECT_EQ('h', *piece.data());
43*01826a49SYabin Cui     EXPECT_EQ('o', *(piece.end() - 1));
44*01826a49SYabin Cui   }
45*01826a49SYabin Cui 
46*01826a49SYabin Cui   {
47*01826a49SYabin Cui     StringPiece piece(str.c_str());
48*01826a49SYabin Cui     EXPECT_EQ(5, piece.size());
49*01826a49SYabin Cui     EXPECT_EQ('h', *piece.data());
50*01826a49SYabin Cui     EXPECT_EQ('o', *(piece.end() - 1));
51*01826a49SYabin Cui   }
52*01826a49SYabin Cui }
53*01826a49SYabin Cui 
TEST(Range,Modifiers)54*01826a49SYabin Cui TEST(Range, Modifiers) {
55*01826a49SYabin Cui   StringPiece range("hello world");
56*01826a49SYabin Cui   ASSERT_EQ(11, range.size());
57*01826a49SYabin Cui 
58*01826a49SYabin Cui   {
59*01826a49SYabin Cui     auto hello = range.subpiece(0, 5);
60*01826a49SYabin Cui     EXPECT_EQ(5, hello.size());
61*01826a49SYabin Cui     EXPECT_EQ('h', *hello.data());
62*01826a49SYabin Cui     EXPECT_EQ('o', *(hello.end() - 1));
63*01826a49SYabin Cui   }
64*01826a49SYabin Cui   {
65*01826a49SYabin Cui     auto hello = range;
66*01826a49SYabin Cui     hello.subtract(6);
67*01826a49SYabin Cui     EXPECT_EQ(5, hello.size());
68*01826a49SYabin Cui     EXPECT_EQ('h', *hello.data());
69*01826a49SYabin Cui     EXPECT_EQ('o', *(hello.end() - 1));
70*01826a49SYabin Cui   }
71*01826a49SYabin Cui   {
72*01826a49SYabin Cui     auto world = range;
73*01826a49SYabin Cui     world.advance(6);
74*01826a49SYabin Cui     EXPECT_EQ(5, world.size());
75*01826a49SYabin Cui     EXPECT_EQ('w', *world.data());
76*01826a49SYabin Cui     EXPECT_EQ('d', *(world.end() - 1));
77*01826a49SYabin Cui   }
78*01826a49SYabin Cui 
79*01826a49SYabin Cui   std::string expected = "hello world";
80*01826a49SYabin Cui   EXPECT_EQ(expected, std::string(range.begin(), range.end()));
81*01826a49SYabin Cui   EXPECT_EQ(expected, std::string(range.data(), range.size()));
82*01826a49SYabin Cui }
83