OSDN Git Service

2006-09-18 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Sep 2006 02:33:21 +0000 (02:33 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Sep 2006 02:33:21 +0000 (02:33 +0000)
* testsuite/util/regression/res_mng: Remove.
* testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc: Merge..
* testsuite/util/regression/res_mng/forced_exception.hpp: Merge...
* testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp: Merge..
* testsuite/util/regression/res_mng/dbg_ex_allocator.hpp: Merge..
* testsuite/util/testsuite_allocator.h (throw_allocator): Merge...
* include/ext/throw_allocator.h (throw_allocator): ... into this.
* src/throw_allocator.cc: ...and this.
* include/Makefile.am (ext_headers): Add.
* include/Makefile.in: Regenerate.
* src/Makefile.am (sources): New.
* src/Makefile.in: Regenerate.
* testsuite/lib/libstdc++.exp: Subtract dbg_ex_allocator_base.cc.

* include/ext/pb_ds/detail/map_debug_base.hpp: Adjust
includes, names, and namespaces.
* testsuite/23_containers/list/modifiers/insert/25288.cc: Same.
* testsuite/util/regression/rand/priority_queue/detail/
erase_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/detail/
constructor_destructor_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/detail/
insert_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/detail/
modify_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/detail/
split_join_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/detail/
operator_fn_imps.hpp: Same.
* testsuite/util/regression/rand/priority_queue/
container_rand_regression_test.hpp: Same.
* testsuite/util/regression/rand/assoc/detail/
subscript_fn_imps.hpp: Same.
* testsuite/util/regression/rand/assoc/detail/
operator_fn_imps.hpp: Same.
* testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp: Same.
* testsuite/util/regression/rand/assoc/detail/
constructor_destructor_fn_imps.hpp
* testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp: Same.
* testsuite/util/regression/rand/assoc/detail/
split_join_fn_imps.hpp: Same.
* testsuite/util/regression/rand/assoc/
container_rand_regression_test.hpp: Same.
* testsuite/util/regression/priority_queue/common_type.hpp: Same.
* testsuite/util/regression/assoc/common_type.hpp: Same.
* testsuite/util/regression/basic_type.hpp: Same.
* testsuite/util/rng/twister_rand_gen.cc: Tweak.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117050 138bc75d-0d04-0410-961f-82ee72b054a4

30 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/include/Makefile.am
libstdc++-v3/include/Makefile.in
libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp
libstdc++-v3/include/ext/throw_allocator.h [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
libstdc++-v3/testsuite/lib/libstdc++.exp
libstdc++-v3/testsuite/util/regression/assoc/common_type.hpp
libstdc++-v3/testsuite/util/regression/basic_type.hpp
libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp
libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator.hpp [deleted file]
libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc [deleted file]
libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp [deleted file]
libstdc++-v3/testsuite/util/regression/res_mng/forced_exception.hpp [deleted file]
libstdc++-v3/testsuite/util/rng/twister_rand_gen.cc
libstdc++-v3/testsuite/util/testsuite_allocator.h

index 505266b..d0c8d63 100644 (file)
@@ -1,3 +1,53 @@
+2006-09-18  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * testsuite/util/regression/res_mng: Remove.
+       * testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc: Merge..
+       * testsuite/util/regression/res_mng/forced_exception.hpp: Merge...
+       * testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp: Merge..
+       * testsuite/util/regression/res_mng/dbg_ex_allocator.hpp: Merge..
+       * testsuite/util/testsuite_allocator.h (throw_allocator): Merge...
+       * include/ext/throw_allocator.h (throw_allocator): ... into this.
+       * src/throw_allocator.cc: ...and this.
+       * include/Makefile.am (ext_headers): Add.
+       * include/Makefile.in: Regenerate.      
+       * src/Makefile.am (sources): New.
+       * src/Makefile.in: Regenerate.
+       * testsuite/lib/libstdc++.exp: Subtract dbg_ex_allocator_base.cc.
+
+       * include/ext/pb_ds/detail/map_debug_base.hpp: Adjust
+       includes, names, and namespaces.
+       * testsuite/23_containers/list/modifiers/insert/25288.cc: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       erase_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       constructor_destructor_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       insert_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       modify_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       split_join_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/detail/
+       operator_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/priority_queue/
+       container_rand_regression_test.hpp: Same.
+       * testsuite/util/regression/rand/assoc/detail/
+       subscript_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/assoc/detail/
+       operator_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/assoc/detail/
+       constructor_destructor_fn_imps.hpp
+       * testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/assoc/detail/
+       split_join_fn_imps.hpp: Same.
+       * testsuite/util/regression/rand/assoc/
+       container_rand_regression_test.hpp: Same.
+       * testsuite/util/regression/priority_queue/common_type.hpp: Same.
+       * testsuite/util/regression/assoc/common_type.hpp: Same.
+       * testsuite/util/regression/basic_type.hpp: Same.
+       * testsuite/util/rng/twister_rand_gen.cc: Tweak.
+       
 2006-09-18  Tom Tromey  <tromey@redhat.com>
 
        * configure: Rebuilt.
index 7170d84..7c941f7 100644 (file)
@@ -552,6 +552,7 @@ ext_headers = \
        ${ext_srcdir}/rope \
        ${ext_srcdir}/ropeimpl.h \
        ${ext_srcdir}/slist \
+       ${ext_srcdir}/throw_allocator.h \
        ${ext_srcdir}/typelist.h \
        ${ext_srcdir}/type_traits.h \
        ${ext_srcdir}/rc_string_base.h \
index f112020..eef91dd 100644 (file)
@@ -773,6 +773,7 @@ ext_headers = \
        ${ext_srcdir}/rope \
        ${ext_srcdir}/ropeimpl.h \
        ${ext_srcdir}/slist \
+       ${ext_srcdir}/throw_allocator.h \
        ${ext_srcdir}/typelist.h \
        ${ext_srcdir}/type_traits.h \
        ${ext_srcdir}/rc_string_base.h \
index fce6256..d31a0c2 100644 (file)
@@ -51,7 +51,7 @@
 
 #include <list>
 #include <utility>
-#include <regression/res_mng/dbg_ex_allocator.hpp>
+#include <ext/throw_allocator.h>
 #include <debug/debug.h>
 
 namespace pb_ds
@@ -151,7 +151,7 @@ namespace pb_ds
     insert_new(const_key_reference r_key)
     {
       _GLIBCXX_DEBUG_ONLY(assert_valid();)
-      pb_ds::test::dbg_ex_allocator<char> alloc;
+      __gnu_cxx::throw_allocator<char> alloc;
       const double orig_throw_prob = alloc.get_throw_prob();
       alloc.set_throw_prob(0);
       if (find(r_key) != m_key_set.end())
@@ -310,7 +310,7 @@ namespace pb_ds
     PB_DS_CLASS_C_DEC::
     split(const_key_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
     {
-      pb_ds::test::dbg_ex_allocator<char> alloc;
+      __gnu_cxx::throw_allocator<char> alloc;
       const double orig_throw_prob = alloc.get_throw_prob();
       alloc.set_throw_prob(0);
       other.clear();
@@ -331,7 +331,7 @@ namespace pb_ds
     PB_DS_CLASS_C_DEC::
     join(PB_DS_CLASS_C_DEC& other)
     {
-      pb_ds::test::dbg_ex_allocator<char> alloc;
+      __gnu_cxx::throw_allocator<char> alloc;
       const double orig_throw_prob = alloc.get_throw_prob();
       alloc.set_throw_prob(0);
       key_set_iterator it = other.m_key_set.begin();
diff --git a/libstdc++-v3/include/ext/throw_allocator.h b/libstdc++-v3/include/ext/throw_allocator.h
new file mode 100644 (file)
index 0000000..38f6afb
--- /dev/null
@@ -0,0 +1,384 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006 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.
+
+// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
+
+// Permission to use, copy, modify, sell, and distribute this software
+// is hereby granted without fee, provided that the above copyright
+// notice appears in all copies, and that both that copyright notice
+// and this permission notice appear in supporting documentation. None
+// of the above authors, nor IBM Haifa Research Laboratories, make any
+// representation about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied
+// warranty.
+
+/**
+ * @file throw_allocator.h Contains an exception-throwing allocator
+ * useful for testing exception safety. In addition, allocation
+ * addresses are stored and sanity checked.
+ */
+
+#ifndef _THROW_ALLOCATOR_H
+#define _THROW_ALLOCATOR_H 1
+
+#include <cmath>
+#include <map>
+#include <set>
+#include <string>
+#include <ostream>
+#include <stdexcept>
+#include <utility>
+#include <tr1/random>
+
+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+  class twister_rand_gen
+  {
+  public:
+    twister_rand_gen(unsigned int seed = 
+                    static_cast<unsigned int>(std::time(0)));
+    
+    void
+    init(unsigned int);
+    
+    double
+    get_prob();
+    
+  private:
+    std::tr1::mt19937 _M_generator;
+  };
+
+
+  struct forced_exception_error : public std::exception
+  { };
+
+  class throw_allocator_base
+  {
+  public:
+    void
+    init(unsigned long seed);
+
+    static void
+    set_throw_prob(double throw_prob);
+
+    static double
+    get_throw_prob();
+
+    static void
+    set_label(size_t l);
+
+    static bool
+    empty();
+
+    struct group_throw_prob_adjustor
+    {
+      group_throw_prob_adjustor(size_t size) 
+      : _M_throw_prob_orig(_S_throw_prob)
+      {
+       _S_throw_prob =
+         1 - ::pow(double(1 - _S_throw_prob), double(0.5 / (size + 1)));
+      }
+
+      ~group_throw_prob_adjustor()
+      { _S_throw_prob = _M_throw_prob_orig; }
+
+    private:
+      const double _M_throw_prob_orig;
+    };
+
+    struct zero_throw_prob_adjustor
+    {
+      zero_throw_prob_adjustor() : _M_throw_prob_orig(_S_throw_prob)
+      { _S_throw_prob = 0; }
+
+      ~zero_throw_prob_adjustor()
+      { _S_throw_prob = _M_throw_prob_orig; }
+
+    private:
+      const double _M_throw_prob_orig;
+    };
+
+  protected:
+    static void
+    insert(void*, size_t);
+
+    static void
+    erase(void*, size_t);
+
+    static void
+    throw_conditionally();
+
+    static void
+    assert_allocatod(const void*, size_t);
+
+    static void
+    check_allocated(void*, size_t);
+
+  private:
+    typedef std::pair<size_t, size_t>          alloc_data_type;
+    typedef std::map<void*, alloc_data_type>   map_type;
+    typedef map_type::value_type               entry_type;
+    typedef map_type::const_iterator           const_iterator;
+    typedef map_type::const_reference          const_reference;
+
+    friend std::ostream& 
+    operator<<(std::ostream&, const throw_allocator_base&);
+
+    static entry_type
+    make_entry(void*, size_t);
+
+    static void
+    print_to_string(std::string&);
+
+    static void
+    print_to_string(std::string&, const_reference);
+
+    static twister_rand_gen    _S_g;
+    static map_type            _S_map;
+    static double              _S_throw_prob;
+    static size_t              _S_label;
+  };
+
+
+  template<typename T>
+    class throw_allocator : public throw_allocator_base
+    {
+    public:
+      typedef size_t           size_type;
+      typedef ptrdiff_t        difference_type;
+      typedef T*               pointer;
+      typedef const T*                 const_pointer;
+      typedef T&               reference;
+      typedef const T&                 const_reference;
+      typedef T                value_type;
+
+      template<typename U>
+      struct rebind
+      {
+        typedef throw_allocator<U> other;
+      };
+
+      throw_allocator() throw() { }
+
+      throw_allocator(const throw_allocator<T>&) throw() { }
+
+      template <class U>
+      throw_allocator(const throw_allocator<U>&) throw() { }
+
+      ~throw_allocator() throw() { }
+
+      size_type
+      max_size() const throw()
+      { return std::allocator<T>().max_size(); }
+
+      pointer
+      allocate(size_type num, std::allocator<void>::const_pointer hint = 0)
+      {
+       throw_conditionally();
+       T* const a = std::allocator<T>().allocate(num, hint);
+       insert(a, sizeof(T) * num);
+       return a;
+      }
+
+      void
+      construct(pointer p, const T& val)
+      { return std::allocator<T>().construct(p, val); }
+
+      void
+      destroy(pointer p)
+      {        std::allocator<T>().destroy(p); }
+
+      void
+      deallocate(pointer p, size_type num)
+      {
+       erase(p, sizeof(T) * num);
+       std::allocator<T>().deallocate(p, num);
+      }
+
+      void
+      check_allocated(pointer p, size_type num)
+      { throw_allocator_base::check_allocated(p, sizeof(T) * num); }
+    };
+
+  template<typename T>
+    inline bool
+    operator==(const throw_allocator<T>&, const throw_allocator<T>&)
+    { return true; }
+
+  template<typename T>
+    inline bool
+    operator!=(const throw_allocator<T>&, const throw_allocator<T>&)
+    { return false; }
+
+  std::ostream& 
+  operator<<(std::ostream& os, const throw_allocator_base& alloc)
+  {
+    std::string error;
+    throw_allocator_base::print_to_string(error);
+    os << error;
+    return os;
+  }
+
+  // XXX Should be in .cc.
+  twister_rand_gen::
+  twister_rand_gen(unsigned int seed) : _M_generator(seed)  { }
+
+  void
+  twister_rand_gen::
+  init(unsigned int seed)
+  { _M_generator.seed(seed); }
+
+  double
+  twister_rand_gen::
+  get_prob()
+  {
+    const double eng_min = _M_generator.min();
+    const double eng_range =
+      static_cast<const double>(_M_generator.max() - eng_min);
+
+    const double eng_res =
+      static_cast<const double>(_M_generator() - eng_min);
+
+    const double ret = eng_res / eng_range;
+    _GLIBCXX_DEBUG_ASSERT(ret >= 0 && ret <= 1);
+    return ret;
+  }
+
+  twister_rand_gen throw_allocator_base::_S_g;
+
+  throw_allocator_base::map_type
+  throw_allocator_base::_S_map;
+
+  double throw_allocator_base::_S_throw_prob;
+
+  size_t throw_allocator_base::_S_label = 0;
+
+  throw_allocator_base::entry_type
+  throw_allocator_base::make_entry(void* p, size_t size)
+  { return std::make_pair(p, alloc_data_type(_S_label, size)); }
+
+  void
+  throw_allocator_base::init(unsigned long seed)
+  { _S_g.init(seed); }
+
+  void
+  throw_allocator_base::set_throw_prob(double throw_prob)
+  { _S_throw_prob = throw_prob; }
+
+  double
+  throw_allocator_base::get_throw_prob()
+  { return _S_throw_prob; }
+
+  void
+  throw_allocator_base::set_label(size_t l)
+  { _S_label = l; }
+
+  void
+  throw_allocator_base::insert(void* p, size_t size)
+  {
+    const_iterator found_it = _S_map.find(p);
+    if (found_it != _S_map.end())
+      {
+       std::string error("throw_allocator_base::insert");
+       error += "double insert!";
+       error += '\n';
+       print_to_string(error, make_entry(p, size));
+       print_to_string(error, *found_it);
+       throw std::logic_error(error);
+      }
+    _S_map.insert(make_entry(p, size));
+  }
+
+  bool
+  throw_allocator_base::empty()
+  { return _S_map.empty(); }
+
+  void
+  throw_allocator_base::erase(void* p, size_t size)
+  {
+    check_allocated(p, size);
+    _S_map.erase(p);
+  }
+
+  void
+  throw_allocator_base::check_allocated(void* p, size_t size)
+  {
+    const_iterator found_it = _S_map.find(p);
+    if (found_it == _S_map.end())
+      {
+       std::string error("throw_allocator_base::check_allocated");
+       error += "null erase!";
+       error += '\n';
+       print_to_string(error, make_entry(p, size));
+       throw std::logic_error(error);
+      }
+
+    if (found_it->second.second != size)
+      {
+       std::string error("throw_allocator_base::check_allocated");
+       error += "wrong-size erase!";
+       error += '\n';
+       print_to_string(error, make_entry(p, size));
+       print_to_string(error, *found_it);
+       throw std::logic_error(error);
+      }
+  }
+
+  void
+  throw_allocator_base::throw_conditionally()
+  {
+    if (_S_g.get_prob() < _S_throw_prob)
+      throw forced_exception_error();
+  }
+
+  void
+  throw_allocator_base::print_to_string(std::string& s)
+  {
+    const_iterator it = throw_allocator_base::_S_map.begin();
+    const_iterator end_it = throw_allocator_base::_S_map.end();
+    for (; it != end_it; ++it)
+      print_to_string(s, *it);
+    s += '\n';
+  }
+
+  void
+  throw_allocator_base::print_to_string(std::string& s, const_reference ref)
+  {
+    s += reinterpret_cast<const unsigned long>(ref.first);
+    s += ": ";
+    s += ref.second.first ;
+    s += ", ";
+    s += ref.second.second;
+    s += '\n';
+  }
+
+_GLIBCXX_END_NAMESPACE
+
+#endif 
index a229718..340f336 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006 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
 
 #include <list>
 #include <testsuite_hooks.h>
-#include <testsuite_allocator.h>
+#include <ext/throw_allocator.h>
 
 // libstdc++/25288
 void test01()
 {
   bool test __attribute__((unused)) = true;
 
-  typedef __gnu_test::throw_allocator<int> my_alloc;
-  typedef std::list<int, my_alloc > my_list;
+  typedef int value_type;
+  typedef __gnu_cxx::throw_allocator<value_type> allocator_type;
+  typedef std::list<value_type, allocator_type> list_type;
 
   for (int j = 0; j < 10; ++j)
     for (int i = 0; i < 10; ++i)
       {
-       my_alloc alloc1(j + i);
-       my_list list1(alloc1);
+       allocator_type alloc1;
+       allocator_type::zero_throw_prob_adjustor adjust1;
+       list_type list1(alloc1);
        
        for (int k = 0; k < j; ++k)
-         list1.push_back(-(k + 1));
+         list1.push_back(value_type(-(k + 1)));
       
        try
          {
+           alloc1.set_throw_prob(1);
            list1.insert(list1.begin(), 10, 99);
            VERIFY( false );
          }
-       catch (std::bad_alloc&)
+       catch (__gnu_cxx::forced_exception_error&)
          {
            VERIFY( true );
          }
@@ -53,12 +56,13 @@ void test01()
            VERIFY( false );
          }
        
-       VERIFY( list1.size() == my_list::size_type(j) );
+       VERIFY( list1.size() == list_type::size_type(j) );
        VERIFY( list1.size() == 0 || list1.back() == -j );
        VERIFY( list1.size() == 0 || list1.front() == -1 );
 
-       my_alloc alloc2(j + i);
-       my_list list2(alloc2);
+       allocator_type alloc2;
+       allocator_type::zero_throw_prob_adjustor adjust2;
+       list_type list2(alloc2);
        
        const int data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        
@@ -67,10 +71,11 @@ void test01()
        
        try
          {
+           alloc2.set_throw_prob(1);
            list2.insert(list2.begin(), data, data + 10);
            VERIFY( false );
          }
-       catch (std::bad_alloc&)
+       catch (__gnu_cxx::forced_exception_error&)
          {
            VERIFY( true );
          }
@@ -79,7 +84,7 @@ void test01()
            VERIFY( false );
          }
 
-       VERIFY( list2.size() == my_list::size_type(j) );
+       VERIFY( list2.size() == list_type::size_type(j) );
        VERIFY( list2.size() == 0 || list2.back() == -j );
        VERIFY( list2.size() == 0 || list2.front() == -1 );
       }
index 36c2e97..0d059cf 100644 (file)
@@ -411,8 +411,7 @@ proc v3-build_support { } {
     set source_files [list testsuite_abi.cc testsuite_allocator.cc \
                          testsuite_character.cc testsuite_hooks.cc \
                 rng/twister_rand_gen.cc io/verified_cmd_line_input.cc \
-                io/prog_bar.cc regression/res_mng/dbg_ex_allocator_base.cc \
-            performance/time/elapsed_timer.cc ]
+                         io/prog_bar.cc performance/time/elapsed_timer.cc ]
     foreach f $source_files {
        set obj [file rootname $f].o
        set object_file [file tail $obj]
index fa34568..7567c5f 100644 (file)
@@ -54,7 +54,7 @@ namespace pb_ds
 {
 namespace test
 {
-  typedef dbg_ex_allocator<basic_type> alloc_type;
+  typedef __gnu_cxx::throw_allocator<basic_type> alloc_type;
 
   struct hash
   {
index 626f9e6..279c288 100644 (file)
 #define PB_DS_BASIC_TYPE_HPP
 
 #include <string>
-#include <regression/res_mng/dbg_ex_allocator.hpp>
+#include <ext/throw_allocator.h>
 
 namespace pb_ds
 {
 namespace test
 {
 #define PB_DS_BASE_C_DEC \
-  std::basic_string<char, std::char_traits<char>, dbg_ex_allocator<char> >
+  std::basic_string<char, std::char_traits<char>, \
+                   __gnu_cxx::throw_allocator<char> >
 
   struct basic_type : public PB_DS_BASE_C_DEC
   {
index c8e6b3d..ce5a9e8 100644 (file)
@@ -54,7 +54,7 @@ namespace pb_ds
 {
 namespace test
 {
-  typedef dbg_ex_allocator<basic_type> alloc_type;
+  typedef __gnu_cxx::throw_allocator<basic_type> alloc_type;
 
   typedef pq_common_types<basic_type, std::less<basic_type>, alloc_type>::regression_tl pq_tl_t;
 
index 440c349..d53ce34 100644 (file)
@@ -156,7 +156,7 @@ namespace detail
        other_op
       };
 
-    typedef dbg_ex_allocator<char> alloc_t;
+    typedef __gnu_cxx::throw_allocator<char> alloc_t;
 
   private:
 
index 82cc024..00f74bb 100644 (file)
@@ -81,7 +81,7 @@ default_constructor()
     {
       m_p_c = new Cntnr;
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -136,7 +136,7 @@ copy_constructor()
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -172,7 +172,7 @@ assignment_operator()
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -270,7 +270,7 @@ it_constructor_imp(pb_ds::cc_hash_tag)
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -384,7 +384,7 @@ it_constructor_imp(pb_ds::gp_hash_tag)
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -429,7 +429,7 @@ it_constructor_imp(pb_ds::tree_tag)
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -462,7 +462,7 @@ it_constructor_imp(pb_ds::list_update_tag)
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -507,7 +507,7 @@ it_constructor_imp(pb_ds::pat_trie_tag)
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
index 0b2a62c..0622d9e 100644 (file)
@@ -89,7 +89,7 @@ erase()
                            m_p_c,
                            & m_native_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
 
@@ -141,7 +141,7 @@ erase_if()
                              m_p_c,
                              & m_native_c);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
@@ -229,7 +229,7 @@ erase_it_imp(pb_ds::detail::true_type)
         if (range_guarantee)
          PB_DS_THROW_IF_FAILED(                next_ers_it == next_it,  "",  m_p_c, & m_native_c);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
@@ -303,7 +303,7 @@ erase_rev_it_imp(pb_ds::detail::true_type)
         if (native_it != m_native_c.end())
          m_native_c.erase(native_it);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
index 262b28b..94e74ce 100644 (file)
@@ -73,7 +73,7 @@ insert()
          }
         m_native_c.insert(test_traits::native_value(v));
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
       }
index 34df60e..e6298a8 100644 (file)
@@ -52,15 +52,12 @@ operator()()
   xml_result_set_regression_formatter* p_fmt = NULL;
 
   if (m_disp)
-    p_fmt = new xml_result_set_regression_formatter(
-                                                   string_form<Cntnr>::name(),
+    p_fmt = new xml_result_set_regression_formatter(string_form<Cntnr>::name(),
                                                    string_form<Cntnr>::desc());
 
   m_g.init(m_seed);
   m_alloc.init(m_seed);
-
   prog_bar pb(m_n, std::cout, m_disp);
-
   m_i = 0;
 
   try
@@ -107,7 +104,7 @@ operator()()
                      PB_DS_RUN_MTHD(subscript)
                         break;
                     default:
-                     PB_DS_THROW_IF_FAILED(                            false,       "",       m_p_c,      & m_native_c);
+                     PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
                     }
                  break;
                 case erase_op:
@@ -126,7 +123,7 @@ operator()()
                      PB_DS_RUN_MTHD(erase_rev_it)
                         break;
                     default:
-                     PB_DS_THROW_IF_FAILED(                            false,       "",       m_p_c,      & m_native_c);
+                     PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
                     }
                  break;
                 case clear_op:
@@ -160,11 +157,11 @@ operator()()
                      get_set_loads();
                      break;
                     default:
-                     PB_DS_THROW_IF_FAILED(                            false,       "",       m_p_c,      & m_native_c);
+                     PB_DS_THROW_IF_FAILED(false, "", m_p_c, & m_native_c);
                     }
                  break;
                 default:
-                 PB_DS_THROW_IF_FAILED(                        false,   "",   m_p_c,  & m_native_c);
+                 PB_DS_THROW_IF_FAILED(false, "", m_p_c, & m_native_c);
                 };
             }
 
@@ -173,29 +170,24 @@ operator()()
     }
   catch(...)
     {
-      std::cerr << "Failed at index " << static_cast<unsigned long>(m_i) <<
-       std::endl;
-
+      std::cerr << "Failed at index " << static_cast<unsigned long>(m_i) 
+               << std::endl;
       delete m_p_c;
-
       throw;
     }
 
   delete m_p_c;
 
-  if (!m_alloc.dbg_ex_allocator<char>::empty())
+  if (!m_alloc.throw_allocator<char>::empty())
     {
       std::cerr << "detected leaks!" << std::endl;
-
       std::cerr << m_alloc << std::endl;
-
-      PB_DS_THROW_IF_FAILED(            false, "", m_p_c, & m_native_c);
+      PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
     }
 
   if (m_disp)
     {
       std::cout << std::endl;
-
       delete p_fmt;
     }
 }
@@ -216,7 +208,7 @@ get_next_op()
   if (prob < m_ip + m_ep + m_cp)
     return (clear_op);
 
-  PB_DS_THROW_IF_FAILED(        prob <= 1, prob, m_p_c,    & m_native_c);
+  PB_DS_THROW_IF_FAILED(prob <= 1, prob, m_p_c, &m_native_c);
 
   return (other_op);
 }
@@ -227,16 +219,12 @@ PB_DS_CLASS_C_DEC::
 get_next_sub_op(size_t max)
 {
   const double p = m_g.get_prob();
-
   const double delta = 1 / static_cast<double>(max);
-
   size_t i = 0;
-
   while (true)
     if (p <= (i + 1)*  delta)
       {
-       PB_DS_THROW_IF_FAILED(
-                             i < max,
+       PB_DS_THROW_IF_FAILED(i < max,
                              static_cast<unsigned long>(i) << " " <<
                              static_cast<unsigned long>(max),
                              m_p_c,
index 3b0da01..073fda5 100644 (file)
@@ -134,7 +134,7 @@ split_join_imp(pb_ds::detail::true_type)
 
         m_p_c->swap(lhs);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
index 561f230..a2c59e1 100644 (file)
@@ -82,7 +82,7 @@ subscript_imp(pb_ds::detail::false_type)
         m_native_c[test_traits::native_value(v).first] =
          test_traits::native_value(v).second;
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
       }
@@ -114,7 +114,7 @@ subscript_imp(pb_ds::detail::true_type)
 
         m_native_c.insert(test_traits::native_value(v));
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
       }
index 310d59b..15ff02b 100644 (file)
@@ -149,7 +149,7 @@ namespace pb_ds
 
        typedef basic_type value_type;
 
-       typedef native_priority_queue< std::string, true> native_type;
+       typedef native_priority_queue<std::string, true> native_type;
 
        enum op
          {
@@ -160,9 +160,9 @@ namespace pb_ds
            other_op
          };
 
-       typedef dbg_ex_allocator< char> alloc_t;
+       typedef __gnu_cxx::throw_allocator<char> alloc_t;
 
-       typedef regression_test_traits< Cntnr> test_traits;
+       typedef regression_test_traits<Cntnr> test_traits;
 
       private:
 
index e04627c..8728282 100644 (file)
@@ -82,7 +82,7 @@ default_constructor()
     {
       m_p_c = new Cntnr;
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -137,7 +137,7 @@ copy_constructor()
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -173,7 +173,7 @@ assignment_operator()
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
@@ -222,7 +222,7 @@ it_constructor()
 
       std::swap(p_c, m_p_c);
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
     }
index f5e287b..82b126a 100644 (file)
@@ -66,7 +66,7 @@ pop()
          m_native_c.pop();
         }
     }
-  catch(forced_exception& )
+  catch(__gnu_cxx::forced_exception_error& )
     {
       done = false;
 
@@ -123,7 +123,7 @@ erase_if()
                              m_p_c,
                              & m_native_c);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
@@ -163,7 +163,7 @@ erase_it()
             m_p_c->erase(it);
          }
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
index 70eea25..24dc649 100644 (file)
@@ -75,7 +75,7 @@ push()
 
         m_native_c.push(test_traits::native_value(v));
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
       }
index e213a2e..5e99e09 100644 (file)
@@ -80,7 +80,7 @@ modify()
             m_native_c.modify(native_v, new_native_v);
          }
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
index 9b8c0dd..3041bda 100644 (file)
@@ -52,15 +52,12 @@ operator()()
   xml_result_set_regression_formatter* p_fmt = NULL;
 
   if (m_disp)
-    p_fmt = new xml_result_set_regression_formatter(
-                                                   string_form<Cntnr>::name(),
+    p_fmt = new xml_result_set_regression_formatter(string_form<Cntnr>::name(),
                                                    string_form<Cntnr>::desc());
 
   m_g.init(m_seed);
   m_alloc.init(m_seed);
-
   prog_bar pb(m_n, std::cout, m_disp);
-
   m_i = 0;
 
   try
@@ -68,9 +65,7 @@ operator()()
       for (m_i = 0; m_i < m_n; ++m_i)
         {
          PB_DS_TRACE("Op #" << static_cast<unsigned long>(m_i));
-
          allocator::set_label(m_i);
-
          switch(m_i)
             {
             case 0:
@@ -110,7 +105,7 @@ operator()()
                      PB_DS_RUN_MTHD(erase_it)
                         break;
                     default:
-                     PB_DS_THROW_IF_FAILED(                            false,       "",       m_p_c,      & m_native_c);
+                     PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
                     }
                  break;
                 case clear_op:
@@ -135,42 +130,35 @@ operator()()
                      PB_DS_RUN_MTHD(split_join)
                         break;
                     default:
-                     PB_DS_THROW_IF_FAILED(                            false,       "",       m_p_c,      & m_native_c);
+                     PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
                     }
                  break;
                 default:
-                 PB_DS_THROW_IF_FAILED(                        false,   "",   m_p_c,  & m_native_c);
+                 PB_DS_THROW_IF_FAILED(false, "", m_p_c,  &m_native_c);
                 };
             }
