| // 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 |