2004-01-13 Benjamin Kosnik * 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. Index: testsuite/20_util/auto_ptr.cc =================================================================== RCS file: testsuite/20_util/auto_ptr.cc diff -N testsuite/20_util/auto_ptr.cc *** testsuite/20_util/auto_ptr.cc 23 Sep 2003 20:02:04 -0000 1.8 --- /dev/null 1 Jan 1970 00:00:00 -0000 *************** *** 1,277 **** - // 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 - #include - - 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_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_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_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_from_A(new A); - std::auto_ptr B_from_B(new B); - - std::auto_ptr A_from_ptr_A(A_from_A); - std::auto_ptr 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_from_ptr_A; - std::auto_ptr A_from_ptr_B; - std::auto_ptr A_from_A(new A); - std::auto_ptr 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_from_A(new A); - std::auto_ptr A_from_B(new B); - std::auto_ptr 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 - class pimpl - { - public: - pimpl() : p_impl(new T) {} - private: - std::auto_ptr p_impl; - }; - - int - test05() - { - bool test __attribute__((unused)) = true; - reset_count_struct __attribute__((unused)) reset; - - pimpl(); - pimpl(); - 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_from_A(new A); - std::auto_ptr 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 - static std::auto_ptr source() - { - return std::auto_ptr(new T); - } - - template - static void drain(std::auto_ptr) - {} - - int - test07() - { - bool test __attribute__((unused)) = true; - reset_count_struct __attribute__((unused)) reset; - - drain(source()); - // The resolution of core issue 84, now a DR, breaks this call. - // drain(source()); - drain(source()); - 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 - conversiontest08() { return std::auto_ptr(new Derived); } - - void - test08() - { - std::auto_ptr ptr; - ptr = conversiontest08(); - } - - - int - main() - { - test01(); - test02(); - test03(); - test04(); - test05(); - test06(); - test07(); - test08(); - - return 0; - } --- 0 ---- Index: testsuite/20_util/auto_ptr_neg.cc =================================================================== RCS file: testsuite/20_util/auto_ptr_neg.cc diff -N testsuite/20_util/auto_ptr_neg.cc *** testsuite/20_util/auto_ptr_neg.cc 11 Nov 2003 20:09:13 -0000 1.3 --- /dev/null 1 Jan 1970 00:00:00 -0000 *************** *** 1,50 **** - // { dg-do compile } - - // Copyright (C) 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 negative tests [lib.auto.ptr] - - #include - #include - - // via Jack Reeves - // libstdc++/3946 - // http://gcc.gnu.org/ml/libstdc++/2002-07/msg00024.html - struct Base { }; - struct Derived : public Base { }; - - std::auto_ptr - foo() { return std::auto_ptr(new Derived); } - - int - test01() - { - std::auto_ptr ptr2; - ptr2 = new Base; // { dg-error "no match" } - return 0; - } - - int - main() - { - test01(); - return 0; - } - // { dg-error "candidates" "" { target *-*-* } 217 } - // { dg-error "std::auto_ptr" "" { target *-*-* } 347 } --- 0 ---- Index: testsuite/20_util/pairs.cc =================================================================== RCS file: testsuite/20_util/pairs.cc diff -N testsuite/20_util/pairs.cc *** testsuite/20_util/pairs.cc 23 Sep 2003 20:02:04 -0000 1.3 --- /dev/null 1 Jan 1970 00:00:00 -0000 *************** *** 1,140 **** - // 2001-06-18 Benjamin Kosnik - - // Copyright (C) 2001 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 - #include - - 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 - 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 p_bl_1(true, 433); - std::pair p_bl_2 = std::make_pair(true, 433); - VERIFY( p_bl_1 == p_bl_2 ); - VERIFY( !(p_bl_1 < p_bl_2) ); - - std::pair p_sf_1("total enlightenment", 433.00); - std::pair 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 p_sg_1("enlightenment", gnu_obj(5)); - std::pair 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_obj> p_st_1(gnu_t(false), gnu_obj(5)); - std::pair, gnu_obj> p_st_2 = std::make_pair(gnu_t(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 p_bb_1(true, false); - std::pair 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() - { - bool test __attribute__((unused)) = true; - - const std::pair p_bl_1(true, 433); - const std::pair p_bl_2 = std::make_pair(true, 433); - VERIFY( p_bl_1 == p_bl_2 ); - VERIFY( !(p_bl_1 < p_bl_2) ); - - const std::pair p_sf_1("total enlightenment", 433.00); - const std::pair p_sf_2 = - std::make_pair("total enlightenment", 433.00); - VERIFY( p_sf_1 == p_sf_2 ); - VERIFY( !(p_sf_1 < p_sf_2) ); - - const std::pair p_sg_1("enlightenment", gnu_obj(5)); - const std::pair p_sg_2 = - std::make_pair("enlightenment", gnu_obj(5)); - VERIFY( p_sg_1 == p_sg_2 ); - VERIFY( !(p_sg_1 < p_sg_2) ); - - const std::pair, gnu_obj> p_st_1(gnu_t(false), gnu_obj(5)); - const std::pair, gnu_obj> p_st_2 = - std::make_pair(gnu_t(false), gnu_obj(5)); - VERIFY( p_st_1 == p_st_2 ); - 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 p_sg_1("enlightenment", obj1); - const std::pair 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& tmpl1 = gnu_t(false); - const std::pair, gnu_obj> p_st_1(tmpl1, obj1); - const std::pair, 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(); - } --- 0 ---- Index: testsuite/20_util/auto_ptr/1.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/1.cc diff -N testsuite/20_util/auto_ptr/1.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/1.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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_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_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_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; + } Index: testsuite/20_util/auto_ptr/2.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/2.cc diff -N testsuite/20_util/auto_ptr/2.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/2.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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_from_A(new A); + std::auto_ptr B_from_B(new B); + + std::auto_ptr A_from_ptr_A(A_from_A); + std::auto_ptr 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; + } Index: testsuite/20_util/auto_ptr/3.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/3.cc diff -N testsuite/20_util/auto_ptr/3.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/3.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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_from_ptr_A; + std::auto_ptr A_from_ptr_B; + std::auto_ptr A_from_A(new A); + std::auto_ptr 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; + } Index: testsuite/20_util/auto_ptr/3946.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/3946.cc diff -N testsuite/20_util/auto_ptr/3946.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/3946.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + // libstdc++/3946 + // http://gcc.gnu.org/ml/libstdc++/2002-07/msg00024.html + struct Base { }; + struct Derived : public Base { }; + + std::auto_ptr + conversiontest08() { return std::auto_ptr(new Derived); } + + void + test08() + { + std::auto_ptr ptr; + ptr = conversiontest08(); + } + + + int + main() + { + test08(); + return 0; + } Index: testsuite/20_util/auto_ptr/4.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/4.cc diff -N testsuite/20_util/auto_ptr/4.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/4.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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_from_A(new A); + std::auto_ptr A_from_B(new B); + std::auto_ptr 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; + } Index: testsuite/20_util/auto_ptr/5.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/5.cc diff -N testsuite/20_util/auto_ptr/5.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/5.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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 + class pimpl + { + public: + pimpl() : p_impl(new T) {} + private: + std::auto_ptr p_impl; + }; + + int + test05() + { + bool test __attribute__((unused)) = true; + reset_count_struct __attribute__((unused)) reset; + + pimpl(); + pimpl(); + 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; + } Index: testsuite/20_util/auto_ptr/6.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/6.cc diff -N testsuite/20_util/auto_ptr/6.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/6.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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_from_A(new A); + std::auto_ptr 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; + } Index: testsuite/20_util/auto_ptr/7.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/7.cc diff -N testsuite/20_util/auto_ptr/7.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/7.cc 13 Jan 2004 18:55:24 -0000 *************** *** 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 + #include + + 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 + static std::auto_ptr source() + { + return std::auto_ptr(new T); + } + + template + static void drain(std::auto_ptr) + {} + + int + test07() + { + bool test __attribute__((unused)) = true; + reset_count_struct __attribute__((unused)) reset; + + drain(source()); + // The resolution of core issue 84, now a DR, breaks this call. + // drain(source()); + drain(source()); + 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; + } Index: testsuite/20_util/auto_ptr/assign_neg.cc =================================================================== RCS file: testsuite/20_util/auto_ptr/assign_neg.cc diff -N testsuite/20_util/auto_ptr/assign_neg.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/auto_ptr/assign_neg.cc 13 Jan 2004 18:55:24 -0000 *************** *** 0 **** --- 1,50 ---- + // { dg-do compile } + + // Copyright (C) 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 negative tests [lib.auto.ptr] + + #include + #include + + // via Jack Reeves + // libstdc++/3946 + // http://gcc.gnu.org/ml/libstdc++/2002-07/msg00024.html + struct Base { }; + struct Derived : public Base { }; + + std::auto_ptr + foo() { return std::auto_ptr(new Derived); } + + int + test01() + { + std::auto_ptr ptr2; + ptr2 = new Base; // { dg-error "no match" } + return 0; + } + + int + main() + { + test01(); + return 0; + } + // { dg-error "candidates" "" { target *-*-* } 217 } + // { dg-error "std::auto_ptr" "" { target *-*-* } 347 } Index: testsuite/20_util/pair/1.cc =================================================================== RCS file: testsuite/20_util/pair/1.cc diff -N testsuite/20_util/pair/1.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/pair/1.cc 13 Jan 2004 18:55:24 -0000 *************** *** 0 **** --- 1,79 ---- + // 2001-06-18 Benjamin Kosnik + + // 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 + #include + + 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 + 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 p_bl_1(true, 433); + std::pair p_bl_2 = std::make_pair(true, 433); + VERIFY( p_bl_1 == p_bl_2 ); + VERIFY( !(p_bl_1 < p_bl_2) ); + + std::pair p_sf_1("total enlightenment", 433.00); + std::pair 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 p_sg_1("enlightenment", gnu_obj(5)); + std::pair 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_obj> p_st_1(gnu_t(false), gnu_obj(5)); + std::pair, gnu_obj> p_st_2 = std::make_pair(gnu_t(false), + gnu_obj(5)); + VERIFY( p_st_1 == p_st_2 ); + VERIFY( !(p_st_1 < p_st_2) ); + } + + int main() + { + test01(); + return 0; + } Index: testsuite/20_util/pair/2.cc =================================================================== RCS file: testsuite/20_util/pair/2.cc diff -N testsuite/20_util/pair/2.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/pair/2.cc 13 Jan 2004 18:55:24 -0000 *************** *** 0 **** --- 1,60 ---- + // 2001-06-18 Benjamin Kosnik + + // 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 + #include + + 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 + 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 p_bb_1(true, false); + std::pair 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; + } Index: testsuite/20_util/pair/3.cc =================================================================== RCS file: testsuite/20_util/pair/3.cc diff -N testsuite/20_util/pair/3.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/pair/3.cc 13 Jan 2004 18:55:24 -0000 *************** *** 0 **** --- 1,79 ---- + // 2001-06-18 Benjamin Kosnik + + // 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 + #include + + 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 + 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 test03() + { + bool test __attribute__((unused)) = true; + + const std::pair p_bl_1(true, 433); + const std::pair p_bl_2 = std::make_pair(true, 433); + VERIFY( p_bl_1 == p_bl_2 ); + VERIFY( !(p_bl_1 < p_bl_2) ); + + const std::pair p_sf_1("total enlightenment", 433.00); + const std::pair p_sf_2 = + std::make_pair("total enlightenment", 433.00); + VERIFY( p_sf_1 == p_sf_2 ); + VERIFY( !(p_sf_1 < p_sf_2) ); + + const std::pair p_sg_1("enlightenment", gnu_obj(5)); + const std::pair p_sg_2 = + std::make_pair("enlightenment", gnu_obj(5)); + VERIFY( p_sg_1 == p_sg_2 ); + VERIFY( !(p_sg_1 < p_sg_2) ); + + const std::pair, gnu_obj> p_st_1(gnu_t(false), gnu_obj(5)); + const std::pair, gnu_obj> p_st_2 = + std::make_pair(gnu_t(false), gnu_obj(5)); + VERIFY( p_st_1 == p_st_2 ); + VERIFY( !(p_st_1 < p_st_2) ); + } + + int main() + { + test03(); + return 0; + } Index: testsuite/20_util/pair/4.cc =================================================================== RCS file: testsuite/20_util/pair/4.cc diff -N testsuite/20_util/pair/4.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/20_util/pair/4.cc 13 Jan 2004 18:55:24 -0000 *************** *** 0 **** --- 1,67 ---- + // 2001-06-18 Benjamin Kosnik + + // 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 + #include + + 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 + 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 p_sg_1("enlightenment", obj1); + const std::pair 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& tmpl1 = gnu_t(false); + const std::pair, gnu_obj> p_st_1(tmpl1, obj1); + const std::pair, 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; + } Index: testsuite/performance/ifstream_extract_float.cc =================================================================== RCS file: testsuite/performance/ifstream_extract_float.cc diff -N testsuite/performance/ifstream_extract_float.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/performance/ifstream_extract_float.cc 13 Jan 2004 18:55:35 -0000 *************** *** 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 + #include + + 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; + }; Index: testsuite/performance/ofstream_insert_float.cc =================================================================== RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/performance/ofstream_insert_float.cc,v retrieving revision 1.4 diff -c -p -r1.4 ofstream_insert_float.cc *** testsuite/performance/ofstream_insert_float.cc 24 Jul 2003 21:08:03 -0000 1.4 --- testsuite/performance/ofstream_insert_float.cc 13 Jan 2004 18:55:35 -0000 *************** int main() *** 42,48 **** start_counters(time, resource); for (int i = 0; i < iterations; ++i) { ! float f = static_cast(i); out << f << "\n"; } stop_counters(time, resource); --- 42,48 ---- start_counters(time, resource); for (int i = 0; i < iterations; ++i) { ! float f = i * 3.14159265358979323846; out << f << "\n"; } stop_counters(time, resource);