1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 95030eaf65db689246a7d4e6f327f5a34d406e98fJonathan Roelofs// 105030eaf65db689246a7d4e6f327f5a34d406e98fJonathan Roelofs// REQUIRES: long_tests 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <deque> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class InputIterator> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iterator insert (const_iterator p, InputIterator f, InputIterator l); 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <deque> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2018dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#include "test_macros.h" 2183e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 22df00d5e5ad672aa275a29c5a446072959134adddMarshall Clow#include "MoveOnly.h" 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../../stack_allocator.h" 24061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 27fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard HinnantC 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantmake(int size, int start = 0 ) 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int b = 4096 / sizeof(int); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int init = 0; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (start > 0) 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant init = (start+1) / b + ((start+1) % b != 0); 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant init *= b; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant --init; 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 38fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c(init, 0); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i < init-start; ++i) 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c.pop_back(); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i < size; ++i) 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c.push_back(i); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i < start; ++i) 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c.pop_front(); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return c; 465495e2efb9ea9fcb273ebed2f92b912ace28e82bEric Fiselier} 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 48fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 503150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clowtest(int P, const C& c0, const C& c2) 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 523150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow { 533150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow typedef typename C::const_iterator CI; 543150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow typedef input_iterator<CI> BCI; 553150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow C c1 = c0; 563150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow std::size_t c1_osize = c1.size(); 573150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow CI i = c1.insert(c1.begin() + P, BCI(c2.begin()), BCI(c2.end())); 583150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(i == c1.begin() + P); 593150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(c1.size() == c1_osize + c2.size()); 603150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(distance(c1.begin(), c1.end()) == c1.size()); 613150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow i = c1.begin(); 623150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = 0; j < P; ++j, ++i) 633150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 643150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = 0; j < c2.size(); ++j, ++i) 653150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 663150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = P; j < c1_osize; ++j, ++i) 673150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 683150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow } 693150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow { 703150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow typedef typename C::const_iterator CI; 713150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow typedef forward_iterator<CI> BCI; 723150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow C c1 = c0; 733150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow std::size_t c1_osize = c1.size(); 743150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow CI i = c1.insert(c1.begin() + P, BCI(c2.begin()), BCI(c2.end())); 753150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(i == c1.begin() + P); 763150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(c1.size() == c1_osize + c2.size()); 773150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(distance(c1.begin(), c1.end()) == c1.size()); 783150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow i = c1.begin(); 793150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = 0; j < P; ++j, ++i) 803150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 813150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = 0; j < c2.size(); ++j, ++i) 823150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 833150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow for (int j = P; j < c1_osize; ++j, ++i) 843150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow assert(*i == j); 853150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow } 863150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow { 87fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant typedef typename C::const_iterator CI; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef bidirectional_iterator<CI> BCI; 893150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow C c1 = c0; 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::size_t c1_osize = c1.size(); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant CI i = c1.insert(c1.begin() + P, BCI(c2.begin()), BCI(c2.end())); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == c1.begin() + P); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1.size() == c1_osize + c2.size()); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c1.begin(), c1.end()) == c1.size()); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = c1.begin(); 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = 0; j < P; ++j, ++i) 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = 0; j < c2.size(); ++j, ++i) 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = P; j < c1_osize; ++j, ++i) 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 1023150c3547a1774fa55ef4ef94b4a783f02d6d785Marshall Clow } 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 105fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnanttestN(int start, int N, int M) 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i <= 3; ++i) 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 113fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 114fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = M-1; i <= M+1; ++i) 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 122fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 123fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N/2-1; i <= N/2+1; ++i) 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 131fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 132fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N - M - 1; i <= N - M + 1; ++i) 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 140fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 141fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N - M - 1; i <= N - M + 1; ++i) 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 149fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 150fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N - 3; i <= N; ++i) 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 158fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 159fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(i, c1, c2); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 165fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 167fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard HinnanttestI(int P, C& c1, const C& c2) 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 169fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant typedef typename C::const_iterator CI; 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef input_iterator<CI> ICI; 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::size_t c1_osize = c1.size(); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant CI i = c1.insert(c1.begin() + P, ICI(c2.begin()), ICI(c2.end())); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == c1.begin() + P); 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1.size() == c1_osize + c2.size()); 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c1.begin(), c1.end()) == c1.size()); 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = c1.begin(); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = 0; j < P; ++j, ++i) 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = 0; j < c2.size(); ++j, ++i) 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = P; j < c1_osize; ++j, ++i) 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == j); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 185fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnanttestNI(int start, int N, int M) 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i <= 3; ++i) 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 193fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 194fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testI(i, c1, c2); 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = M-1; i <= M+1; ++i) 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 202fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 203fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testI(i, c1, c2); 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N/2-1; i <= N/2+1; ++i) 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 211fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 212fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testI(i, c1, c2); 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N - M - 1; i <= N - M + 1; ++i) 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 220fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 221fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testI(i, c1, c2); 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = N - 3; i <= N; ++i) 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (0 <= i && i <= N) 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 229fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c1 = make<C>(N, start); 230fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c2 = make<C>(M); 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testI(i, c1, c2); 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 236fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnanttemplate <class C> 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest_move() 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 24018dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#if TEST_STD_VER >= 11 241fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant C c; 242fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant typedef typename C::const_iterator CI; 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MoveOnly mo(0); 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef MoveOnly* I; 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c.insert(c.end(), std::move_iterator<I>(&mo), std::move_iterator<I>(&mo+1)); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int j = 0; 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (CI i = c.begin(); i != c.end(); ++i, ++j) 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == MoveOnly(j)); 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant MoveOnly mo(1); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef input_iterator<MoveOnly*> I; 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c.insert(c.end(), std::move_iterator<I>(I(&mo)), std::move_iterator<I>(I(&mo+1))); 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant j = 0; 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (CI i = c.begin(); i != c.end(); ++i, ++j) 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == MoveOnly(j)); 25918dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#endif 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 264fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant { 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int N = sizeof(rng)/sizeof(rng[0]); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int i = 0; i < N; ++i) 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int j = 0; j < N; ++j) 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int k = 0; k < N; ++k) 270fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant testN<std::deque<int> >(rng[i], rng[j], rng[k]); 271fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant testNI<std::deque<int> >(1500, 2000, 1000); 27218dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#if TEST_STD_VER >= 11 273fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant test_move<std::deque<MoveOnly, stack_allocator<MoveOnly, 2000> > >(); 27418dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#endif 275fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant } 27618dbed95969596840835876627ecd102b4fc51e1Eric Fiselier#if TEST_STD_VER >= 11 277fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant { 278fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; 279fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant const int N = sizeof(rng)/sizeof(rng[0]); 280fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant for (int i = 0; i < N; ++i) 281fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant for (int j = 0; j < N; ++j) 282fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant for (int k = 0; k < N; ++k) 283fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant testN<std::deque<int, min_allocator<int>> >(rng[i], rng[j], rng[k]); 284fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant testNI<std::deque<int> >(1500, 2000, 1000); 285fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant test_move<std::deque<MoveOnly, min_allocator<MoveOnly> > >(); 286fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant } 287fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant#endif 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 289