swap.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)//===----------------------------------------------------------------------===// 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// <memory> 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unique_ptr 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test swap 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <memory> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "../deleter.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct A 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int state_; 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static int count; 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) A() : state_(0) {++count;} 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) explicit A(int i) : state_(i) {++count;} 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) A(const A& a) : state_(a.state_) {++count;} 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) A& operator=(const A& a) {state_ = a.state_; return *this;} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~A() {--count;} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) friend bool operator==(const A& x, const A& y) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {return x.state_ == y.state_;} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)int A::count = 0; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main() 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) A* p1 = new A(1); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::unique_ptr<A, Deleter<A> > s1(p1, Deleter<A>(1)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A* p2 = new A(2); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::unique_ptr<A, Deleter<A> > s2(p2, Deleter<A>(2)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get() == p1); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(*s1 == A(1)); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get_deleter().state() == 1); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get() == p2); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(*s2 == A(2)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get_deleter().state() == 2); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) swap(s1, s2); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get() == p2); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(*s1 == A(2)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get_deleter().state() == 2); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get() == p1); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(*s2 == A(1)); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get_deleter().state() == 1); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(A::count == 2); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(A::count == 0); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A* p1 = new A[3]; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::unique_ptr<A[], Deleter<A[]> > s1(p1, Deleter<A[]>(1)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A* p2 = new A[3]; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::unique_ptr<A[], Deleter<A[]> > s2(p2, Deleter<A[]>(2)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get() == p1); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get_deleter().state() == 1); 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) assert(s2.get() == p2); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get_deleter().state() == 2); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) swap(s1, s2); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get() == p2); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s1.get_deleter().state() == 2); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get() == p1); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(s2.get_deleter().state() == 1); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(A::count == 6); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(A::count == 0); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)