diff options
Diffstat (limited to 'libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp')
| -rw-r--r-- | libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp b/libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp index 795ab01421e..d4da735a408 100644 --- a/libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp +++ b/libcxx/test/containers/sequences/deque/deque.special/swap.pass.cpp @@ -15,8 +15,10 @@ #include <deque> #include <cassert> #include "../../../test_allocator.h" +#include "../../../min_allocator.h" -std::deque<int> +template <class C> +C make(int size, int start = 0 ) { const int b = 4096 / sizeof(int); @@ -27,7 +29,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) @@ -37,11 +39,11 @@ make(int size, int start = 0 ) return c; }; +template <class C> void testN(int start, int N, int M) { - typedef std::deque<int> C; - C c1 = make(N, start); - C c2 = make(M); + C c1 = make<C>(N, start); + C c2 = make<C>(M); C c1_save = c1; C c2_save = c2; swap(c1, c2); @@ -57,7 +59,7 @@ int main() for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) for (int k = 0; k < N; ++k) - testN(rng[i], rng[j], rng[k]); + testN<std::deque<int> >(rng[i], rng[j], rng[k]); } { int a1[] = {1, 3, 7, 9, 10}; @@ -83,4 +85,26 @@ int main() assert((c2 == std::deque<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); assert(c2.get_allocator() == A(1)); } +#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) + for (int k = 0; k < N; ++k) + testN<std::deque<int, min_allocator<int>> >(rng[i], rng[j], rng[k]); + } + { + int a1[] = {1, 3, 7, 9, 10}; + int a2[] = {0, 2, 4, 5, 6, 8, 11}; + typedef min_allocator<int> A; + std::deque<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A()); + std::deque<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A()); + swap(c1, c2); + assert((c1 == std::deque<int, A>(a2, a2+sizeof(a2)/sizeof(a2[0])))); + assert(c1.get_allocator() == A()); + assert((c2 == std::deque<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); + assert(c2.get_allocator() == A()); + } +#endif } |

