1// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free 16// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17// USA. 18 19// TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared] 20 21#include <tr1/memory> 22#include <testsuite_hooks.h> 23 24struct A 25{ 26 virtual ~A() { } 27}; 28 29struct B : A 30{ 31}; 32 33// 2.2.3.6 shared_ptr comparison [tr.util.smartptr.shared.cmp] 34 35int 36test01() 37{ 38 // test empty shared_ptrs compare equivalent 39 std::tr1::shared_ptr<A> p1; 40 std::tr1::shared_ptr<B> p2; 41 VERIFY( p1 == p2 ); 42 VERIFY( !(p1 != p2) ); 43 VERIFY( !(p1 < p2) && !(p2 < p1) ); 44 return 0; 45} 46 47 48// Construction from pointer 49int 50test02() 51{ 52 std::tr1::shared_ptr<A> A_default; 53 54 std::tr1::shared_ptr<A> A_from_A(new A); 55 VERIFY( A_default != A_from_A ); 56 VERIFY( !(A_default == A_from_A) ); 57 VERIFY( (A_default < A_from_A) || (A_from_A < A_default) ); 58 59 std::tr1::shared_ptr<B> B_from_B(new B); 60 VERIFY( B_from_B != A_from_A ); 61 VERIFY( !(B_from_B == A_from_A) ); 62 VERIFY( (B_from_B < A_from_A) || (A_from_A < B_from_B) ); 63 64 A_from_A.reset(); 65 VERIFY( A_default == A_from_A ); 66 VERIFY( !(A_default != A_from_A) ); 67 VERIFY( !(A_default < A_from_A) && !(A_from_A < A_default) ); 68 69 B_from_B.reset(); 70 VERIFY( B_from_B == A_from_A ); 71 VERIFY( !(B_from_B != A_from_A) ); 72 VERIFY( !(B_from_B < A_from_A) && !(A_from_A < B_from_B) ); 73 74 return 0; 75} 76 77int 78main() 79{ 80 test01(); 81 test02(); 82 return 0; 83} 84