1// Copyright (C) 2005, 2009 Free Software Foundation 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared] 19 20#include <tr1/memory> 21#include <testsuite_hooks.h> 22 23struct A 24{ 25 virtual ~A() { } 26}; 27 28struct B : A 29{ 30}; 31 32// 2.2.3.6 shared_ptr comparison [tr.util.smartptr.shared.cmp] 33 34int 35test01() 36{ 37 // test empty shared_ptrs compare equivalent 38 std::tr1::shared_ptr<A> p1; 39 std::tr1::shared_ptr<B> p2; 40 VERIFY( p1 == p2 ); 41 VERIFY( !(p1 != p2) ); 42 VERIFY( !(p1 < p2) && !(p2 < p1) ); 43 return 0; 44} 45 46 47// Construction from pointer 48int 49test02() 50{ 51 std::tr1::shared_ptr<A> A_default; 52 53 std::tr1::shared_ptr<A> A_from_A(new A); 54 VERIFY( A_default != A_from_A ); 55 VERIFY( !(A_default == A_from_A) ); 56 VERIFY( (A_default < A_from_A) || (A_from_A < A_default) ); 57 58 std::tr1::shared_ptr<B> B_from_B(new B); 59 VERIFY( B_from_B != A_from_A ); 60 VERIFY( !(B_from_B == A_from_A) ); 61 VERIFY( (B_from_B < A_from_A) || (A_from_A < B_from_B) ); 62 63 A_from_A.reset(); 64 VERIFY( A_default == A_from_A ); 65 VERIFY( !(A_default != A_from_A) ); 66 VERIFY( !(A_default < A_from_A) && !(A_from_A < A_default) ); 67 68 B_from_B.reset(); 69 VERIFY( B_from_B == A_from_A ); 70 VERIFY( !(B_from_B != A_from_A) ); 71 VERIFY( !(B_from_B < A_from_A) && !(A_from_A < B_from_B) ); 72 73 return 0; 74} 75 76int 77main() 78{ 79 test01(); 80 test02(); 81 return 0; 82} 83