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 19 int 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 #ifndef _LIBCPP_DEBUG_LEVEL 62 // This test known to result in undefined behavior detected by _LIBCPP_DEBUG_LEVEL >= 1 63 { 64 int a1[] = {1, 3, 7, 9, 10}; 65 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 66 typedef test_allocator<int> A; 67 std::list<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); 68 std::list<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); 69 swap(c1, c2); 70 assert((c1 == std::list<int, A>(a2, a2+sizeof(a2)/sizeof(a2[0])))); 71 assert(c1.get_allocator() == A(1)); 72 assert((c2 == std::list<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); 73 assert(c2.get_allocator() == A(2)); 74 } 75 #endif 76 { 77 int a1[] = {1, 3, 7, 9, 10}; 78 int a2[] = {0, 2, 4, 5, 6, 8, 11}; 79 typedef other_allocator<int> A; 80 std::list<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); 81 std::list<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); 82 swap(c1, c2); 83 assert((c1 == std::list<int, A>(a2, a2+sizeof(a2)/sizeof(a2[0])))); 84 assert(c1.get_allocator() == A(2)); 85 assert((c2 == std::list<int, A>(a1, a1+sizeof(a1)/sizeof(a1[0])))); 86 assert(c2.get_allocator() == A(1)); 87 } 88 } 89