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