mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Based on review feedback from Dave on the original patch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207146 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- 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
 |