-
          pb.inc();
         }
     }
   catch(...)
     {
-      std::cerr << "Failed at index " << static_cast<unsigned long>(m_i) <<
-       std::endl;
-
+      std::cerr << "Failed at index " << static_cast<unsigned long>(m_i) 
+               << std::endl;
       delete m_p_c;
-
       throw;
     }
-
   delete m_p_c;
 
-  if (!m_alloc.dbg_ex_allocator<char>::empty())
+  if (!m_alloc.throw_allocator<char>::empty())
     {
       std::cerr << "detected leaks!" << std::endl;
-
       std::cerr << m_alloc << std::endl;
-
-      PB_DS_THROW_IF_FAILED(            false, "", m_p_c, & m_native_c);
+      PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
     }
 
   if (m_disp)
     {
       std::cout << std::endl;
-
       delete p_fmt;
     }
 }
@@ -194,9 +182,8 @@ get_next_op()
   if (prob < m_ip + m_dp + m_ep + m_cp)
     return (clear_op);
 
-  PB_DS_THROW_IF_FAILED(        prob <= 1, prob, m_p_c,    & m_native_c);
-
-  return (other_op);
+  PB_DS_THROW_IF_FAILED(prob <= 1, prob, m_p_c, &m_native_c);
+  return other_op;
 }
 
 PB_DS_CLASS_T_DEC
