111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <deque> 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// deque(deque&&); 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <deque> 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "MoveOnly.h" 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "test_allocator.h" 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "min_allocator.h" 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int ab[] = {3, 4, 2, 8, 0, 1, 44, 34, 45, 96, 80, 1, 13, 31, 45}; 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int* an = ab + sizeof(ab)/sizeof(ab[0]); 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef test_allocator<MoveOnly> A; 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c1(A(1)); 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c1.push_back(MoveOnly(*p)); 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c2(A(2)); 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2.push_back(MoveOnly(*p)); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c3 = std::move(c1); 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c2 == c3); 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c1.size() == 0); 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c3.get_allocator() == c1.get_allocator()); 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int ab[] = {3, 4, 2, 8, 0, 1, 44, 34, 45, 96, 80, 1, 13, 31, 45}; 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int* an = ab + sizeof(ab)/sizeof(ab[0]); 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef other_allocator<MoveOnly> A; 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c1(A(1)); 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c1.push_back(MoveOnly(*p)); 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c2(A(2)); 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2.push_back(MoveOnly(*p)); 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c3 = std::move(c1); 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c2 == c3); 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c1.size() == 0); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c3.get_allocator() == c1.get_allocator()); 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if __cplusplus >= 201103L 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int ab[] = {3, 4, 2, 8, 0, 1, 44, 34, 45, 96, 80, 1, 13, 31, 45}; 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int* an = ab + sizeof(ab)/sizeof(ab[0]); 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef min_allocator<MoveOnly> A; 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c1(A{}); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c1.push_back(MoveOnly(*p)); 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c2(A{}); 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int* p = ab; p < an; ++p) 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2.push_back(MoveOnly(*p)); 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::deque<MoveOnly, A> c3 = std::move(c1); 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c2 == c3); 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c1.size() == 0); 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c3.get_allocator() == c1.get_allocator()); 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 73