123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- //===- IteratorTest.cpp - Unit tests for iterator utilities ---------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/ADT/iterator.h"
- #include "llvm/ADT/STLExtras.h"
- #include "llvm/ADT/SmallVector.h"
- #include "gtest/gtest.h"
- using namespace llvm;
- namespace {
- TEST(PointeeIteratorTest, Basic) {
- int arr[4] = { 1, 2, 3, 4 };
- SmallVector<int *, 4> V;
- V.push_back(&arr[0]);
- V.push_back(&arr[1]);
- V.push_back(&arr[2]);
- V.push_back(&arr[3]);
- typedef pointee_iterator<SmallVectorImpl<int *>::const_iterator> test_iterator;
- test_iterator Begin, End;
- Begin = V.begin();
- End = test_iterator(V.end());
- test_iterator I = Begin;
- for (int i = 0; i < 4; ++i) {
- EXPECT_EQ(*V[i], *I);
- EXPECT_EQ(I, Begin + i);
- EXPECT_EQ(I, std::next(Begin, i));
- test_iterator J = Begin;
- J += i;
- EXPECT_EQ(I, J);
- EXPECT_EQ(*V[i], Begin[i]);
- EXPECT_NE(I, End);
- EXPECT_GT(End, I);
- EXPECT_LT(I, End);
- EXPECT_GE(I, Begin);
- EXPECT_LE(Begin, I);
- EXPECT_EQ(i, I - Begin);
- EXPECT_EQ(i, std::distance(Begin, I));
- EXPECT_EQ(Begin, I - i);
- test_iterator K = I++;
- EXPECT_EQ(K, std::prev(I));
- }
- EXPECT_EQ(End, I);
- }
- TEST(PointeeIteratorTest, SmartPointer) {
- SmallVector<std::unique_ptr<int>, 4> V;
- V.push_back(make_unique<int>(1));
- V.push_back(make_unique<int>(2));
- V.push_back(make_unique<int>(3));
- V.push_back(make_unique<int>(4));
- typedef pointee_iterator<
- SmallVectorImpl<std::unique_ptr<int>>::const_iterator> test_iterator;
- test_iterator Begin, End;
- Begin = V.begin();
- End = test_iterator(V.end());
- test_iterator I = Begin;
- for (int i = 0; i < 4; ++i) {
- EXPECT_EQ(*V[i], *I);
- EXPECT_EQ(I, Begin + i);
- EXPECT_EQ(I, std::next(Begin, i));
- test_iterator J = Begin;
- J += i;
- EXPECT_EQ(I, J);
- EXPECT_EQ(*V[i], Begin[i]);
- EXPECT_NE(I, End);
- EXPECT_GT(End, I);
- EXPECT_LT(I, End);
- EXPECT_GE(I, Begin);
- EXPECT_LE(Begin, I);
- EXPECT_EQ(i, I - Begin);
- EXPECT_EQ(i, std::distance(Begin, I));
- EXPECT_EQ(Begin, I - i);
- test_iterator K = I++;
- EXPECT_EQ(K, std::prev(I));
- }
- EXPECT_EQ(End, I);
- }
- } // anonymous namespace
|