@@ -205,22 +192,17 @@ PB_DS_CLASS_C_DEC::
 get_next_sub_op(size_t max)
 {
   const double p = m_g.get_prob();
-
   const double delta = 1 / static_cast<double>(max);
-
   size_t i = 0;
-
   while (true)
     if (p <= (i + 1)*  delta)
       {
-       PB_DS_THROW_IF_FAILED(
-                             i < max,
+       PB_DS_THROW_IF_FAILED(i < max,
                              static_cast<unsigned long>(i) << " " <<
                              static_cast<unsigned long>(max),
                              m_p_c,
                              & m_native_c);
-
-       return (i);
+       return i;
       }
     else
       ++i;
index b3f7425..41c3027 100644 (file)
@@ -105,7 +105,7 @@ split_join()
                              m_p_c,
                              & m_native_c);
       }
-    catch(forced_exception& )
+    catch(__gnu_cxx::forced_exception_error& )
       {
         done = false;
 
diff --git a/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator.hpp b/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator.hpp
deleted file mode 100644 (file)
index 53072db..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006 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.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file dbg_ex_allocator.hpp
- * Contains a debugging, exception throwing, allocator used for tests.
- */
-
-#ifndef PB_DS_DBG_EX_ALLOCATOR_HPP
-#define PB_DS_DBG_EX_ALLOCATOR_HPP
-
-#include <regression/res_mng/dbg_ex_allocator_base.hpp>
-
-namespace pb_ds
-{
-  namespace test
-  {
-    template<typename T>
-    class dbg_ex_allocator : public detail::dbg_ex_allocator_base
-    {
-    public:
-      typedef size_t size_type;
-      typedef ptrdiff_t difference_type;
-      typedef T* pointer;
-      typedef const T* const_pointer;
-      typedef T& reference;
-      typedef const T& const_reference;
-      typedef T value_type;
-
-      template<typename U>
-      struct rebind
-      {
-        typedef dbg_ex_allocator<U> other;
-      };
-
-      dbg_ex_allocator() throw() { }
-
-      dbg_ex_allocator(const dbg_ex_allocator<T>& ) throw() { }
-
-      template <class U>
-      dbg_ex_allocator(const dbg_ex_allocator<U>& ) throw() { }
-
-      ~dbg_ex_allocator() throw() { }
-
-      size_type
-      max_size() const throw()
-      { return std::allocator<T>().max_size(); }
-
-      pointer
-      allocate(size_type num, std::allocator<void>::const_pointer hint = 0);
-
-      void
-      construct(pointer p, const T& r_val)
-      { return std::allocator<T>().construct(p, r_val); }
-
-      void
-      destroy(pointer p)
-      {        std::allocator<T>().destroy(p); }
-
-      void
-      deallocate(pointer p, size_type num)
-      {
-       erase(p, sizeof(T) * num);
-       std::allocator<T>().deallocate(p, num);
-      }
-
-      void
-      check_allocated(pointer p, size_type num)
-      { detail::dbg_ex_allocator_base::check_allocated(p, sizeof(T) * num); }
-    };
-
-    template<typename T>
-    typename dbg_ex_allocator<T>::pointer
-    dbg_ex_allocator<T>::
-    allocate(size_type num, std::allocator<void>::const_pointer hint/*= 0*/)
-    {
-      cond_throw();
-      T* const a_t = std::allocator<T>().allocate(num, hint);
-      insert(a_t, sizeof(T) * num);
-      return a_t;
-    }
-
-    template<typename T>
-    inline bool
-    operator==(const dbg_ex_allocator<T>& , const dbg_ex_allocator<T>& )
-    { return true; }
-
-  } // namespace test
-} // namespace pb_ds
-
-#endif 
diff --git a/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc b/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.cc
deleted file mode 100644 (file)
index 6038ab0..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006 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.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file dbg_ex_allocator_base.cpp
- * Contains a debugging, exception throwing, allocator used for tests.
- */
-
-#include <util/regression/res_mng/dbg_ex_allocator_base.hpp>
-
-namespace pb_ds
-{
-
-  namespace test
-  {
-
-    namespace detail
-    {
-
-      twister_rand_gen dbg_ex_allocator_base::s_g;
-
-      dbg_ex_allocator_base::map_t
-      dbg_ex_allocator_base::s_map;
-
-      double dbg_ex_allocator_base::s_throw_prob;
-
-      size_t dbg_ex_allocator_base::s_label = 0;
-
-      dbg_ex_allocator_base::entry_t
-      dbg_ex_allocator_base::
-      make_entry(void* p_r, size_t size)
-      {
-       return std::make_pair(
-                             p_r,
-                             alloc_data_t(s_label, size));
-      }
-
-      void
-      dbg_ex_allocator_base::
-      init(unsigned long seed)
-      {
-       s_g.init(seed);
-      }
-
-      void
-      dbg_ex_allocator_base::
-      set_throw_prob(double throw_prob)
-      {
-       s_throw_prob = throw_prob;
-      }
-
-      double
-      dbg_ex_allocator_base::
-      get_throw_prob()
-      {
-       return (s_throw_prob);
-      }
-
-      void
-      dbg_ex_allocator_base::
-      set_label(size_t l)
-      {
-       s_label = l;
-      }
-
-      void
-      dbg_ex_allocator_base::
-      insert(void* p_r, size_t size)
-      {
-       const_iterator found_it = s_map.find(p_r);
-
-       if (found_it != s_map.end())
-         {
-           std::cerr << "Double insert! " << std::endl;
-           print_to_ostream(std::cerr, make_entry(p_r, size));
-           print_to_ostream(std::cerr, * found_it);
-
-           throw std::logic_error("double insert");
-         }
-
-       s_map.insert(make_entry(p_r, size));
-      }
-
-      bool
-      dbg_ex_allocator_base::
-      empty()
-      {
-       return (s_map.empty());
-      }
-
-      void
-      dbg_ex_allocator_base::
-      erase(void* p_r, size_t size)
-      {
-       check_allocated(p_r, size);
-
-       s_map.erase(p_r);
-      }
-
-      void
-      dbg_ex_allocator_base::
-      check_allocated(void* p_r, size_t size)
-      {
-       const_iterator found_it =
-         s_map.find(p_r);
-
-       if (found_it == s_map.end())
-         {
-           std::cerr << "Null erase! " << std::endl;
-           print_to_ostream(std::cerr, make_entry(p_r, size));
-
-           throw std::logic_error("null erase");
-         }
-
-       if (found_it->second.second != size)
-         {
-           std::cerr << "Wrong-size erase! " << std::endl;
-           print_to_ostream(std::cerr, make_entry(p_r, size));
-           print_to_ostream(std::cerr, * found_it);
-
-           throw std::logic_error("wrong-size erase");
-         }
-      }
-
-      void
-      dbg_ex_allocator_base::
-      cond_throw()
-      {
-       if (s_g.get_prob() < s_throw_prob)
-         throw forced_exception();
-      }
-
-      void
-      dbg_ex_allocator_base::
-      print_to_ostream(std::ostream& r_os)
-      {
-       const_iterator it =
-         dbg_ex_allocator_base::s_map.begin();
-
-       const_iterator end_it =
-         dbg_ex_allocator_base::s_map.end();
-
-       for (; it != end_it; ++it)
-         print_to_ostream(r_os, * it);
-
-       r_os << std::endl;
-      }
-
-      void
-      dbg_ex_allocator_base::
-      print_to_ostream(std::ostream& r_os, const_reference r_entry)
-      {
-       r_os << r_entry.first << ": ";
-       r_os << r_entry.second.first << ", ";
-       r_os << r_entry.second.second;
-
-       r_os << std::endl;
-      }
-
-      std::ostream& 
-      operator<<(std::ostream& r_os, const dbg_ex_allocator_base& /*r_dbg*/)
-      {
-       dbg_ex_allocator_base::print_to_ostream(r_os);
-
-       return r_os;
-      }
-
-    } // namespace detail
-
-  } // namespace test
-
-} // namespace pb_ds
diff --git a/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp b/libstdc++-v3/testsuite/util/regression/res_mng/dbg_ex_allocator_base.hpp
deleted file mode 100644 (file)
index 9831281..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006 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.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file dbg_ex_allocator_base.hpp
- * Contains a debugging, exception throwing, allocator used for tests.
- */
-
-#ifndef PB_DS_DBG_EX_ALLOCATOR_BASE_HPP
-#define PB_DS_DBG_EX_ALLOCATOR_BASE_HPP
-
-#include <math.h>
-#include <map>
-#include <set>
-#include <iostream>
-#include <stdexcept>
-#include <regression/res_mng/forced_exception.hpp>
-#include <rng/twister_rand_gen.hpp>
-
-namespace pb_ds
-{
-  namespace test
-  {
-    namespace detail
-    {
-      class dbg_ex_allocator_base;
-
-      std::ostream& 
-      operator<<(std::ostream& r_os, const dbg_ex_allocator_base& r_dbg);
-
-      class dbg_ex_allocator_base
-      {
-      public:
-       typedef size_t label;
-
-      public:
-       void
-        init(unsigned long seed);
-
-       static void
-        set_throw_prob(double throw_prob);
-
-       static double
-        get_throw_prob();
-
-       static void
-        set_label(size_t l);
-
-       static bool
-        empty();
-
-       class group_throw_prob_adjustor
-       {
-       public:
-         group_throw_prob_adjustor(size_t size) : m_orig_throw_prob(s_throw_prob)
-         {
-            s_throw_prob =
-             1 - ::pow(double(1 - s_throw_prob), double(0.5 / (size + 1)));
-         }
-
-         ~group_throw_prob_adjustor()
-         { s_throw_prob = m_orig_throw_prob; }
-
-       private:
-         const double m_orig_throw_prob;
-       };
-
-       class zero_throw_prob_adjustor
-       {
-       public:
-         zero_throw_prob_adjustor() : m_orig_throw_prob(s_throw_prob)
-         { s_throw_prob = 0; }
-
-         ~zero_throw_prob_adjustor()
-         { s_throw_prob = m_orig_throw_prob; }
-
-       private:
-         const double m_orig_throw_prob;
-       };
-
-      protected:
-       static void
-        insert(void* p_r, size_t size);
-
-       static void
-        erase(void* p_r, size_t size);
-
-       static void
-        cond_throw();
-
-       static void
-        assert_allocatod(const void* p_r, size_t size);
-
-       static void
-        check_allocated(void* p_r, size_t size);
-
-      private:
-       typedef std::pair<label, size_t>        alloc_data_t;
-       typedef std::map<void*, alloc_data_t>   map_t;
-       typedef map_t::value_type               entry_t;
-       typedef map_t::const_iterator           const_iterator;
-       typedef map_t::const_reference          const_reference;
-
-       static void
-        print_to_ostream(std::ostream& r_os);
-
-       static void
-        print_to_ostream(std::ostream& r_os, const_reference r_entry);
-
-       static entry_t
-        make_entry(void* p_r, size_t size);
-
-       static twister_rand_gen s_g;
-       static map_t            s_map;
-       static double           s_throw_prob;
-       static size_t           s_label;
-
-       friend std::ostream& operator<<(std::ostream& r_os, 
-                                       const dbg_ex_allocator_base& r_dbg);
-      };
-    } // namespace detail
-  } // namespace test
-} // namespace pb_ds
-
-#endif // #ifndef PB_DS_DBG_EX_ALLOCATOR_BASE_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/res_mng/forced_exception.hpp b/libstdc++-v3/testsuite/util/regression/res_mng/forced_exception.hpp
deleted file mode 100644 (file)
index 3694203..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// -*- C++ -*-
-
-// Copyright (C) 2005, 2006 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.
-
-// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
-
-// Permission to use, copy, modify, sell, and distribute this software
-// is hereby granted without fee, provided that the above copyright
-// notice appears in all copies, and that both that copyright notice
-// and this permission notice appear in supporting documentation. None
-// of the above authors, nor IBM Haifa Research Laboratories, make any
-// representation about the suitability of this software for any
-// purpose. It is provided "as is" without express or implied
-// warranty.
-
-/**
- * @file forced_exception.hpp
- * Contains an exception thrown by the debugging allocator.
- */
-
-#ifndef PB_DS_FORCED_EXCEPTION_HPP
-#define PB_DS_FORCED_EXCEPTION_HPP
-
-namespace pb_ds
-{
-  namespace test
-  {
-    struct forced_exception
-    { };
-  } // namespace test
-} // namespace pb_ds
-
-#endif // #ifndef PB_DS_FORCED_EXCEPTION_HPP
-
index 879844a..fbe7e8a 100644 (file)
@@ -68,14 +68,11 @@ namespace pb_ds
     get_unsigned_long(unsigned long min, unsigned long max)
     {
       _GLIBCXX_DEBUG_ASSERT(max >= min);
-
       const double prob = get_prob();
-
       const unsigned long rand_word = 
        (unsigned long)((max - min + 1) * prob) + min;
 
       _GLIBCXX_DEBUG_ASSERT(rand_word <= max);
-
       return rand_word;
     }
 
@@ -91,9 +88,7 @@ namespace pb_ds
        static_cast<const double>(m_base_generator() - eng_min);
 
       const double ret = eng_res / eng_range;
-
-      _GLIBCXX_DEBUG_ASSERT(ret >=0 && ret <= 1);
-
+      _GLIBCXX_DEBUG_ASSERT(ret >= 0 && ret <= 1);
       return ret;
     }
   } // namespace test
