Home | History | Annotate | Line # | Download | only in test
      1  1.1  christos /*
      2  1.1  christos  * Copyright (c) Meta Platforms, Inc. and affiliates.
      3  1.1  christos  * All rights reserved.
      4  1.1  christos  *
      5  1.1  christos  * This source code is licensed under both the BSD-style license (found in the
      6  1.1  christos  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
      7  1.1  christos  * in the COPYING file in the root directory of this source tree).
      8  1.1  christos  */
      9  1.1  christos #include "utils/Range.h"
     10  1.1  christos 
     11  1.1  christos #include <gtest/gtest.h>
     12  1.1  christos #include <string>
     13  1.1  christos 
     14  1.1  christos using namespace pzstd;
     15  1.1  christos 
     16  1.1  christos // Range is directly copied from folly.
     17  1.1  christos // Just some sanity tests to make sure everything seems to work.
     18  1.1  christos 
     19  1.1  christos TEST(Range, Constructors) {
     20  1.1  christos   StringPiece empty;
     21  1.1  christos   EXPECT_TRUE(empty.empty());
     22  1.1  christos   EXPECT_EQ(0, empty.size());
     23  1.1  christos 
     24  1.1  christos   std::string str = "hello";
     25  1.1  christos   {
     26  1.1  christos     Range<std::string::const_iterator> piece(str.begin(), str.end());
     27  1.1  christos     EXPECT_EQ(5, piece.size());
     28  1.1  christos     EXPECT_EQ('h', *piece.data());
     29  1.1  christos     EXPECT_EQ('o', *(piece.end() - 1));
     30  1.1  christos   }
     31  1.1  christos 
     32  1.1  christos   {
     33  1.1  christos     StringPiece piece(str.data(), str.size());
     34  1.1  christos     EXPECT_EQ(5, piece.size());
     35  1.1  christos     EXPECT_EQ('h', *piece.data());
     36  1.1  christos     EXPECT_EQ('o', *(piece.end() - 1));
     37  1.1  christos   }
     38  1.1  christos 
     39  1.1  christos   {
     40  1.1  christos     StringPiece piece(str);
     41  1.1  christos     EXPECT_EQ(5, piece.size());
     42  1.1  christos     EXPECT_EQ('h', *piece.data());
     43  1.1  christos     EXPECT_EQ('o', *(piece.end() - 1));
     44  1.1  christos   }
     45  1.1  christos 
     46  1.1  christos   {
     47  1.1  christos     StringPiece piece(str.c_str());
     48  1.1  christos     EXPECT_EQ(5, piece.size());
     49  1.1  christos     EXPECT_EQ('h', *piece.data());
     50  1.1  christos     EXPECT_EQ('o', *(piece.end() - 1));
     51  1.1  christos   }
     52  1.1  christos }
     53  1.1  christos 
     54  1.1  christos TEST(Range, Modifiers) {
     55  1.1  christos   StringPiece range("hello world");
     56  1.1  christos   ASSERT_EQ(11, range.size());
     57  1.1  christos 
     58  1.1  christos   {
     59  1.1  christos     auto hello = range.subpiece(0, 5);
     60  1.1  christos     EXPECT_EQ(5, hello.size());
     61  1.1  christos     EXPECT_EQ('h', *hello.data());
     62  1.1  christos     EXPECT_EQ('o', *(hello.end() - 1));
     63  1.1  christos   }
     64  1.1  christos   {
     65  1.1  christos     auto hello = range;
     66  1.1  christos     hello.subtract(6);
     67  1.1  christos     EXPECT_EQ(5, hello.size());
     68  1.1  christos     EXPECT_EQ('h', *hello.data());
     69  1.1  christos     EXPECT_EQ('o', *(hello.end() - 1));
     70  1.1  christos   }
     71  1.1  christos   {
     72  1.1  christos     auto world = range;
     73  1.1  christos     world.advance(6);
     74  1.1  christos     EXPECT_EQ(5, world.size());
     75  1.1  christos     EXPECT_EQ('w', *world.data());
     76  1.1  christos     EXPECT_EQ('d', *(world.end() - 1));
     77  1.1  christos   }
     78  1.1  christos 
     79  1.1  christos   std::string expected = "hello world";
     80  1.1  christos   EXPECT_EQ(expected, std::string(range.begin(), range.end()));
     81  1.1  christos   EXPECT_EQ(expected, std::string(range.data(), range.size()));
     82  1.1  christos }
     83