summaryrefslogtreecommitdiffstats
path: root/libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-06-23 21:17:24 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-06-23 21:17:24 +0000
commit14e200d14d02fd36fd1ff1fd02b9b150ce170db8 (patch)
tree064e9770be840f37d5bc39b5a51a16cb0fbd3d90 /libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp
parent60c16eb7f537dcabce2aa9c0f3305d7f44287cf5 (diff)
downloadbcm5719-llvm-14e200d14d02fd36fd1ff1fd02b9b150ce170db8.tar.gz
bcm5719-llvm-14e200d14d02fd36fd1ff1fd02b9b150ce170db8.zip
Implement full support for non-pointer pointers in custom allocators for deque.
llvm-svn: 184673
Diffstat (limited to 'libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp')
-rw-r--r--libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp49
1 files changed, 32 insertions, 17 deletions
diff --git a/libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp b/libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp
index cc9791c74ae..87be595b67b 100644
--- a/libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp
+++ b/libcxx/test/containers/sequences/deque/deque.modifiers/insert_value.pass.cpp
@@ -14,7 +14,10 @@
#include <deque>
#include <cassert>
-std::deque<int>
+#include "../../../min_allocator.h"
+
+template <class C>
+C
make(int size, int start = 0 )
{
const int b = 4096 / sizeof(int);
@@ -25,7 +28,7 @@ make(int size, int start = 0 )
init *= b;
--init;
}
- std::deque<int> c(init, 0);
+ C c(init, 0);
for (int i = 0; i < init-start; ++i)
c.pop_back();
for (int i = 0; i < size; ++i)
@@ -35,12 +38,12 @@ make(int size, int start = 0 )
return c;
};
+template <class C>
void
-test(int P, std::deque<int>& c1, int x)
+test(int P, C& c1, int x)
{
- typedef std::deque<int> C;
- typedef C::iterator I;
- typedef C::const_iterator CI;
+ typedef typename C::iterator I;
+ typedef typename C::const_iterator CI;
std::size_t c1_osize = c1.size();
CI i = c1.insert(c1.begin() + P, x);
assert(i == c1.begin() + P);
@@ -55,17 +58,17 @@ test(int P, std::deque<int>& c1, int x)
assert(*i == j);
}
+template <class C>
void
testN(int start, int N)
{
- typedef std::deque<int> C;
- typedef C::iterator I;
- typedef C::const_iterator CI;
+ typedef typename C::iterator I;
+ typedef typename C::const_iterator CI;
for (int i = 0; i <= 3; ++i)
{
if (0 <= i && i <= N)
{
- C c1 = make(N, start);
+ C c1 = make<C>(N, start);
test(i, c1, -10);
}
}
@@ -73,7 +76,7 @@ testN(int start, int N)
{
if (0 <= i && i <= N)
{
- C c1 = make(N, start);
+ C c1 = make<C>(N, start);
test(i, c1, -10);
}
}
@@ -81,22 +84,22 @@ testN(int start, int N)
{
if (0 <= i && i <= N)
{
- C c1 = make(N, start);
+ C c1 = make<C>(N, start);
test(i, c1, -10);
}
}
}
+template <class C>
void
self_reference_test()
{
- typedef std::deque<int> C;
- typedef C::const_iterator CI;
+ typedef typename C::const_iterator CI;
for (int i = 0; i < 20; ++i)
{
for (int j = 0; j < 20; ++j)
{
- C c = make(20);
+ C c = make<C>(20);
CI it = c.cbegin() + i;
CI jt = c.cbegin() + j;
c.insert(it, *jt);
@@ -115,10 +118,22 @@ self_reference_test()
int main()
{
+ {
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
const int N = sizeof(rng)/sizeof(rng[0]);
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
- testN(rng[i], rng[j]);
- self_reference_test();
+ testN<std::deque<int> >(rng[i], rng[j]);
+ self_reference_test<std::deque<int> >();
+ }
+#if __cplusplus >= 201103L
+ {
+ int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
+ const int N = sizeof(rng)/sizeof(rng[0]);
+ for (int i = 0; i < N; ++i)
+ for (int j = 0; j < N; ++j)
+ testN<std::deque<int, min_allocator<int>> >(rng[i], rng[j]);
+ self_reference_test<std::deque<int, min_allocator<int>> >();
+ }
+#endif
}
OpenPOWER on IntegriCloud