index 0ea1215..7c5f572 100644 (file)
@@ -362,82 +362,6 @@ namespace __gnu_test
       
       int personality;
     };
-
-
-  template<typename Tp>
-    class throw_allocator
-    {
-    public:
-      typedef std::size_t                         size_type;
-      typedef std::ptrdiff_t                      difference_type;
-      typedef Tp*                                 pointer;
-      typedef const Tp*                           const_pointer;
-      typedef Tp&                                 reference;
-      typedef const Tp&                           const_reference;
-      typedef Tp                                  value_type;
-      
-      template<typename Tp1>
-        struct rebind
-       { typedef throw_allocator<Tp1> other; };
-
-      throw_allocator() throw()
-      : count(size_type(-1)) { }
-
-      throw_allocator(size_type c) throw()
-      : count(c) { }
-      
-      template<typename Tp1>
-        throw_allocator(const throw_allocator<Tp1>& b) throw()
-       : count(b.get_count()) { }
-
-      size_type get_count() const { return count; }
-      
-      pointer
-      address(reference x) const { return &x; }
-    
-      const_pointer
-      address(const_reference x) const { return &x; }
-    
-      pointer
-      allocate(size_type n, const void* = 0)
-      {
-        if (count == 0)
-         throw std::bad_alloc();
-       
-       if (count != size_type(-1))
-         --count;
-        
-       return static_cast<Tp*>(::operator new(n * sizeof(Tp)));
-      }
-      
-      void
-      deallocate(pointer p, size_type)
-      { ::operator delete(p); }
-      
-      size_type
-      max_size() const throw() 
-      { return size_type(-1) / sizeof(Tp); }
-      
-      void 
-      construct(pointer p, const Tp& val) 
-      { ::new(p) Tp(val); }
-    
-      void 
-      destroy(pointer p) { p->~Tp(); }
-
-    private:
-      template<typename Tp1>
-        friend inline bool
-        operator==(const throw_allocator&, const throw_allocator<Tp1>&)
-        { return true; }
-
-      template<typename Tp1>
-        friend inline bool
-        operator!=(const throw_allocator&, const throw_allocator<Tp1>&)
-        { return false; }
-      
-      size_type count;
-    };
 }; // namespace __gnu_test
 
 #endif // _GLIBCXX_TESTSUITE_ALLOCATOR_H