aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2004-01-13 18:57:45 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2004-01-13 18:57:45 +0000
commit60af005f4bbfc0c03fb3a081d4da835d4aa1ab5e (patch)
treed69d9477ee35d4917366af928132e9854d89bb65
parentd8ef7deccb6f1b263de9820f3eefb7a9c3d03a5f (diff)
downloadgcc-60af005f4bbfc0c03fb3a081d4da835d4aa1ab5e.zip
gcc-60af005f4bbfc0c03fb3a081d4da835d4aa1ab5e.tar.gz
gcc-60af005f4bbfc0c03fb3a081d4da835d4aa1ab5e.tar.bz2
ifstream_extract_float.cc: New.
2004-01-13 Benjamin Kosnik <bkoz@redhat.com> * testsuite/performance/ifstream_extract_float.cc: New. * testsuite/performance/ofstream_insert_float.cc: Float generation matches above. * 20_util/auto_ptr.cc, auto_ptr_neg.cc: Break into... * 20_util/auto_ptr/1.cc: ...this. * 20_util/auto_ptr/2.cc: Same. * 20_util/auto_ptr/3.cc: Same. * 20_util/auto_ptr/3946.cc: Same. * 20_util/auto_ptr/4.cc: Same. * 20_util/auto_ptr/5.cc: Same. * 20_util/auto_ptr/6.cc: Same. * 20_util/auto_ptr/7.cc: Same. * 20_util/auto_ptr/assign_neg.cc * 20_util/pairs.cc: Break into... * 20_util/pair/1.cc: ...this. * 20_util/pair/2.cc: Same. * 20_util/pair/3.cc: Same. * 20_util/pair/4.cc: Same. From-SVN: r75811
-rw-r--r--libstdc++-v3/ChangeLog22
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr.cc277
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/1.cc95
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/2.cc85
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/3.cc87
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc45
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/4.cc83
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/5.cc87
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/6.cc91
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/7.cc91
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc (renamed from libstdc++-v3/testsuite/20_util/auto_ptr_neg.cc)0
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/1.cc79
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/2.cc60
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/3.cc (renamed from libstdc++-v3/testsuite/20_util/pairs.cc)65
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/4.cc67
-rw-r--r--libstdc++-v3/testsuite/performance/ifstream_extract_float.cc61
-rw-r--r--libstdc++-v3/testsuite/performance/ofstream_insert_float.cc2
17 files changed, 956 insertions, 341 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 6df16ea..642263d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,25 @@
+2004-01-13 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/performance/ifstream_extract_float.cc: New.
+ * testsuite/performance/ofstream_insert_float.cc: Float generation
+ matches above.
+
+ * 20_util/auto_ptr.cc, auto_ptr_neg.cc: Break into...
+ * 20_util/auto_ptr/1.cc: ...this.
+ * 20_util/auto_ptr/2.cc: Same.
+ * 20_util/auto_ptr/3.cc: Same.
+ * 20_util/auto_ptr/3946.cc: Same.
+ * 20_util/auto_ptr/4.cc: Same.
+ * 20_util/auto_ptr/5.cc: Same.
+ * 20_util/auto_ptr/6.cc: Same.
+ * 20_util/auto_ptr/7.cc: Same.
+ * 20_util/auto_ptr/assign_neg.cc
+ * 20_util/pairs.cc: Break into...
+ * 20_util/pair/1.cc: ...this.
+ * 20_util/pair/2.cc: Same.
+ * 20_util/pair/3.cc: Same.
+ * 20_util/pair/4.cc: Same.
+
2004-01-13 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (num_get::do_get(void*&)):
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr.cc b/libstdc++-v3/testsuite/20_util/auto_ptr.cc
deleted file mode 100644
index 110d4b2..0000000
--- a/libstdc++-v3/testsuite/20_util/auto_ptr.cc
+++ /dev/null
@@ -1,277 +0,0 @@
-// Copyright (C) 2000, 2002, 2003 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 2, 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 COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 20.4.5 Template class auto_ptr [lib.auto.ptr]
-
-#include <memory>
-#include <testsuite_hooks.h>
-
-struct A
-{
- A() { ++ctor_count; }
- virtual ~A() { ++dtor_count; }
- static long ctor_count;
- static long dtor_count;
-};
-long A::ctor_count = 0;
-long A::dtor_count = 0;
-
-struct B : A
-{
- B() { ++ctor_count; }
- virtual ~B() { ++dtor_count; }
- static long ctor_count;
- static long dtor_count;
-};
-long B::ctor_count = 0;
-long B::dtor_count = 0;
-
-
-struct reset_count_struct
-{
- ~reset_count_struct()
- {
- A::ctor_count = 0;
- A::dtor_count = 0;
- B::ctor_count = 0;
- B::dtor_count = 0;
- }
-};
-
-
-// 20.4.5.1 auto_ptr constructors [lib.auto.ptr.cons]
-
-// Construction from pointer
-int
-test01()
-{
- reset_count_struct __attribute__((unused)) reset;
- bool test __attribute__((unused)) = true;
-
- std::auto_ptr<A> A_default;
- VERIFY( A_default.get() == 0 );
- VERIFY( A::ctor_count == 0 );
- VERIFY( A::dtor_count == 0 );
- VERIFY( B::ctor_count == 0 );
- VERIFY( B::dtor_count == 0 );
-
- std::auto_ptr<A> A_from_A(new A);
- VERIFY( A_from_A.get() != 0 );
- VERIFY( A::ctor_count == 1 );
- VERIFY( A::dtor_count == 0 );
- VERIFY( B::ctor_count == 0 );
- VERIFY( B::dtor_count == 0 );
-
- std::auto_ptr<A> A_from_B(new B);
- VERIFY( A_from_B.get() != 0 );
- VERIFY( A::ctor_count == 2 );
- VERIFY( A::dtor_count == 0 );
- VERIFY( B::ctor_count == 1 );
- VERIFY( B::dtor_count == 0 );
-
- return 0;
-}
-
-// Construction from std::auto_ptr
-int
-test02()
-{
- reset_count_struct __attribute__((unused)) reset;
- bool test __attribute__((unused)) = true;
-
- std::auto_ptr<A> A_from_A(new A);
- std::auto_ptr<B> B_from_B(new B);
-
- std::auto_ptr<A> A_from_ptr_A(A_from_A);
- std::auto_ptr<A> A_from_ptr_B(B_from_B);
- VERIFY( A_from_A.get() == 0 );
- VERIFY( B_from_B.get() == 0 );
- VERIFY( A_from_ptr_A.get() != 0 );
- VERIFY( A_from_ptr_B.get() != 0 );
- VERIFY( A::ctor_count == 2 );
- VERIFY( A::dtor_count == 0 );
- VERIFY( B::ctor_count == 1 );
- VERIFY( B::dtor_count == 0 );
-
- return 0;
-}
-
-// Assignment from std::auto_ptr
-int
-test03()
-{
- reset_count_struct __attribute__((unused)) reset;
- bool test __attribute__((unused)) = true;
-
- std::auto_ptr<A> A_from_ptr_A;
- std::auto_ptr<A> A_from_ptr_B;
- std::auto_ptr<A> A_from_A(new A);
- std::auto_ptr<B> B_from_B(new B);
-
- A_from_ptr_A = A_from_A;
- A_from_ptr_B = B_from_B;
- VERIFY( A_from_A.get() == 0 );
- VERIFY( B_from_B.get() == 0 );
- VERIFY( A_from_ptr_A.get() != 0 );
- VERIFY( A_from_ptr_B.get() != 0 );
- VERIFY( A::ctor_count == 2 );
- VERIFY( A::dtor_count == 0 );
- VERIFY( B::ctor_count == 1 );
- VERIFY( B::dtor_count == 0 );
-
- return 0;
-}
-
-// Destruction
-int
-test04()
-{
- reset_count_struct __attribute__((unused)) reset;
- bool test __attribute__((unused)) = true;
-
- {/*lifetine scope*/
- std::auto_ptr<A> A_from_A(new A);
- std::auto_ptr<A> A_from_B(new B);
- std::auto_ptr<B> B_from_B(new B);
- }/*destructors called here*/
-
- VERIFY( A::ctor_count == 3 );
- VERIFY( A::dtor_count == 3 );
- VERIFY( B::ctor_count == 2 );
- VERIFY( B::dtor_count == 2 );
-
- return 0;
-}
-
-// Class member construction/destruction
-template <typename T>
-class pimpl
-{
-public:
- pimpl() : p_impl(new T) {}
-private:
- std::auto_ptr<T> p_impl;
-};
-
-int
-test05()
-{
- bool test __attribute__((unused)) = true;
- reset_count_struct __attribute__((unused)) reset;
-
- pimpl<A>();
- pimpl<B>();
- VERIFY( A::ctor_count == 2 );
- VERIFY( A::dtor_count == 2 );
- VERIFY( B::ctor_count == 1 );
- VERIFY( B::dtor_count == 1 );
- return 0;
-}
-
-
-// 20.4.5.2 auto_ptr members [lib.auto.ptr.members]
-
-// Member access
-int
-test06()
-{
- reset_count_struct __attribute__((unused)) reset;
- bool test __attribute__((unused)) = true;
-
- std::auto_ptr<A> A_from_A(new A);
- std::auto_ptr<A> A_from_A_ptr(A_from_A.release());
- VERIFY( A_from_A.get() == 0 );
- VERIFY( A_from_A_ptr.get() != 0 );
- VERIFY( A_from_A_ptr->ctor_count == 1 );
- VERIFY( (*A_from_A_ptr).dtor_count == 0 );
-
- A* A_ptr = A_from_A_ptr.get();
-
- A_from_A_ptr.reset(A_ptr);
- VERIFY( A_from_A_ptr.get() == A_ptr );
- VERIFY( A_from_A_ptr->ctor_count == 1 );
- VERIFY( (*A_from_A_ptr).dtor_count == 0 );
-
- A_from_A_ptr.reset(new A);
- VERIFY( A_from_A_ptr.get() != A_ptr );
- VERIFY( A_from_A_ptr->ctor_count == 2 );
- VERIFY( (*A_from_A_ptr).dtor_count == 1 );
- return 0;
-}
-
-
-// 20.4.5.3 auto_ptr conversions [lib.auto.ptr.conv]
-
-// Parameters and return values
-template <typename T>
-static std::auto_ptr<T> source()
-{
- return std::auto_ptr<T>(new T);
-}
-
-template <typename T>
-static void drain(std::auto_ptr<T>)
-{}
-
-int
-test07()
-{
- bool test __attribute__((unused)) = true;
- reset_count_struct __attribute__((unused)) reset;
-
- drain(source<A>());
- // The resolution of core issue 84, now a DR, breaks this call.
- // drain<A>(source<B>());
- drain(source<B>());
- VERIFY( A::ctor_count == 2 );
- VERIFY( A::dtor_count == 2 );
- VERIFY( B::ctor_count == 1 );
- VERIFY( B::dtor_count == 1 );
- return 0;
-}
-
-// libstdc++/3946
-// http://gcc.gnu.org/ml/libstdc++/2002-07/msg00024.html
-struct Base { };
-struct Derived : public Base { };
-
-std::auto_ptr<Derived>
-conversiontest08() { return std::auto_ptr<Derived>(new Derived); }
-
-void
-test08()
-{
- std::auto_ptr<Base> ptr;
- ptr = conversiontest08();
-}
-
-
-int
-main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- test06();
- test07();
- test08();
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/1.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/1.cc
new file mode 100644
index 0000000..8e150b0
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/1.cc
@@ -0,0 +1,95 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+
+// 20.4.5.1 auto_ptr constructors [lib.auto.ptr.cons]
+
+// Construction from pointer
+int
+test01()
+{
+ reset_count_struct __attribute__((unused)) reset;
+ bool test __attribute__((unused)) = true;
+
+ std::auto_ptr<A> A_default;
+ VERIFY( A_default.get() == 0 );
+ VERIFY( A::ctor_count == 0 );
+ VERIFY( A::dtor_count == 0 );
+ VERIFY( B::ctor_count == 0 );
+ VERIFY( B::dtor_count == 0 );
+
+ std::auto_ptr<A> A_from_A(new A);
+ VERIFY( A_from_A.get() != 0 );
+ VERIFY( A::ctor_count == 1 );
+ VERIFY( A::dtor_count == 0 );
+ VERIFY( B::ctor_count == 0 );
+ VERIFY( B::dtor_count == 0 );
+
+ std::auto_ptr<A> A_from_B(new B);
+ VERIFY( A_from_B.get() != 0 );
+ VERIFY( A::ctor_count == 2 );
+ VERIFY( A::dtor_count == 0 );
+ VERIFY( B::ctor_count == 1 );
+ VERIFY( B::dtor_count == 0 );
+
+ return 0;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/2.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/2.cc
new file mode 100644
index 0000000..6ce31d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/2.cc
@@ -0,0 +1,85 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+// Construction from std::auto_ptr
+int
+test02()
+{
+ reset_count_struct __attribute__((unused)) reset;
+ bool test __attribute__((unused)) = true;
+
+ std::auto_ptr<A> A_from_A(new A);
+ std::auto_ptr<B> B_from_B(new B);
+
+ std::auto_ptr<A> A_from_ptr_A(A_from_A);
+ std::auto_ptr<A> A_from_ptr_B(B_from_B);
+ VERIFY( A_from_A.get() == 0 );
+ VERIFY( B_from_B.get() == 0 );
+ VERIFY( A_from_ptr_A.get() != 0 );
+ VERIFY( A_from_ptr_B.get() != 0 );
+ VERIFY( A::ctor_count == 2 );
+ VERIFY( A::dtor_count == 0 );
+ VERIFY( B::ctor_count == 1 );
+ VERIFY( B::dtor_count == 0 );
+
+ return 0;
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/3.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/3.cc
new file mode 100644
index 0000000..8090d27
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/3.cc
@@ -0,0 +1,87 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+// Assignment from std::auto_ptr
+int
+test03()
+{
+ reset_count_struct __attribute__((unused)) reset;
+ bool test __attribute__((unused)) = true;
+
+ std::auto_ptr<A> A_from_ptr_A;
+ std::auto_ptr<A> A_from_ptr_B;
+ std::auto_ptr<A> A_from_A(new A);
+ std::auto_ptr<B> B_from_B(new B);
+
+ A_from_ptr_A = A_from_A;
+ A_from_ptr_B = B_from_B;
+ VERIFY( A_from_A.get() == 0 );
+ VERIFY( B_from_B.get() == 0 );
+ VERIFY( A_from_ptr_A.get() != 0 );
+ VERIFY( A_from_ptr_B.get() != 0 );
+ VERIFY( A::ctor_count == 2 );
+ VERIFY( A::dtor_count == 0 );
+ VERIFY( B::ctor_count == 1 );
+ VERIFY( B::dtor_count == 0 );
+
+ return 0;
+}
+
+int
+main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc
new file mode 100644
index 0000000..191ba6f
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc
@@ -0,0 +1,45 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+// libstdc++/3946
+// http://gcc.gnu.org/ml/libstdc++/2002-07/msg00024.html
+struct Base { };
+struct Derived : public Base { };
+
+std::auto_ptr<Derived>
+conversiontest08() { return std::auto_ptr<Derived>(new Derived); }
+
+void
+test08()
+{
+ std::auto_ptr<Base> ptr;
+ ptr = conversiontest08();
+}
+
+
+int
+main()
+{
+ test08();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/4.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/4.cc
new file mode 100644
index 0000000..1814800
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/4.cc
@@ -0,0 +1,83 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+
+// Destruction
+int
+test04()
+{
+ reset_count_struct __attribute__((unused)) reset;
+ bool test __attribute__((unused)) = true;
+
+ {/*lifetine scope*/
+ std::auto_ptr<A> A_from_A(new A);
+ std::auto_ptr<A> A_from_B(new B);
+ std::auto_ptr<B> B_from_B(new B);
+ }/*destructors called here*/
+
+ VERIFY( A::ctor_count == 3 );
+ VERIFY( A::dtor_count == 3 );
+ VERIFY( B::ctor_count == 2 );
+ VERIFY( B::dtor_count == 2 );
+
+ return 0;
+}
+
+int
+main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/5.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/5.cc
new file mode 100644
index 0000000..7796981
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/5.cc
@@ -0,0 +1,87 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+
+// Class member construction/destruction
+template <typename T>
+class pimpl
+{
+public:
+ pimpl() : p_impl(new T) {}
+private:
+ std::auto_ptr<T> p_impl;
+};
+
+int
+test05()
+{
+ bool test __attribute__((unused)) = true;
+ reset_count_struct __attribute__((unused)) reset;
+
+ pimpl<A>();
+ pimpl<B>();
+ VERIFY( A::ctor_count == 2 );
+ VERIFY( A::dtor_count == 2 );
+ VERIFY( B::ctor_count == 1 );
+ VERIFY( B::dtor_count == 1 );
+ return 0;
+}
+
+int
+main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/6.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/6.cc
new file mode 100644
index 0000000..e4e13d9
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/6.cc
@@ -0,0 +1,91 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+// 20.4.5.2 auto_ptr members [lib.auto.ptr.members]
+
+// Member access
+int
+test06()
+{
+ reset_count_struct __attribute__((unused)) reset;
+ bool test __attribute__((unused)) = true;
+
+ std::auto_ptr<A> A_from_A(new A);
+ std::auto_ptr<A> A_from_A_ptr(A_from_A.release());
+ VERIFY( A_from_A.get() == 0 );
+ VERIFY( A_from_A_ptr.get() != 0 );
+ VERIFY( A_from_A_ptr->ctor_count == 1 );
+ VERIFY( (*A_from_A_ptr).dtor_count == 0 );
+
+ A* A_ptr = A_from_A_ptr.get();
+
+ A_from_A_ptr.reset(A_ptr);
+ VERIFY( A_from_A_ptr.get() == A_ptr );
+ VERIFY( A_from_A_ptr->ctor_count == 1 );
+ VERIFY( (*A_from_A_ptr).dtor_count == 0 );
+
+ A_from_A_ptr.reset(new A);
+ VERIFY( A_from_A_ptr.get() != A_ptr );
+ VERIFY( A_from_A_ptr->ctor_count == 2 );
+ VERIFY( (*A_from_A_ptr).dtor_count == 1 );
+ return 0;
+}
+
+int
+main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/7.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/7.cc
new file mode 100644
index 0000000..a77ba51
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/7.cc
@@ -0,0 +1,91 @@
+// Copyright (C) 2000, 2002, 2003, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.4.5 Template class auto_ptr [lib.auto.ptr]
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct A
+{
+ A() { ++ctor_count; }
+ virtual ~A() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long A::ctor_count = 0;
+long A::dtor_count = 0;
+
+struct B : A
+{
+ B() { ++ctor_count; }
+ virtual ~B() { ++dtor_count; }
+ static long ctor_count;
+ static long dtor_count;
+};
+long B::ctor_count = 0;
+long B::dtor_count = 0;
+
+
+struct reset_count_struct
+{
+ ~reset_count_struct()
+ {
+ A::ctor_count = 0;
+ A::dtor_count = 0;
+ B::ctor_count = 0;
+ B::dtor_count = 0;
+ }
+};
+
+// 20.4.5.3 auto_ptr conversions [lib.auto.ptr.conv]
+
+// Parameters and return values
+template <typename T>
+static std::auto_ptr<T> source()
+{
+ return std::auto_ptr<T>(new T);
+}
+
+template <typename T>
+static void drain(std::auto_ptr<T>)
+{}
+
+int
+test07()
+{
+ bool test __attribute__((unused)) = true;
+ reset_count_struct __attribute__((unused)) reset;
+
+ drain(source<A>());
+ // The resolution of core issue 84, now a DR, breaks this call.
+ // drain<A>(source<B>());
+ drain(source<B>());
+ VERIFY( A::ctor_count == 2 );
+ VERIFY( A::dtor_count == 2 );
+ VERIFY( B::ctor_count == 1 );
+ VERIFY( B::dtor_count == 1 );
+ return 0;
+}
+
+int
+main()
+{
+ test07();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr_neg.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
index 15a6ae4..15a6ae4 100644
--- a/libstdc++-v3/testsuite/20_util/auto_ptr_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
diff --git a/libstdc++-v3/testsuite/20_util/pair/1.cc b/libstdc++-v3/testsuite/20_util/pair/1.cc
new file mode 100644
index 0000000..7ccee6d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/1.cc
@@ -0,0 +1,79 @@
+// 2001-06-18 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.2.2 Pairs
+
+#include <utility>
+#include <testsuite_hooks.h>
+
+class gnu_obj
+{
+ int i;
+public:
+ gnu_obj(int arg = 0): i(arg) { }
+ bool operator==(const gnu_obj& rhs) const { return i == rhs.i; }
+ bool operator<(const gnu_obj& rhs) const { return i < rhs.i; }
+};
+
+template<typename T>
+ struct gnu_t
+ {
+ bool b;
+ public:
+ gnu_t(bool arg = 0): b(arg) { }
+ bool operator==(const gnu_t& rhs) const { return b == rhs.b; }
+ bool operator<(const gnu_t& rhs) const { return int(b) < int(rhs.b); }
+ };
+
+
+// heterogeneous
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::pair<bool, long> p_bl_1(true, 433);
+ std::pair<bool, long> p_bl_2 = std::make_pair(true, 433);
+ VERIFY( p_bl_1 == p_bl_2 );
+ VERIFY( !(p_bl_1 < p_bl_2) );
+
+ std::pair<const char*, float> p_sf_1("total enlightenment", 433.00);
+ std::pair<const char*, float> p_sf_2 = std::make_pair("total enlightenment",
+ 433.00);
+ VERIFY( p_sf_1 == p_sf_2 );
+ VERIFY( !(p_sf_1 < p_sf_2) );
+
+ std::pair<const char*, gnu_obj> p_sg_1("enlightenment", gnu_obj(5));
+ std::pair<const char*, gnu_obj> p_sg_2 = std::make_pair("enlightenment",
+ gnu_obj(5));
+ VERIFY( p_sg_1 == p_sg_2 );
+ VERIFY( !(p_sg_1 < p_sg_2) );
+
+ std::pair<gnu_t<long>, gnu_obj> p_st_1(gnu_t<long>(false), gnu_obj(5));
+ std::pair<gnu_t<long>, gnu_obj> p_st_2 = std::make_pair(gnu_t<long>(false),
+ gnu_obj(5));
+ VERIFY( p_st_1 == p_st_2 );
+ VERIFY( !(p_st_1 < p_st_2) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/2.cc b/libstdc++-v3/testsuite/20_util/pair/2.cc
new file mode 100644
index 0000000..82d928c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/2.cc
@@ -0,0 +1,60 @@
+// 2001-06-18 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.2.2 Pairs
+
+#include <utility>
+#include <testsuite_hooks.h>
+
+class gnu_obj
+{
+ int i;
+public:
+ gnu_obj(int arg = 0): i(arg) { }
+ bool operator==(const gnu_obj& rhs) const { return i == rhs.i; }
+ bool operator<(const gnu_obj& rhs) const { return i < rhs.i; }
+};
+
+template<typename T>
+ struct gnu_t
+ {
+ bool b;
+ public:
+ gnu_t(bool arg = 0): b(arg) { }
+ bool operator==(const gnu_t& rhs) const { return b == rhs.b; }
+ bool operator<(const gnu_t& rhs) const { return int(b) < int(rhs.b); }
+ };
+
+// homogeneous
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::pair<bool, bool> p_bb_1(true, false);
+ std::pair<bool, bool> p_bb_2 = std::make_pair(true, false);
+ VERIFY( p_bb_1 == p_bb_2 );
+ VERIFY( !(p_bb_1 < p_bb_2) );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/pairs.cc b/libstdc++-v3/testsuite/20_util/pair/3.cc
index 085937f..bac0e7e 100644
--- a/libstdc++-v3/testsuite/20_util/pairs.cc
+++ b/libstdc++-v3/testsuite/20_util/pair/3.cc
@@ -1,6 +1,6 @@
// 2001-06-18 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2004 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
@@ -43,47 +43,6 @@ template<typename T>
};
-// heterogeneous
-void test01()
-{
- bool test __attribute__((unused)) = true;
-
- std::pair<bool, long> p_bl_1(true, 433);
- std::pair<bool, long> p_bl_2 = std::make_pair(true, 433);
- VERIFY( p_bl_1 == p_bl_2 );
- VERIFY( !(p_bl_1 < p_bl_2) );
-
- std::pair<const char*, float> p_sf_1("total enlightenment", 433.00);
- std::pair<const char*, float> p_sf_2 = std::make_pair("total enlightenment",
- 433.00);
- VERIFY( p_sf_1 == p_sf_2 );
- VERIFY( !(p_sf_1 < p_sf_2) );
-
- std::pair<const char*, gnu_obj> p_sg_1("enlightenment", gnu_obj(5));
- std::pair<const char*, gnu_obj> p_sg_2 = std::make_pair("enlightenment",
- gnu_obj(5));
- VERIFY( p_sg_1 == p_sg_2 );
- VERIFY( !(p_sg_1 < p_sg_2) );
-
- std::pair<gnu_t<long>, gnu_obj> p_st_1(gnu_t<long>(false), gnu_obj(5));
- std::pair<gnu_t<long>, gnu_obj> p_st_2 = std::make_pair(gnu_t<long>(false),
- gnu_obj(5));
- VERIFY( p_st_1 == p_st_2 );
- VERIFY( !(p_st_1 < p_st_2) );
-}
-
-// homogeneous
-void test02()
-{
- bool test __attribute__((unused)) = true;
-
- std::pair<bool, bool> p_bb_1(true, false);
- std::pair<bool, bool> p_bb_2 = std::make_pair(true, false);
- VERIFY( p_bb_1 == p_bb_2 );
- VERIFY( !(p_bb_1 < p_bb_2) );
-}
-
-
// const
void test03()
{
@@ -113,28 +72,8 @@ void test03()
VERIFY( !(p_st_1 < p_st_2) );
}
-// const&
-void test04()
-{
- bool test __attribute__((unused)) = true;
- const gnu_obj& obj1 = gnu_obj(5);
- const std::pair<const char*, gnu_obj> p_sg_1("enlightenment", obj1);
- const std::pair<const char*, gnu_obj> p_sg_2 =
- std::make_pair("enlightenment", obj1);
- VERIFY( p_sg_1 == p_sg_2 );
- VERIFY( !(p_sg_1 < p_sg_2) );
-
- const gnu_t<long>& tmpl1 = gnu_t<long>(false);
- const std::pair<gnu_t<long>, gnu_obj> p_st_1(tmpl1, obj1);
- const std::pair<gnu_t<long>, gnu_obj> p_st_2 = std::make_pair(tmpl1, obj1);
- VERIFY( p_st_1 == p_st_2 );
- VERIFY( !(p_st_1 < p_st_2) );
-}
-
int main()
{
- test01();
- test02();
test03();
- test04();
+ return 0;
}
diff --git a/libstdc++-v3/testsuite/20_util/pair/4.cc b/libstdc++-v3/testsuite/20_util/pair/4.cc
new file mode 100644
index 0000000..f6a1b56
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/4.cc
@@ -0,0 +1,67 @@
+// 2001-06-18 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 20.2.2 Pairs
+
+#include <utility>
+#include <testsuite_hooks.h>
+
+class gnu_obj
+{
+ int i;
+public:
+ gnu_obj(int arg = 0): i(arg) { }
+ bool operator==(const gnu_obj& rhs) const { return i == rhs.i; }
+ bool operator<(const gnu_obj& rhs) const { return i < rhs.i; }
+};
+
+template<typename T>
+ struct gnu_t
+ {
+ bool b;
+ public:
+ gnu_t(bool arg = 0): b(arg) { }
+ bool operator==(const gnu_t& rhs) const { return b == rhs.b; }
+ bool operator<(const gnu_t& rhs) const { return int(b) < int(rhs.b); }
+ };
+
+// const&
+void test04()
+{
+ bool test __attribute__((unused)) = true;
+ const gnu_obj& obj1 = gnu_obj(5);
+ const std::pair<const char*, gnu_obj> p_sg_1("enlightenment", obj1);
+ const std::pair<const char*, gnu_obj> p_sg_2 =
+ std::make_pair("enlightenment", obj1);
+ VERIFY( p_sg_1 == p_sg_2 );
+ VERIFY( !(p_sg_1 < p_sg_2) );
+
+ const gnu_t<long>& tmpl1 = gnu_t<long>(false);
+ const std::pair<gnu_t<long>, gnu_obj> p_st_1(tmpl1, obj1);
+ const std::pair<gnu_t<long>, gnu_obj> p_st_2 = std::make_pair(tmpl1, obj1);
+ VERIFY( p_st_1 == p_st_2 );
+ VERIFY( !(p_st_1 < p_st_2) );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/performance/ifstream_extract_float.cc b/libstdc++-v3/testsuite/performance/ifstream_extract_float.cc
new file mode 100644
index 0000000..5c6b421
--- /dev/null
+++ b/libstdc++-v3/testsuite/performance/ifstream_extract_float.cc
@@ -0,0 +1,61 @@
+// Copyright (C) 2004 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 2, 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 COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <fstream>
+#include <testsuite_performance.h>
+
+int main()
+{
+ using namespace std;
+ using namespace __gnu_test;
+
+ time_counter time;
+ resource_counter resource;
+ const int iterations = 10000000;
+
+ {
+ ofstream out("tmp_perf_float.txt");
+ for (int i = 0; i < iterations; ++i)
+ {
+ float f = i * 3.14159265358979323846;
+ out << f << "\n";
+ }
+ }
+
+ {
+ ifstream in("tmp_perf_float.txt");
+ float f;
+ start_counters(time, resource);
+ for (int j, i = 0; i < iterations; ++i)
+ in >> f;
+ stop_counters(time, resource);
+ report_performance(__FILE__, "", time, resource);
+ }
+
+ unlink("tmp_perf_int.txt");
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc b/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc
index 6e51041..57e8c0e 100644
--- a/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc
+++ b/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc
@@ -42,7 +42,7 @@ int main()
start_counters(time, resource);
for (int i = 0; i < iterations; ++i)
{
- float f = static_cast<float>(i);
+ float f = i * 3.14159265358979323846;
out << f << "\n";
}
stop_counters(time, resource);