[libcxx] Fix incorrect iterator type in vector container test
The iterator types for different specializations of containers with the same element type but different allocators are not required to be convertible. This patch makes the test to take the iterator type from the same container specialization as the created container. Reviewed as https://reviews.llvm.org/D54806. Thanks to Andrey Maksimov for the patch. llvm-svn: 347423
This commit is contained in:
parent
46e3cd76e2
commit
91614db033
|
@ -25,11 +25,12 @@
|
|||
int main()
|
||||
{
|
||||
{
|
||||
std::vector<int> v(100);
|
||||
typedef std::vector<int> V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
@ -42,11 +43,12 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int> v(100);
|
||||
typedef std::vector<int> V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
@ -59,13 +61,14 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int> v(100);
|
||||
typedef std::vector<int> V;
|
||||
V v(100);
|
||||
while(v.size() < v.capacity()) v.push_back(0); // force reallocation
|
||||
size_t sz = v.size();
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const unsigned N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
assert(v.size() == sz + N);
|
||||
assert(i == v.begin() + 10);
|
||||
std::size_t j;
|
||||
|
@ -77,13 +80,14 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int> v(100);
|
||||
typedef std::vector<int> V;
|
||||
V v(100);
|
||||
v.reserve(128); // force no reallocation
|
||||
size_t sz = v.size();
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const unsigned N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
assert(v.size() == sz + N);
|
||||
assert(i == v.begin() + 10);
|
||||
std::size_t j;
|
||||
|
@ -95,11 +99,12 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int, limited_allocator<int, 308> > v(100);
|
||||
typedef std::vector<int, limited_allocator<int, 308> > V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
@ -112,11 +117,12 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int, limited_allocator<int, 300> > v(100);
|
||||
typedef std::vector<int, limited_allocator<int, 300> > V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
@ -130,11 +136,12 @@ int main()
|
|||
}
|
||||
#if TEST_STD_VER >= 11
|
||||
{
|
||||
std::vector<int, min_allocator<int>> v(100);
|
||||
typedef std::vector<int, min_allocator<int> > V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
|
||||
input_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
@ -147,11 +154,12 @@ int main()
|
|||
assert(v[j] == 0);
|
||||
}
|
||||
{
|
||||
std::vector<int, min_allocator<int>> v(100);
|
||||
typedef std::vector<int, min_allocator<int> > V;
|
||||
V v(100);
|
||||
int a[] = {1, 2, 3, 4, 5};
|
||||
const int N = sizeof(a)/sizeof(a[0]);
|
||||
std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
|
||||
forward_iterator<const int*>(a+N));
|
||||
assert(v.size() == 100 + N);
|
||||
assert(is_contiguous_container_asan_correct(v));
|
||||
assert(i == v.begin() + 10);
|
||||
|
|
Loading…
Reference in New Issue