/* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the * LICENSE file in the root directory of this source tree) and the GPLv2 (found * in the COPYING file in the root directory of this source tree). */ #include "utils/Range.h" #include #include using namespace pzstd; // Range is directly copied from folly. // Just some sanity tests to make sure everything seems to work. TEST(Range, Constructors) { StringPiece empty; EXPECT_TRUE(empty.empty()); EXPECT_EQ(0, empty.size()); std::string str = "hello"; { Range piece(str.begin(), str.end()); EXPECT_EQ(5, piece.size()); EXPECT_EQ('h', *piece.data()); EXPECT_EQ('o', *(piece.end() - 1)); } { StringPiece piece(str.data(), str.size()); EXPECT_EQ(5, piece.size()); EXPECT_EQ('h', *piece.data()); EXPECT_EQ('o', *(piece.end() - 1)); } { StringPiece piece(str); EXPECT_EQ(5, piece.size()); EXPECT_EQ('h', *piece.data()); EXPECT_EQ('o', *(piece.end() - 1)); } { StringPiece piece(str.c_str()); EXPECT_EQ(5, piece.size()); EXPECT_EQ('h', *piece.data()); EXPECT_EQ('o', *(piece.end() - 1)); } } TEST(Range, Modifiers) { StringPiece range("hello world"); ASSERT_EQ(11, range.size()); { auto hello = range.subpiece(0, 5); EXPECT_EQ(5, hello.size()); EXPECT_EQ('h', *hello.data()); EXPECT_EQ('o', *(hello.end() - 1)); } { auto hello = range; hello.subtract(6); EXPECT_EQ(5, hello.size()); EXPECT_EQ('h', *hello.data()); EXPECT_EQ('o', *(hello.end() - 1)); } { auto world = range; world.advance(6); EXPECT_EQ(5, world.size()); EXPECT_EQ('w', *world.data()); EXPECT_EQ('d', *(world.end() - 1)); } std::string expected = "hello world"; EXPECT_EQ(expected, std::string(range.begin(), range.end())); EXPECT_EQ(expected, std::string(range.data(), range.size())); }