blob: cc0b63815cb6ff33925b3bfbb4558d07fae4a47a [file] [log] [blame]
// Copyright 2017-2020 The Verible Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "common/util/iterator_adaptors.h"
#include <initializer_list>
#include <list>
#include <set>
#include <type_traits>
#include <vector>
#include "gmock/gmock.h"
#include "gtest/gtest.h"
namespace verible {
namespace {
using ::testing::ElementsAre;
TEST(MakeReverseIteratorTest, EmptyVector) {
std::vector<int> v;
auto rend = verible::make_reverse_iterator(v.begin());
auto rbegin = verible::make_reverse_iterator(v.end());
EXPECT_EQ(rbegin, rend);
EXPECT_EQ(rend, rbegin);
EXPECT_THAT(make_range(rbegin, rend), ElementsAre());
}
TEST(MakeReverseIteratorTest, NonEmptyVector) {
std::vector<int> v{7, 8, 9};
auto rend = verible::make_reverse_iterator(v.begin());
auto rbegin = verible::make_reverse_iterator(v.end());
EXPECT_NE(rbegin, rend);
EXPECT_NE(rend, rbegin);
EXPECT_THAT(make_range(rbegin, rend), ElementsAre(9, 8, 7));
}
TEST(ReversedViewTest, EmptyVector) {
std::vector<int> v;
EXPECT_THAT(reversed_view(v), ElementsAre());
}
TEST(ReversedViewTest, NonEmptyVector) {
std::vector<int> v{5, 6, 7};
EXPECT_THAT(reversed_view(v), ElementsAre(7, 6, 5));
}
TEST(ReversedViewTest, EmptyList) {
std::list<int> v;
EXPECT_THAT(reversed_view(v), ElementsAre());
}
TEST(ReversedViewTest, NonEmptyList) {
std::list<int> v{1, 6, 7};
EXPECT_THAT(reversed_view(v), ElementsAre(7, 6, 1));
}
TEST(ReversedViewTest, EmptyInitList) {
std::initializer_list<int> v;
EXPECT_THAT(reversed_view(v), ElementsAre());
}
TEST(ReversedViewTest, NonEmptyInitList) {
std::initializer_list<int> v{5, 6, 8};
EXPECT_THAT(reversed_view(v), ElementsAre(8, 6, 5));
}
TEST(ReversedViewTest, EmptySet) {
std::set<int> v;
EXPECT_THAT(reversed_view(v), ElementsAre());
}
TEST(ReversedViewTest, NonEmptySet) {
std::set<int> v{3, 6, 7};
EXPECT_THAT(reversed_view(v), ElementsAre(7, 6, 3));
}
TEST(ConvertToMutableIteratorTest, Convert) {
std::vector<int> v{3, 6, 7};
const std::vector<int>::const_iterator const_it = v.cbegin() + 1;
auto it = ConvertToMutableIterator(const_it, v.begin());
static_assert(std::is_same_v<decltype(it), std::vector<int>::iterator>);
EXPECT_EQ(*it, 6);
*it = 42;
EXPECT_EQ(*it, 42);
EXPECT_EQ(v[1], 42);
}
} // namespace
} // namespace verible