1
- // ===--- TransformArrayRefTest .cpp ----------------------------------------===//
1
+ // ===--- TransformRangeTest .cpp --- ----------------------------------------===//
2
2
//
3
3
// This source file is part of the Swift.org open source project
4
4
//
5
- // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5
+ // Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
6
6
// Licensed under Apache License v2.0 with Runtime Library Exception
7
7
//
8
8
// See https://swift.org/LICENSE.txt for license information
9
9
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10
10
//
11
11
// ===----------------------------------------------------------------------===//
12
12
13
- #include " swift/Basic/TransformArrayRef.h"
13
+ #include " swift/Basic/STLExtras.h"
14
+ #include " llvm/ADT/ArrayRef.h"
14
15
#include " gtest/gtest.h"
15
16
16
17
using namespace swift ;
17
18
18
- TEST (TransformArrayRefTest , Empty) {
19
+ TEST (TransformRangeTest , Empty) {
19
20
auto transform = [](int i) -> float { return float (i); };
20
21
std::function<float (int )> f (transform);
21
22
std::vector<int > v1;
22
- auto EmptyArray = makeTransformArrayRef (llvm::ArrayRef<int >(v1), f);
23
+ auto EmptyArray = makeTransformRange (llvm::ArrayRef<int >(v1), f);
23
24
EXPECT_EQ (EmptyArray.empty (), v1.empty ());
24
25
}
25
26
26
- TEST (TransformArrayRefTest , Subscript) {
27
+ TEST (TransformRangeTest , Subscript) {
27
28
auto transform = [](int i) -> float { return float (i); };
28
29
std::function<float (int )> f (transform);
29
30
std::vector<int > v1;
@@ -35,15 +36,15 @@ TEST(TransformArrayRefTest, Subscript) {
35
36
v1.push_back (-5 );
36
37
v1.push_back (-30 );
37
38
38
- auto Array = makeTransformArrayRef (llvm::ArrayRef<int >(v1), f);
39
+ auto Array = makeTransformRange (llvm::ArrayRef<int >(v1), f);
39
40
40
41
EXPECT_EQ (Array.size (), v1.size ());
41
42
for (unsigned i = 0 , e = Array.size (); i != e; ++i) {
42
43
EXPECT_EQ (Array[i], transform (v1[i]));
43
44
}
44
45
}
45
46
46
- TEST (TransformArrayRefTest , Iteration) {
47
+ TEST (TransformRangeTest , Iteration) {
47
48
auto transform = [](int i) -> float { return float (i); };
48
49
std::function<float (int )> f (transform);
49
50
std::vector<int > v1;
@@ -55,7 +56,7 @@ TEST(TransformArrayRefTest, Iteration) {
55
56
v1.push_back (-5 );
56
57
v1.push_back (-30 );
57
58
58
- auto Array = makeTransformArrayRef (llvm::ArrayRef<int >(v1), f);
59
+ auto Array = makeTransformRange (llvm::ArrayRef<int >(v1), f);
59
60
60
61
auto VBegin = v1.begin ();
61
62
auto VIter = v1.begin ();
@@ -83,7 +84,7 @@ TEST(TransformArrayRefTest, Iteration) {
83
84
}
84
85
}
85
86
86
- TEST (TransformArrayRefTest, Slicing ) {
87
+ TEST (TransformRangeTest, IterationWithSizelessSubscriptlessRange ) {
87
88
auto transform = [](int i) -> float { return float (i); };
88
89
std::function<float (int )> f (transform);
89
90
std::vector<int > v1;
@@ -95,13 +96,30 @@ TEST(TransformArrayRefTest, Slicing) {
95
96
v1.push_back (-5 );
96
97
v1.push_back (-30 );
97
98
98
- auto Array = llvm::ArrayRef<int >(v1);
99
- auto TArray = makeTransformArrayRef (Array, f);
99
+ auto Array = makeTransformRange (llvm::make_range (v1.begin (), v1.end ()), f);
100
100
101
- EXPECT_EQ (Array.size (), TArray.size ());
102
- while (!Array.empty ()) {
103
- EXPECT_EQ (transform (*Array.begin ()), *TArray.begin ());
104
- Array = Array.slice (1 );
105
- TArray = TArray.slice (1 );
101
+ auto VBegin = v1.begin ();
102
+ auto VIter = v1.begin ();
103
+ auto VEnd = v1.end ();
104
+ auto TBegin = Array.begin ();
105
+ auto TIter = Array.begin ();
106
+ auto TEnd = Array.end ();
107
+
108
+ // Forwards.
109
+ while (VIter != VEnd) {
110
+ EXPECT_NE (TIter, TEnd);
111
+ EXPECT_EQ (transform (*VIter), *TIter);
112
+ ++VIter;
113
+ ++TIter;
114
+ }
115
+
116
+ // Backwards.
117
+ while (VIter != VBegin) {
118
+ EXPECT_NE (TIter, TBegin);
119
+
120
+ --VIter;
121
+ --TIter;
122
+
123
+ EXPECT_EQ (transform (*VIter), *TIter);
106
124
}
107
125
}
0 commit comments