summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/20_util/shared_ptr
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-01 22:22:57 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-01 22:22:57 +0000
commit9e169c4bf36a38689550c059570c57efbf00a6fb (patch)
tree95e6800f7ac2a49ff7f799d96f04172320e70ac0 /libstdc++-v3/testsuite/20_util/shared_ptr
parent6170dfb6edfb7b19f8ae5209b8f948fe0076a4ad (diff)
downloadgcc-9e169c4bf36a38689550c059570c57efbf00a6fb.tar.gz
Merged trunk at revision 161680 into branch.vect256
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/vect256@161681 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite/20_util/shared_ptr')
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc93
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc48
4 files changed, 144 insertions, 5 deletions
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
index 4d9d1a66657..e0d09dee900 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
@@ -20,7 +20,7 @@
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
-#include <memory> // { dg-excess-errors "In file included from" }
+#include <memory>
#include <testsuite_hooks.h>
struct A { };
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc
index 63500799838..09be153d4c6 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc
@@ -32,11 +32,9 @@ void test01()
{
X* px = 0;
std::shared_ptr<X> p1(px); // { dg-error "here" }
- // { dg-error "incomplete" "" { target *-*-* } 549 }
+ // { dg-error "incomplete" "" { target *-*-* } 566 }
std::shared_ptr<X> p9(ap()); // { dg-error "here" }
- // { dg-error "incomplete" "" { target *-*-* } 630 }
+ // { dg-error "incomplete" "" { target *-*-* } 657 }
}
-
-// { dg-excess-errors "" }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
new file mode 100644
index 00000000000..82acaed3615
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
@@ -0,0 +1,93 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.9.11.2 Class template shared_ptr [util.smartptr.shared]
+
+#include <memory>
+#include <cstddef>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+// 20.9.11.2.1 shared_ptr constructors [util.smartptr.shared.const]
+
+// Construction from nullptr
+
+struct deleter
+{
+ int count;
+ deleter() : count(0) { }
+ void operator()(std::nullptr_t) { ++count; }
+ void operator()(int*) const { throw "wrong type passed to deleter"; }
+};
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::shared_ptr<int> p = nullptr;
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 0 );
+
+}
+
+void
+test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ deleter d;
+ std::shared_ptr<int> p(nullptr, std::ref(d));
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 1 );
+
+ p = nullptr;
+ VERIFY( p.use_count() == 0 );
+ VERIFY( d.count == 1 );
+}
+
+
+void
+test03()
+{
+ bool test __attribute__((unused)) = true;
+
+ deleter d;
+ __gnu_test::tracker_allocator<int> a;
+ std::shared_ptr<int> p(nullptr, std::ref(d), a);
+ VERIFY( p.get() == nullptr );
+ VERIFY( p.use_count() == 1 );
+
+ p = nullptr;
+ VERIFY( p.use_count() == 0 );
+ VERIFY( d.count == 1 );
+
+ typedef __gnu_test::tracker_allocator_counter c;
+ VERIFY( c::get_destruct_count() == c::get_construct_count() );
+ VERIFY( c::get_deallocation_count() == c::get_allocation_count() );
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
new file mode 100644
index 00000000000..93f4739d782
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
@@ -0,0 +1,48 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ struct T { };
+
+ std::shared_ptr<T> s0(new T);
+ std::hash<std::shared_ptr<T>> hs0;
+ std::hash<T*> hp0;
+
+ VERIFY( hs0(s0) == hp0(s0.get()) );
+
+ std::__shared_ptr<T> s1(new T);
+ std::hash<std::__shared_ptr<T>> hs1;
+ std::hash<T*> hp1;
+
+ VERIFY( hs1(s1) == hp1(s1.get()) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}