swap.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <list> 11 12// template <class T, class Alloc> 13// void swap(list<T,Alloc>& x, list<T,Alloc>& y); 14 15#include <list> 16#include <cassert> 17#include "../../../test_allocator.h" 18 19int main() 20{ 21 { 22 int a1[] = {1, 3, 7, 9, 10}; 23 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 24 std::list<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0])); 25 std::list<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0])); 26 swap(c1, c2); 27 assert(c1 == std::list<int>(a2, a2+sizeof(a2)/sizeof(a2[0]))); 28 assert(c2 == std::list<int>(a1, a1+sizeof(a1)/sizeof(a1[0]))); 29 } 30 { 31 int a1[] = {1, 3, 7, 9, 10}; 32 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 33 std::list<int> c1(a1, a1); 34 std::list<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0])); 35 swap(c1, c2); 36 assert(c1 == std::list<int>(a2, a2+sizeof(a2)/sizeof(a2[0]))); 37 assert(c2.empty()); 38 assert(distance(c2.begin(), c2.end()) == 0); 39 } 40 { 41 int a1[] = {1, 3, 7, 9, 10}; 42 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 43 std::list<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0])); 44 std::list<int> c2(a2, a2); 45 swap(c1, c2); 46 assert(c1.empty()); 47 assert(distance(c1.begin(), c1.end()) == 0); 48 assert(c2 == std::list<int>(a1, a1+sizeof(a1)/sizeof(a1[0]))); 49 } 50 { 51 int a1[] = {1, 3, 7, 9, 10}; 52 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 53 std::list<int> c1(a1, a1); 54 std::list<int> c2(a2, a2); 55 swap(c1, c2); 56 assert(c1.empty()); 57 assert(distance(c1.begin(), c1.end()) == 0); 58 assert(c2.empty()); 59 assert(distance(c2.begin(), c2.end()) == 0); 60 } 61 { 62 int a1[] = {1, 3, 7, 9, 10}; 63 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 64 typedef test_allocator<int> A; 65 std::list<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); 66 std::list<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); 67 swap(c1, c2); 68 assert((c1 == std::list<int, A>(a2, a2+sizeof(a2)/sizeof(a2[0])))); 69 assert(c1.get_allocator() == A(1)); 70 assert((c2 == std::list<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); 71 assert(c2.get_allocator() == A(2)); 72 } 73 { 74 int a1[] = {1, 3, 7, 9, 10}; 75 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 76 typedef other_allocator<int> A; 77 std::list<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); 78 std::list<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); 79 swap(c1, c2); 80 assert((c1 == std::list<int, A>(a2, a2+sizeof(a2)/sizeof(a2[0])))); 81 assert(c1.get_allocator() == A(2)); 82 assert((c2 == std::list<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); 83 assert(c2.get_allocator() == A(1)); 84 } 85} 86