summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/testsuite/util/regression
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2008-06-06 19:32:43 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2008-06-06 19:32:43 +0000
commit2661beb59aac112282f8d7b34dbb57342419b9f8 (patch)
treec613dcf3fb3a3c8ab813dc257a992c37ad32aa74 /libstdc++-v3/testsuite/util/regression
parent842503911be8408849b3c843831a3770dd471b4e (diff)
downloadppe42-gcc-2661beb59aac112282f8d7b34dbb57342419b9f8.tar.gz
ppe42-gcc-2661beb59aac112282f8d7b34dbb57342419b9f8.zip
2008-06-06 Benjamin Kosnik <bkoz@redhat.com>
* doc/xml/manual/using.xml: Outline exception topics. * include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp: Format. * include/ext/pb_ds/detail/left_child_next_sibling_heap_/ policy_access_fn_imps.hpp: Same. * include/ext/pb_ds/priority_queue.hpp: Same. * include/ext/throw_allocator.h: Same. * include/ext/pb_ds/tag_and_trait.hpp (string_tag): New tag. (sequence_tag): New tag. Doxygen markup fixes. * testsuite/lib/libstdc++.exp: Remove twister_ran_gen.cc source file. * testsuite/performance/ext/pb_ds/text_find_timing.cc: Fix comment typo, include paths, format. * testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc: Same. * testsuite/performance/ext/pb_ds/ hash_random_int_erase_mem_usage.cc: Same. * testsuite/performance/ext/pb_ds/ random_int_subscript_find_timing.cc: Same. * testsuite/performance/ext/pb_ds/ priority_queue_text_push_timing.cc: Same. * testsuite/performance/ext/pb_ds/tree_split_join_timing.cc: Same. * testsuite/performance/ext/pb_ds/random_int_find_timing.cc: Same. * testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage.hpp * testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp * testsuite/performance/ext/pb_ds/ priority_queue_random_int_push_timing.cc: Same. * testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.hpp * testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc: Same. * testsuite/performance/ext/pb_ds/ priority_queue_text_push_pop_timing.cc: Same. * testsuite/performance/ext/pb_ds/ priority_queue_text_join_timing.cc: Same. * testsuite/performance/ext/pb_ds/ priority_queue_random_int_push_pop_timing.cc: Same. * testsuite/performance/ext/pb_ds/ random_int_subscript_insert_timing.cc: Same. * testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc: Same. * testsuite/performance/ext/pb_ds/multimap_text_insert_timing.hpp * testsuite/performance/ext/pb_ds/ priority_queue_text_pop_mem_usage.cc: Same. * testsuite/performance/ext/pb_ds/ hash_zlob_random_int_find_timing.cc: Same. * testsuite/ext/pb_ds/regression/hash_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/trie_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/priority_queue_rand.cc: Same. * testsuite/ext/pb_ds/regression/tree_data_map_rand.cc: Same. * testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc: Same. * testsuite/util/regression/trait/priority_queue/trait.hpp: Same. * testsuite/util/regression/trait/erase_if_fn.hpp: Same. * testsuite/util/regression/trait/assoc/native_type_trait.hpp: Same. * testsuite/util/regression/trait/assoc/node_update_trait.hpp: Same. * testsuite/util/regression/trait/assoc/get_set_load_trait.hpp: Same. * testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp: Same. * testsuite/util/regression/trait/assoc/trait.hpp: Same. * testsuite/util/regression/trait/assoc/resize_trait.hpp: Same. * testsuite/util/regression/trait/assoc/type_trait.hpp: Same. * testsuite/util/regression/trait/assoc/to_string.hpp: Same. * testsuite/util/regression/basic_type.hpp: Same. * testsuite/util/common_type/priority_queue/string_form.hpp: Same. * testsuite/util/common_type/priority_queue/detail/ ds_string_form.hpp: Same. * testsuite/util/common_type/assoc/string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ resize_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ trigger_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ comb_hash_fn_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ds_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ size_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ probe_fn_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ list_update_policy_string_form.hpp: Same. * testsuite/util/common_type/assoc/detail/ store_hash_string_form.hpp: Same. * testsuite/util/common_type/assoc/native_set.hpp: Same. * testsuite/util/io/prog_bar.cc: Same. * testsuite/util/regression/rand/io: Remove. * testsuite/util/regression/rand/io/priority_queue: Same. * testsuite/util/regression/rand/io/assoc: Same. * testsuite/util/regression/rand/io/priority_queue/ xml_formatter.hpp: Consolidate this... * testsuite/util/regression/rand/io/assoc/xml_formatter.hpp: ...this * testsuite/util/regression/rand/io/xml_formatter.hpp: ... and this * testsuite/util/regression/rand/xml_formatter.hpp: ...here. * testsuite/util/regression/rand/priority_queue/ container_rand_regression_test.hpp:To ... container_rand_regression_test.h: ... this. * testsuite/util/regression/rand/priority_queue/detail/*.hpp:To ... * testsuite/util/regression/rand/priority_queue/ container_rand_regression_test.tcc: ... this. PB_DS_THROW_IF_FAIL: Change to _GLIBCXX_THROW_IF, adjust predicate. PB_DS_SET_DESTRUCT_PRINT: Fold inline. PB_DS_CANCEL_DESTRUCT_PRINT: Fold inline. * testsuite/util/regression/rand/priority_queue/ rand_regression_test.hpp: Adjust includes. * testsuite/util/regression/rand/assoc/ container_rand_regression_test.hpp: To ... * testsuite/util/regression/rand/assoc/ container_rand_regression_test.h: ... this. * testsuite/util/regression/rand/assoc/detail/*.hpp:To ... * testsuite/util/regression/rand/assoc/ container_rand_regression_test.tcc: ...this. * testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Adjust includes. * testsuite/util/regression/priority_queue: Remove. * testsuite/util/regression/assoc: Remove. * testsuite/util/regression/priority_queue/ common_type.hpp: Consolidate this... * testsuite/util/regression/assoc/common_type.hpp: ... and this * testsuite/util/regression/common_type.hpp: ...here. * testsuite/util/rng: Remove. * testsuite/util/rng/twister_rand_gen.cc: Consolidate... * testsuite/util/rng/twister_rand_gen.hpp: ... and this * testsuite/util/testsuite_rng.h: ...here. * testsuite/util/native_type/priority_queue: Remove. * testsuite/util/native_type/priority_queue/ native_priority_queue.hpp: To... * testsuite/util/native_type/native_priority_queue.hpp: ...here. * testsuite/util/native_type/assoc: Remove. * testsuite/util/native_type/assoc/native_multimap.hpp: To... * testsuite/util/native_type/assoc/native_tree_tag.hpp: To... * testsuite/util/native_type/assoc/native_hash_multimap.hpp: To... * testsuite/util/native_type/assoc/native_set.hpp: To... * testsuite/util/native_type/assoc/native_map.hpp: To... * testsuite/util/native_type/assoc/native_hash_set.hpp: To... * testsuite/util/native_type/assoc/native_hash_tag.hpp: To... * testsuite/util/native_type/assoc/native_hash_map.hpp: To... * testsuite/util/native_type/native_multimap.hpp: ...here. * testsuite/util/native_type/native_tree_tag.hpp: ...here. * testsuite/util/native_type/native_hash_multimap.hpp: ...here. * testsuite/util/native_type/native_set.hpp: ...here. * testsuite/util/native_type/native_map.hpp: ...here. * testsuite/util/native_type/native_hash_set.hpp: ...here. * testsuite/util/native_type/native_hash_tag.hpp: ...here. * testsuite/util/native_type/native_hash_map.hpp: ...here. * testsuite/util/common_type/priority_queue/common_type.hpp: Make include guard distinct. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136497 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite/util/regression')
-rw-r--r--libstdc++-v3/testsuite/util/regression/basic_type.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/common_type.hpp (renamed from libstdc++-v3/testsuite/util/regression/assoc/common_type.hpp)61
-rw-r--r--libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp65
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h (renamed from libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.hpp)127
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc2143
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/clear_fn_imps.hpp58
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/cmp_fn_imps.hpp601
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp410
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/defs_fn_imps.hpp248
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/diagnostic_fn_imps.hpp79
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp319
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_load_fn_imps.hpp102
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_loads_fn_imps.hpp122
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp89
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/it_conversion_fn_imps.hpp307
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp246
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/policy_access_fn_imps.hpp184
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/resize_fn_imps.hpp125
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp149
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp127
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp18
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/io/assoc/xml_formatter.hpp81
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/io/priority_queue/xml_formatter.hpp82
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h275
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc848
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/clear_fn_imps.hpp60
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/cmp_fn_imps.hpp108
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp235
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/defs_fn_imps.hpp98
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/diagnostic_fn_imps.hpp73
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp178
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp93
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/it_conversion_fn_imps.hpp190
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp96
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp222
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/policy_access_fn_imps.hpp66
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp120
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp8
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/xml_formatter.hpp (renamed from libstdc++-v3/testsuite/util/regression/rand/io/xml_formatter.hpp)67
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp25
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp2
49 files changed, 3459 insertions, 5066 deletions
diff --git a/libstdc++-v3/testsuite/util/regression/basic_type.hpp b/libstdc++-v3/testsuite/util/regression/basic_type.hpp
index 93a12922ffa..61b094a6951 100644
--- a/libstdc++-v3/testsuite/util/regression/basic_type.hpp
+++ b/libstdc++-v3/testsuite/util/regression/basic_type.hpp
@@ -41,7 +41,7 @@
/**
* @file basic_type.hpp
- * Containsert a type used for regression tests' key and data.
+ * Contains a type used for regression tests' key and data.
*/
#ifndef PB_DS_BASIC_TYPE_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/assoc/common_type.hpp b/libstdc++-v3/testsuite/util/regression/common_type.hpp
index 61f04a8336d..1bfaa30a690 100644
--- a/libstdc++-v3/testsuite/util/regression/assoc/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/regression/common_type.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008 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
@@ -47,8 +47,10 @@
#ifndef PB_DS_RAND_REGRESSION_TEST_COMMON_TYPE_HPP
#define PB_DS_RAND_REGRESSION_TEST_COMMON_TYPE_HPP
+#include <vector>
#include <regression/basic_type.hpp>
#include <common_type/assoc/common_type.hpp>
+#include <common_type/priority_queue/common_type.hpp>
namespace __gnu_pbds
{
@@ -119,7 +121,64 @@ namespace test
typedef tl_t min_tl_t;
};
+
+ // Sequence types.
+ typedef pq_common_types<basic_type, std::less<basic_type>, alloc_type> pq_types;
+
+ typedef pq_types::regression_tl pq_tl_t;
+ typedef pq_tl_t min_pq_tl_t;
+
+ template<typename _Tp, typename _Alloc>
+ struct vector_adaptor : public std::vector<_Tp, _Alloc>
+ {
+ private:
+ typedef std::vector<_Tp, _Alloc> base_type;
+
+ public:
+ typedef typename base_type::value_type value_type;
+ typedef typename base_type::pointer pointer;
+ typedef typename base_type::const_pointer const_pointer;
+ typedef typename base_type::reference reference;
+ typedef typename base_type::const_reference const_reference;
+ typedef typename base_type::iterator iterator;
+ typedef typename base_type::const_iterator const_iterator;
+ typedef typename base_type::reverse_iterator reverse_iterator;
+ typedef typename base_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename base_type::size_type size_type;
+ typedef typename base_type::difference_type difference_type;
+ typedef typename base_type::allocator_type allocator_type;
+
+ typedef __gnu_pbds::sequence_tag container_category;
+ typedef std::less<_Tp> cmp_fn;
+
+ const cmp_fn&
+ get_cmp_fn() const
+ { return _M_cmp; }
+
+ vector_adaptor() { }
+ vector_adaptor(iterator) { }
+ vector_adaptor(iterator, iterator) { }
+ vector_adaptor(iterator, iterator, const cmp_fn&) { }
+ vector_adaptor(const cmp_fn& other) { }
+
+ using base_type::push_back;
+ using base_type::pop_back;
+
+ // erase_if
+
+ cmp_fn _M_cmp;
+
+ };
+
+ namespace detail
+ {
+
+ };
+
+ typedef vector_adaptor<basic_type, alloc_type> vector_type;
+ typedef __gnu_cxx::typelist::create1<vector_type>::type vector_tl_t;
+ // Associative types.
typedef tree_types<null_mapped_type>::tl_t tree_set_tl_t;
typedef tree_types<null_mapped_type>::min_tl_t min_tree_set_tl_t;
typedef tree_types<basic_type>::tl_t tree_map_tl_t;
diff --git a/libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp b/libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp
deleted file mode 100644
index 7740a913852..00000000000
--- a/libstdc++-v3/testsuite/util/regression/priority_queue/common_type.hpp
+++ /dev/null
@@ -1,65 +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 common_type.hpp
- * Contains types used for regression tests.
- */
-
-#ifndef PB_DS_RAND_REGRESSION_TEST_COMMON_TYPE_HPP
-#define PB_DS_RAND_REGRESSION_TEST_COMMON_TYPE_HPP
-
-#include <regression/basic_type.hpp>
-#include <common_type/priority_queue/common_type.hpp>
-
-namespace __gnu_pbds
-{
-namespace test
-{
- 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;
-
- typedef pq_tl_t min_pq_tl_t;
-} // namespace test
-} // namespace __gnu_pbds
-
-#endif
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
index af0a8e17b7e..c9f6186ce46 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008 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
@@ -40,12 +40,12 @@
// warranty.
/**
- * @file container_rand_regression_test.hpp
+ * @file container_rand_regression_test.h
* Contains a random regression test for a specific container type.
*/
-#ifndef PB_DS_CONTAINER_RAND_REGRESSION_TEST_HPP
-#define PB_DS_CONTAINER_RAND_REGRESSION_TEST_HPP
+#ifndef PB_DS_CONTAINER_RAND_REGRESSION_TEST_H
+#define PB_DS_CONTAINER_RAND_REGRESSION_TEST_H
#include <algorithm>
#include <string>
@@ -53,10 +53,10 @@
#include <utility>
#include <ext/pb_ds/assoc_container.hpp>
#include <io/prog_bar.hpp>
-#include <rng/twister_rand_gen.hpp>
+#include <testsuite_rng.h>
#include <regression/trait/assoc/trait.hpp>
#include <common_type/assoc/string_form.hpp>
-#include <regression/rand/io/assoc/xml_formatter.hpp>
+#include <regression/rand/xml_formatter.hpp>
namespace __gnu_pbds
{
@@ -64,54 +64,6 @@ namespace test
{
namespace detail
{
-
-#ifdef PB_DS_REGRESSION_TRACE
-#define PB_DS_TRACE(X) std::cerr << X << std::endl
-#else
-#define PB_DS_TRACE(X)
-#endif
-
-#define PB_DS_CLASS_T_DEC \
- template<typename Cntnr>
-
-#define PB_DS_CLASS_C_DEC \
- container_rand_regression_test<Cntnr>
-
-#define PB_DS_COND_COMPARE(L, R) \
- if (m_g.get_prob() < m_mp) \
- cmp(L, R, __FUNCTION__);
-
-#define PB_DS_RUN_MTHD(MTHD) \
- { \
- bool done = false; \
- \
- while (!done) \
- done = MTHD(); \
- }
-
-#define PB_DS_THROW_IF_FAILED_(PRED, MORE, P_C, P_NC, F, L) \
- if (!(PRED)) \
- { \
- std::cerr << "Failure at " << F << ": " << L << std::endl; \
- std::cerr << MORE << std::endl; \
- std::cerr << "container:" << std::endl; \
- print_container(*(P_C)); \
- std::cerr << std::endl; \
- std::cerr << "native container:" << std::endl; \
- print_container(*(P_NC)); \
- std::cerr << std::endl; \
- throw std::logic_error("fucked!"); \
- }
-
-#define PB_DS_THROW_IF_FAILED(PRED, MORE, P_C, P_NC) \
- PB_DS_THROW_IF_FAILED_(PRED, MORE, P_C, P_NC, __FILE__, __LINE__)
-
-#define PB_DS_SET_DESTRUCT_PRINT \
- destructor_printer dest_print___(__FUNCTION__);
-
-#define PB_DS_CANCEL_DESTRUCT_PRINT \
- dest_print___.cancel_print();
-
// Rand test specialized for a specific container.
template<typename Cntnr>
class container_rand_regression_test
@@ -129,7 +81,7 @@ namespace detail
private:
typedef Cntnr cntnr;
- typedef typename cntnr::allocator_type allocator_type;
+ typedef typename cntnr::allocator_type allocator_type;
typedef typename cntnr::size_type size_type;
typedef regression_test_traits<Cntnr> test_traits;
typedef typename test_traits::key_type key_type;
@@ -137,7 +89,7 @@ namespace detail
typedef typename test_traits::value_type value_type;
typedef typename test_traits::native_type native_type;
typedef twister_rand_gen gen;
- typedef __gnu_pbds::container_traits<Cntnr> container_traits;
+ typedef __gnu_pbds::container_traits<Cntnr> container_traits;
typedef __gnu_cxx::throw_allocator<char> alloc_t;
enum op
@@ -467,21 +419,54 @@ namespace detail
size_t m_i;
};
-#include <regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp>
-#include <regression/rand/assoc/detail/cmp_fn_imps.hpp>
-#include <regression/rand/assoc/detail/operator_fn_imps.hpp>
-#include <regression/rand/assoc/detail/insert_fn_imps.hpp>
-#include <regression/rand/assoc/detail/subscript_fn_imps.hpp>
-#include <regression/rand/assoc/detail/clear_fn_imps.hpp>
-#include <regression/rand/assoc/detail/erase_fn_imps.hpp>
-#include <regression/rand/assoc/detail/defs_fn_imps.hpp>
-#include <regression/rand/assoc/detail/policy_access_fn_imps.hpp>
-#include <regression/rand/assoc/detail/split_join_fn_imps.hpp>
-#include <regression/rand/assoc/detail/it_conversion_fn_imps.hpp>
-#include <regression/rand/assoc/detail/resize_fn_imps.hpp>
-#include <regression/rand/assoc/detail/get_set_load_fn_imps.hpp>
-#include <regression/rand/assoc/detail/get_set_loads_fn_imps.hpp>
-#include <regression/rand/assoc/detail/diagnostic_fn_imps.hpp>
+#ifdef PB_DS_REGRESSION_TRACE
+#define PB_DS_TRACE(X) std::cerr << X << std::endl
+#else
+#define PB_DS_TRACE(X)
+#endif
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Cntnr>
+
+#define PB_DS_CLASS_C_DEC \
+ container_rand_regression_test<Cntnr>
+
+#define PB_DS_COND_COMPARE(L, R) \
+ if (m_g.get_prob() < m_mp) \
+ cmp(L, R, __FUNCTION__);
+
+#define PB_DS_RUN_MTHD(MTHD) \
+ { \
+ bool done = false; \
+ \
+ while (!done) \
+ done = MTHD(); \
+ }
+
+#define PB_DS_THROW_IF_FAILED_(PRED, MORE, P_C, P_NC, F, L) \
+ if (!(PRED)) \
+ { \
+ std::cerr << "Failure at " << F << ": " << L << std::endl; \
+ std::cerr << MORE << std::endl; \
+ std::cerr << "container:" << std::endl; \
+ print_container(*(P_C)); \
+ std::cerr << std::endl; \
+ std::cerr << "native container:" << std::endl; \
+ print_container(*(P_NC)); \
+ std::cerr << std::endl; \
+ throw std::logic_error("fucked!"); \
+ }
+
+#define PB_DS_THROW_IF_FAILED(PRED, MORE, P_C, P_NC) \
+ PB_DS_THROW_IF_FAILED_(PRED, MORE, P_C, P_NC, __FILE__, __LINE__)
+
+#define PB_DS_SET_DESTRUCT_PRINT \
+ destructor_printer dest_print___(__FUNCTION__);
+
+#define PB_DS_CANCEL_DESTRUCT_PRINT \
+ dest_print___.cancel_print();
+
+#include <regression/rand/assoc/container_rand_regression_test.tcc>
#undef PB_DS_COND_COMPARE
#undef PB_DS_RUN_MTHD
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
new file mode 100644
index 00000000000..6d676a9f3fe
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
@@ -0,0 +1,2143 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2008 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 container_rand_regression_test.tcc
+ * Contains a random regression test for a specific container type.
+ */
+
+#ifndef PB_DS_CONTAINER_RAND_REGRESSION_TEST_TCC
+#define PB_DS_CONTAINER_RAND_REGRESSION_TEST_TCC
+
+// Constructors/Destructors.
+PB_DS_CLASS_T_DEC
+PB_DS_CLASS_C_DEC::
+container_rand_regression_test(unsigned long seed, size_t n, size_t m,
+ double tp, double ip, double ep, double cp,
+ double mp, bool disp)
+: m_seed((seed == 0) ? twister_rand_gen::get_time_determined_seed() : seed),
+ m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_ep(ep), m_cp(cp), m_mp(mp),
+ m_disp(disp), m_p_c(NULL)
+{ }
+
+PB_DS_CLASS_T_DEC
+PB_DS_CLASS_C_DEC::
+~container_rand_regression_test()
+{ }
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+default_constructor()
+{
+ PB_DS_TRACE("default_constructor");
+ bool done = true;
+ m_alloc.set_throw_prob(m_tp);
+
+ try
+ {
+ m_p_c = new Cntnr;
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ if (m_p_c != NULL)
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+swap()
+{
+ PB_DS_TRACE("swap");
+ m_alloc.set_throw_prob(0);
+ Cntnr* p_c = new Cntnr;
+ m_alloc.set_throw_prob(1);
+ p_c->swap(*m_p_c);
+ std::swap(p_c, m_p_c);
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+copy_constructor()
+{
+ PB_DS_TRACE("copy_constructor");
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ p_c = new Cntnr(*m_p_c);
+ std::swap(p_c, m_p_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+assignment_operator()
+{
+ PB_DS_TRACE("assignment operator");
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ p_c = new Cntnr();
+ * p_c =* m_p_c;
+ std::swap(p_c, m_p_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor()
+{
+ PB_DS_TRACE("it_constructor");
+ return it_constructor_imp(typename Cntnr::container_category());
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor_imp(__gnu_pbds::cc_hash_tag)
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ switch(get_next_sub_op(8))
+ {
+ case 0:
+ p_c = new Cntnr(m_p_c->get_hash_fn());
+ m_native_c.clear();
+ break;
+ case 1:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn());
+ m_native_c.clear();
+ break;
+ case 2:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_hash_fn());
+ m_native_c.clear();
+ break;
+ case 3:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_hash_fn(),
+ m_p_c->get_resize_policy());
+ m_native_c.clear();
+ break;
+ case 4:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
+ break;
+ case 5:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn());
+ break;
+ case 6:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn());
+ break;
+ case 7:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_hash_fn());
+ break;
+ case 8:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_hash_fn(),
+ m_p_c->get_resize_policy());
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ };
+ std::swap(p_c, m_p_c);
+ }
+ catch (__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor_imp(__gnu_pbds::gp_hash_tag)
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ switch(get_next_sub_op(11))
+ {
+ case 0:
+ p_c = new Cntnr(m_p_c->get_hash_fn());
+ m_native_c.clear();
+ break;
+ case 1:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn());
+ m_native_c.clear();
+ break;
+ case 2:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_probe_fn());
+ m_native_c.clear();
+ break;
+ case 3:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_probe_fn());
+ m_native_c.clear();
+ break;
+ case 4:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_probe_fn(), m_p_c->get_probe_fn());
+ m_native_c.clear();
+ break;
+ case 5:
+ p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
+ m_p_c->get_comb_probe_fn(), m_p_c->get_probe_fn(),
+ m_p_c->get_resize_policy());
+ m_native_c.clear();
+ break;
+ case 6:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn());
+ break;
+ case 7:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn());
+ break;
+ case 8:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn());
+ break;
+ case 9:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn());
+ break;
+ case 10:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn(),
+ m_p_c->get_probe_fn());
+ break;
+ case 11:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
+ m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn(),
+ m_p_c->get_probe_fn(), m_p_c->get_resize_policy());
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ };
+ std::swap(p_c, m_p_c);
+ }
+ catch (__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor_imp(__gnu_pbds::tree_tag)
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ switch(get_next_sub_op(2))
+ {
+ case 0:
+ p_c = new Cntnr(m_p_c->get_cmp_fn());
+ m_native_c.clear();
+ break;
+ case 1:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_cmp_fn());
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ };
+ std::swap(p_c, m_p_c);
+ }
+ catch (__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor_imp(__gnu_pbds::list_update_tag)
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
+ std::swap(p_c, m_p_c);
+ }
+ catch (__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor_imp(__gnu_pbds::pat_trie_tag)
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ try
+ {
+ switch(get_next_sub_op(2))
+ {
+ case 0:
+ p_c = new Cntnr(m_p_c->get_e_access_traits());
+ m_native_c.clear();
+ break;
+ case 1:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(),
+ m_p_c->get_e_access_traits());
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ };
+
+ std::swap(p_c, m_p_c);
+ }
+ catch (__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+// Cmp.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+cmp(const Cntnr& r_c, const native_type& r_native_c,
+ const std::string& r_call_fn)
+{
+ m_alloc.set_throw_prob(1);
+ const size_t size = r_c.size();
+ const size_t native_size = r_native_c.size();
+ PB_DS_THROW_IF_FAILED(size == native_size,
+ size << " " << native_size, &r_c, &r_native_c);
+
+ const bool empty = r_c.empty();
+ const bool native_empty = r_native_c.empty();
+ PB_DS_THROW_IF_FAILED(empty == native_empty,
+ empty << " " << native_empty, &r_c, &r_native_c);
+
+ try
+ {
+ basic_cmp_(r_c, r_native_c);
+ cmp_(r_c, r_native_c);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "call-fn: " + r_call_fn, &r_c, &r_native_c);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+basic_cmp_(const Cntnr& r_c, const native_type& r_native_c)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+
+ if (static_cast<size_t>(std::distance(r_c.begin(), r_c.end())) != r_c.size())
+ PB_DS_THROW_IF_FAILED(false,
+ static_cast<unsigned long>(std::distance(r_c.begin(), r_c.end())) << " " << static_cast<unsigned long>(r_c.size()), &r_c, &r_native_c);
+
+ typename native_type::const_iterator it = r_native_c.begin();
+ while (it != r_native_c.end())
+ {
+ typename native_type::key_type native_key = test_traits::extract_native_key(*it);
+
+ m_alloc.set_throw_prob(0);
+ const key_type k = native_key;
+ m_alloc.set_throw_prob(1);
+ typename cntnr::const_point_iterator found_it = r_c.find(k);
+ PB_DS_THROW_IF_FAILED(found_it != r_c.end(),
+ test_traits::native_val_to_string(*it),
+ &r_c, &r_native_c);
+
+ if (!test_traits::cmp(*found_it, * it))
+ PB_DS_THROW_IF_FAILED(false, "", &r_c, &r_native_c);
+
+ ++it;
+ }
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+cmp_(const Cntnr& r_c, const native_type& r_native_c)
+{
+ enum
+ {
+ order_preserving = container_traits::order_preserving,
+ back_order_preserving = container_traits::order_preserving
+ &&
+ !__gnu_pbds::detail::is_same<
+ typename std::iterator_traits<
+ typename cntnr::const_iterator>::iterator_category,
+ std::forward_iterator_tag>::value,
+ reverse_iteration = container_traits::reverse_iteration,
+ order_statistics = test_traits::order_statistics,
+ prefix_search = test_traits::prefix_search,
+ has_mapped = !__gnu_pbds::detail::is_same<
+ typename Cntnr::mapped_type,
+ __gnu_pbds::null_mapped_type>::value
+ };
+
+ order_preserving_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,order_preserving>());
+
+ back_order_preserving_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,back_order_preserving>());
+
+ order_statistics_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,order_statistics>());
+
+ prefix_search_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,prefix_search>());
+
+ reverse_iteration_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,reverse_iteration>());
+
+ lower_bound_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,order_preserving>());
+
+ upper_bound_cmp_imp(r_c, r_native_c,
+ __gnu_pbds::detail::integral_constant<int,order_preserving>());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+order_preserving_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+order_preserving_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+
+ typename cntnr::const_iterator b = r_c.begin();
+ typename cntnr::const_iterator e = r_c.end();
+
+ typename native_type::const_iterator native_b = r_native_c.begin();
+ typename native_type::const_iterator native_e = r_native_c.end();
+
+ try
+ {
+ it_cmp_imp(b, e, native_b, native_e);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "", &r_c, &r_native_c)
+ }
+
+ try
+ {
+ back_it_cmp_imp(b, e, native_b, native_e);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "", &r_c, &r_native_c)
+ }
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+back_order_preserving_cmp_imp(const Cntnr&, const native_type&,
+ __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+back_order_preserving_cmp_imp(const Cntnr& r_c, const native_type& r_native_c,
+ __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+ typename cntnr::const_iterator b = r_c.begin();
+ typename cntnr::const_iterator e = r_c.end();
+ typename native_type::const_iterator native_b = r_native_c.begin();
+ typename native_type::const_iterator native_e = r_native_c.end();
+ it_cmp_imp(b, e, native_b, native_e);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+reverse_iteration_cmp_imp(const Cntnr&, const native_type&,
+ __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+reverse_iteration_cmp_imp(const Cntnr& r_c, const native_type&r_native_c, __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+
+ typename cntnr::const_reverse_iterator b = r_c.rbegin();
+ typename cntnr::const_reverse_iterator e = r_c.rend();
+
+ typename native_type::const_reverse_iterator native_b = r_native_c.rbegin();
+ typename native_type::const_reverse_iterator native_e = r_native_c.rend();
+
+ try
+ {
+ it_cmp_imp(b, e, native_b, native_e);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "", &r_c, &r_native_c)
+ }
+
+ try
+ {
+ back_it_cmp_imp(b, e, native_b, native_e);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "", &r_c, &r_native_c)
+ }
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+order_statistics_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+order_statistics_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
+{
+ {
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(1);
+ const size_type order = r_c.order_of_key(k);
+ const size_type native_order = std::distance(r_native_c.begin(),
+ r_native_c.lower_bound(test_traits::native_key(k)));
+
+ PB_DS_THROW_IF_FAILED(order == native_order,
+ test_traits::key_to_string(k) << " " <<
+ static_cast<unsigned long>(order) << " " <<
+ static_cast<unsigned long>(native_order),
+ &r_c,
+ &r_native_c);
+ }
+
+ const size_type rand_ord =
+ static_cast<size_t>(m_g.get_unsigned_long(0,
+ 2 * static_cast<unsigned long>(m_m)));
+
+ typename cntnr::const_iterator it = r_c.find_by_order(rand_ord);
+ typename native_type::const_iterator native_it = r_native_c.begin();
+ std::advance(native_it, std::min(rand_ord, r_native_c.size()));
+ if (it == r_c.end()&& native_it != r_native_c.end())
+ PB_DS_THROW_IF_FAILED(false,
+ static_cast<unsigned long>(rand_ord),
+ m_p_c,
+ &m_native_c);
+
+ if (it != r_c.end()&& native_it == r_native_c.end())
+ PB_DS_THROW_IF_FAILED(false,
+ static_cast<unsigned long>(rand_ord),
+ m_p_c,
+ &m_native_c);
+
+ if (it != r_c.end()&& native_it != r_native_c.end())
+ PB_DS_THROW_IF_FAILED(test_traits::cmp(*it, * native_it),
+ static_cast<unsigned long>(rand_ord),
+ m_p_c,
+ &m_native_c);
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+prefix_search_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+prefix_search_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(1);
+ try
+ {
+ typedef
+ std::pair<typename Cntnr::const_iterator, typename Cntnr::const_iterator>
+ pref_ret_t;
+
+ const pref_ret_t pref_ret = r_c.prefix_range(k);
+
+ typename native_type::const_iterator native_start_it = r_native_c.begin();
+
+ while (native_start_it != r_native_c.end() &&
+ !test_traits::prefix_match(k,
+ test_traits::extract_native_key(*native_start_it)))
+ ++native_start_it;
+
+ typename native_type::const_iterator native_end_it =
+ native_start_it;
+
+ do
+ {
+ if (native_end_it != r_native_c.end())
+ ++native_end_it;
+ }
+ while (native_end_it != r_native_c.end() &&
+ test_traits::prefix_match(k,
+ test_traits::extract_native_key(*native_end_it)));
+
+ it_cmp_imp(pref_ret.first, pref_ret.second, native_start_it, native_end_it);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(false, "prefix key " << k, &r_c, &r_native_c);
+ }
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+template<typename Const_It, class Const_Native_It>
+void
+PB_DS_CLASS_C_DEC::
+it_cmp_imp(Const_It b, Const_It e, Const_Native_It native_b,
+ Const_Native_It native_e)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+
+ if (std::distance(b, e) != std::distance(native_b, native_e))
+ {
+ const size_t dist = std::distance(b, e);
+ const size_t native_dist = std::distance(native_b, native_e);
+ PB_DS_THROW_IF_FAILED(false,
+ static_cast<unsigned long>(dist) << " "
+ << static_cast<unsigned long>(native_dist),
+ m_p_c, &m_native_c);
+ }
+
+ while (b != e)
+ {
+ PB_DS_THROW_IF_FAILED(native_b != native_e, "", m_p_c, &m_native_c);
+
+ if (!test_traits::cmp(*b, * native_b))
+ PB_DS_THROW_IF_FAILED(false,
+ test_traits::val_to_string(*b) << " " <<
+ test_traits::val_to_string(*native_b),
+ m_p_c, &m_native_c);
+
+ ++b;
+ ++native_b;
+ }
+
+ PB_DS_THROW_IF_FAILED(native_b == native_e, "", m_p_c, &m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+template<typename Const_It, class Const_Native_It>
+void
+PB_DS_CLASS_C_DEC::
+back_it_cmp_imp(Const_It b, Const_It e, Const_Native_It native_b,
+ Const_Native_It native_e)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+ while (b != e)
+ {
+ PB_DS_THROW_IF_FAILED(native_b != native_e,
+ test_traits::val_to_string(*native_e),
+ m_p_c, &m_native_c);
+
+ --e;
+ --native_e;
+
+ PB_DS_THROW_IF_FAILED(test_traits::cmp(*e, * native_e),
+ test_traits::val_to_string(*e) <<
+ test_traits::val_to_string(*native_e),
+ m_p_c, &m_native_c);
+ }
+
+ PB_DS_THROW_IF_FAILED(native_b == native_e,
+ test_traits::val_to_string(*native_e),
+ m_p_c, &m_native_c);
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+lower_bound_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+lower_bound_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(1);
+ typename cntnr::const_iterator it = r_c.lower_bound(k);
+ typename native_type::key_type native_k = test_traits::native_key(k);
+ typename native_type::const_iterator native_it = r_native_c.lower_bound(native_k);
+
+ if (it != r_c.end() && native_it == r_native_c.end())
+ PB_DS_THROW_IF_FAILED("",
+ "it: " + test_traits::val_to_string(*it) + "\n\n",
+ &r_c, &r_native_c);
+
+ if (it == r_c.end() && native_it != r_native_c.end())
+ PB_DS_THROW_IF_FAILED("",
+ "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
+ &r_c, &r_native_c);
+
+ if (it != r_c.end() && !test_traits::cmp(*it, * native_it))
+ PB_DS_THROW_IF_FAILED(false,
+ "key: " + test_traits::key_to_string(k) + "\n\n" +
+ "it: " + test_traits::val_to_string(*it) + "\n\n" +
+ "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
+ &r_c, &r_native_c);
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+upper_bound_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+upper_bound_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
+{
+ PB_DS_SET_DESTRUCT_PRINT
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(1);
+ typename cntnr::const_iterator it = r_c.upper_bound(k);
+ typename native_type::key_type native_k = test_traits::native_key(k);
+ typename native_type::const_iterator native_it = r_native_c.upper_bound(native_k);
+
+ if (it == r_c.end() && native_it != r_native_c.end())
+ PB_DS_THROW_IF_FAILED(false,
+ "key: " + test_traits::key_to_string(k) + "\n\n" +
+ "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
+ &r_c, &r_native_c);
+
+ if (it != r_c.end() && native_it == r_native_c.end())
+ PB_DS_THROW_IF_FAILED(false,
+ "key: " + test_traits::key_to_string(k) + "\n\n" +
+ "it: " + test_traits::val_to_string(*it) + "\n\n",
+ &r_c, &r_native_c);
+
+ if (it != r_c.end() && !test_traits::cmp(*it, * native_it))
+ PB_DS_THROW_IF_FAILED(false,
+ "key: " + test_traits::key_to_string(k) + "\n\n" +
+ "it: " + test_traits::val_to_string(*it) + "\n\n" +
+ "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
+ &r_c, &r_native_c);
+
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+// Operators.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+operator()()
+{
+ typedef xml_result_set_regression_formatter formatter_type;
+ formatter_type* p_fmt = NULL;
+
+ if (m_disp)
+ p_fmt = new formatter_type(string_form<Cntnr>::name(),
+ string_form<Cntnr>::desc());
+
+ m_g.init(m_seed);
+
+ // Track allocation from this point only.
+ const size_t memory_label = 775;
+ m_alloc.init(m_seed);
+ m_alloc.set_label(memory_label);
+
+ prog_bar pb(m_n, std::cout, m_disp);
+ m_i = 0;
+
+ try
+ {
+ for (m_i = 0; m_i < m_n; ++m_i)
+ {
+ PB_DS_TRACE("Op #" << static_cast<unsigned long>(m_i));
+ allocator_type::set_label(m_i);
+ switch (m_i)
+ {
+ case 0:
+ PB_DS_RUN_MTHD(default_constructor);
+ break;
+ case 1:
+ defs();
+ break;
+ case 2:
+ policy_access();
+ break;
+ case 3:
+ it_copy();
+ break;
+ case 4:
+ it_assign();
+ break;
+ case 5:
+ rev_it_copy();
+ break;
+ case 6:
+ rev_it_assign();
+ break;
+ default:
+ switch(get_next_op())
+ {
+ case insert_op:
+ switch(get_next_sub_op(2))
+ {
+ case 0:
+ PB_DS_RUN_MTHD(insert)
+ break;
+ case 1:
+ PB_DS_RUN_MTHD(subscript)
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ }
+ break;
+ case erase_op:
+ switch(get_next_sub_op(4))
+ {
+ case 0:
+ PB_DS_RUN_MTHD(erase)
+ break;
+ case 1:
+ PB_DS_RUN_MTHD(erase_if)
+ break;
+ case 2:
+ PB_DS_RUN_MTHD(erase_it)
+ break;
+ case 3:
+ PB_DS_RUN_MTHD(erase_rev_it)
+ break;
+ default:
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ }
+ break;
+ case clear_op:
+ PB_DS_RUN_MTHD(clear)
+ break;
+ case other_op:
+ switch(get_next_sub_op(8))
+ {
+ case 0:
+ swap();
+ break;
+ case 1:
+ PB_DS_RUN_MTHD(copy_constructor)
+ break;
+ case 2:
+ PB_DS_RUN_MTHD(it_constructor)
+ break;
+ case 3:
+ PB_DS_RUN_MTHD(assignment_operator)
+ break;
+ case 4:
+ PB_DS_RUN_MTHD(split_join)
+ break;
+ case 5:
+ resize();
+ break;
+ case 6:
+ get_set_load();
+ break;
+ case 7:
+ get_set_loads();
+ break;
+ default:
+ 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.inc();
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Failed at index " << static_cast<unsigned long>(m_i)
+ << std::endl;
+ delete m_p_c;
+ throw;
+ }
+
+ // Clean up, then check for allocation by special label, set above.
+ delete m_p_c;
+
+ try
+ { m_alloc.check_allocated(memory_label); }
+ catch (...)
+ {
+ std::cerr << "detected leaks!" << std::endl;
+ std::cerr << m_alloc << std::endl;
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ }
+
+ // Reset throw probability.
+ m_alloc.set_throw_prob(0);
+
+ if (m_disp)
+ {
+ std::cout << std::endl;
+ delete p_fmt;
+ }
+}
+
+PB_DS_CLASS_T_DEC
+typename PB_DS_CLASS_C_DEC::op
+PB_DS_CLASS_C_DEC::
+get_next_op()
+{
+ const double prob = m_g.get_prob();
+ if (prob < m_ip)
+ return insert_op;
+
+ if (prob < m_ip + m_ep)
+ return erase_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);
+ return other_op;
+}
+
+PB_DS_CLASS_T_DEC
+size_t
+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, i << " " << max, m_p_c, &m_native_c);
+ return i;
+ }
+ else
+ ++i;
+}
+
+// Insert.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+insert()
+{
+ PB_DS_TRACE("insert");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ value_type v = test_traits::generate_value(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+ const_key_reference r_k = test_traits::extract_key(v);
+ typename cntnr::const_point_iterator found_it = m_p_c->find(r_k);
+ const bool existed = (found_it != m_p_c->end());
+ const std::pair<typename cntnr::point_iterator, bool> ins_ret = m_p_c->insert(v);
+
+ if (ins_ret.second)
+ {
+ PB_DS_THROW_IF_FAILED(!existed, "", m_p_c, &m_native_c);
+ }
+ else
+ {
+ PB_DS_THROW_IF_FAILED(existed, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(found_it == ins_ret.first, "", m_p_c, &m_native_c);
+ }
+ m_native_c.insert(test_traits::native_value(v));
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ }
+ catch(__gnu_pbds::insert_error&)
+ {
+ PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+// Subscript.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+subscript()
+{
+ PB_DS_TRACE("subscript");
+
+ enum
+ {
+ no_data = __gnu_pbds::detail::is_same<
+ typename Cntnr::const_key_reference,
+ typename Cntnr::const_reference>::value
+ };
+
+ return (subscript_imp(__gnu_pbds::detail::integral_constant<int,no_data>()));
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+subscript_imp(__gnu_pbds::detail::false_type)
+{
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ value_type v = test_traits::generate_value(m_g, m_m);
+
+ m_alloc.set_throw_prob(m_tp);
+ (*m_p_c)[v.first] = v.second;
+
+ m_native_c[test_traits::native_value(v).first] =
+ test_traits::native_value(v).second;
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+subscript_imp(__gnu_pbds::detail::true_type)
+{
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ value_type v = test_traits::generate_value(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+ (*m_p_c)[v] = __gnu_pbds::null_mapped_type();
+ m_native_c.insert(test_traits::native_value(v));
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+// Clear.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+clear()
+{
+ m_p_c->clear();
+ m_native_c.clear();
+ return true;
+}
+
+
+// Erase.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase()
+{
+ PB_DS_TRACE("erase");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+
+ try
+ {
+ const bool cntnd = m_p_c->find(k) != m_p_c->end();
+ PB_DS_THROW_IF_FAILED(cntnd ==(m_native_c.find(test_traits::native_key(k)) != m_native_c.end()), test_traits::key_to_string(k), m_p_c, &m_native_c);
+
+ const bool ersd = m_p_c->erase(k);
+ const bool native_ersd = m_native_c.erase(test_traits::native_key(k)) != 0;
+
+ PB_DS_THROW_IF_FAILED(ersd == native_ersd, ersd << " " << native_ersd,
+ m_p_c, &m_native_c);
+
+ PB_DS_THROW_IF_FAILED(m_p_c->find(k) == m_p_c->end(), "",
+ m_p_c, &m_native_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+
+ PB_DS_THROW_IF_FAILED( container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_if()
+{
+ PB_DS_TRACE("erase_if");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+
+ try
+ {
+ typedef
+ typename std::iterator_traits<typename cntnr::iterator>::reference
+ it_const_reference;
+
+ typedef
+ typename test_traits::template erase_if_fn<value_type>
+ erase_if_fn_t;
+
+ m_alloc.set_throw_prob(m_tp);
+
+ const size_t ersd = m_p_c->erase_if(erase_if_fn_t());
+ const size_t native_ersd = test_traits::erase_if(m_native_c);
+ PB_DS_THROW_IF_FAILED(ersd == native_ersd,
+ ersd << " " << native_ersd, m_p_c, &m_native_c);
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw,
+ container_traits::erase_can_throw,
+ m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_it()
+{
+ enum
+ {
+ erase_iterators = container_traits::order_preserving
+ };
+
+ return (erase_it_imp(__gnu_pbds::detail::integral_constant<int,erase_iterators>()));
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_it_imp(__gnu_pbds::detail::false_type)
+{
+ return true;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_it_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("erase_it");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+
+ typename cntnr::iterator found_it = m_p_c->find(k);
+
+ typename native_type::iterator native_it = m_native_c.find(test_traits::native_key(k));
+
+ const bool found = found_it != m_p_c->end();
+ const bool native_found = native_it != m_native_c.end();
+
+ PB_DS_THROW_IF_FAILED(
+ found == native_found,
+ found << " " << native_found,
+ m_p_c,
+ &m_native_c);
+
+ typename cntnr::const_iterator next_it = found_it;
+ if (next_it != m_p_c->end())
+ ++next_it;
+
+ typename cntnr::iterator next_ers_it = m_p_c->erase(found_it);
+
+ if (native_it != m_native_c.end())
+ m_native_c.erase(native_it);
+
+ bool range_guarantee = __gnu_pbds::detail::is_same<
+ typename container_traits::invalidation_guarantee,
+ __gnu_pbds::range_invalidation_guarantee>::value ;
+
+ if (range_guarantee)
+ PB_DS_THROW_IF_FAILED(next_ers_it == next_it, "", m_p_c, &m_native_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_rev_it()
+{
+ enum
+ {
+ erase_iterators = container_traits::order_preserving
+ && container_traits::reverse_iteration
+ };
+
+ return (erase_rev_it_imp(__gnu_pbds::detail::integral_constant<int,erase_iterators>()));
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_rev_it_imp(__gnu_pbds::detail::false_type)
+{
+ return true;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_rev_it_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("erase_rev_it");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ const key_type k = test_traits::generate_key(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+
+ typename cntnr::iterator found_it = m_p_c->find(k);
+ typename native_type::iterator native_it = m_native_c.find(test_traits::native_key(k));
+
+ typename cntnr::const_reverse_iterator next_it = found_it;
+ if (next_it != m_p_c->end())
+ ++next_it;
+
+ typename cntnr::reverse_iterator next_ers_it =
+ m_p_c->erase((typename cntnr::reverse_iterator)found_it);
+
+ PB_DS_THROW_IF_FAILED(next_ers_it == next_it, "", m_p_c, &m_native_c);
+
+ if (native_it != m_native_c.end())
+ m_native_c.erase(native_it);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw,
+ container_traits::erase_can_throw,
+ m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+// Defs.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+defs()
+{
+ // General container types.
+ typedef typename Cntnr::size_type test_size_type;
+ typedef typename Cntnr::difference_type difference_type;
+
+ key_defs();
+ mapped_defs();
+ value_defs();
+ iterator_defs();
+ node_iterator_defs(__gnu_pbds::detail::integral_constant<int,
+ container_traits::order_preserving>());
+ policy_defs();
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+key_defs()
+{
+ typedef typename Cntnr::key_type test_key_type;
+ typedef typename Cntnr::key_reference test_key_reference;
+ typedef typename Cntnr::const_key_reference test_const_key_reference;
+ typedef typename Cntnr::key_pointer test_key_pointer;
+ typedef typename Cntnr::const_key_pointer test_const_key_pointer;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+mapped_defs()
+{
+ typedef typename Cntnr::mapped_type test_mapped_type;
+ typedef typename Cntnr::mapped_reference test_mapped_reference;
+ typedef typename Cntnr::const_mapped_reference test_const_mapped_reference;
+ typedef typename Cntnr::mapped_pointer test_mapped_pointer;
+ typedef typename Cntnr::const_mapped_pointer test_const_mapped_pointer;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+value_defs()
+{
+ typedef typename Cntnr::value_type test_value_type;
+ typedef typename Cntnr::reference test_reference;
+ typedef typename Cntnr::const_reference test_const_reference;
+ typedef typename Cntnr::pointer test_pointer;
+ typedef typename Cntnr::const_pointer test_const_pointer;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+ds_defs()
+{
+ typedef __gnu_pbds::container_traits< Cntnr> test_container_traits;
+
+ typedef typename test_container_traits::container_category test_container_category;
+
+ typedef
+ typename test_container_traits::invalidation_guarantee
+ test_invalidation_guarantee;
+
+ enum
+ {
+ test_order_preserving = test_container_traits::order_preserving
+ };
+
+ enum
+ {
+ test_erase_can_throw = test_container_traits::erase_can_throw
+ };
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+iterator_defs()
+{
+ typedef typename Cntnr::point_iterator test_point_iterator;
+ typedef typename Cntnr::const_point_iterator const_test_point_iterator;
+ typedef typename Cntnr::iterator test_iterator;
+ typedef typename Cntnr::const_iterator const_test_iterator;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+node_iterator_defs(__gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+node_iterator_defs(__gnu_pbds::detail::true_type)
+{
+ typedef typename Cntnr::node_iterator test_node_iterator;
+ typedef typename Cntnr::const_node_iterator test_const_node_iterator;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs()
+{
+ typedef typename Cntnr::allocator_type test_allocator;
+ policy_defs(typename Cntnr::container_category());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::basic_hash_tag)
+{
+ typedef typename Cntnr::hash_fn test_hash_fn;
+ typedef typename Cntnr::eq_fn test_eq_fn;
+ typedef typename Cntnr::resize_policy test_resize_policy;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::cc_hash_tag)
+{
+ policy_defs(__gnu_pbds::basic_hash_tag());
+ typedef typename Cntnr::comb_hash_fn test_comb_hash_fn;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::gp_hash_tag)
+{
+ policy_defs(__gnu_pbds::basic_hash_tag());
+ typedef typename Cntnr::comb_probe_fn test_comb_probe_fn;
+ typedef typename Cntnr::probe_fn test_probe_fn;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::tree_tag)
+{
+ typedef typename Cntnr::cmp_fn test_cmp_fn;
+ typedef typename Cntnr::node_update test_node_update;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::list_update_tag)
+{
+ typedef typename Cntnr::eq_fn test_eq_fn;
+ typedef typename Cntnr::update_policy test_update_policy;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs(__gnu_pbds::pat_trie_tag)
+{
+ typedef typename Cntnr::e_access_traits e_access_traits;
+}
+
+
+// Policy Access.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access()
+{
+ policy_access(typename Cntnr::container_category());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::basic_hash_tag)
+{
+ {
+ typename Cntnr::hash_fn& r_t = m_p_c->get_hash_fn();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::hash_fn& r_t =((const Cntnr& )*m_p_c).get_hash_fn();
+ assert(&r_t != NULL);
+ }
+
+ {
+ typename Cntnr::eq_fn& r_t = m_p_c->get_eq_fn();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::eq_fn& r_t =((const Cntnr& )*m_p_c).get_eq_fn();
+ assert(&r_t != NULL);
+ }
+
+ {
+ typename Cntnr::resize_policy& r_t = m_p_c->get_resize_policy();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::resize_policy& r_t =((const Cntnr& )*m_p_c).get_resize_policy();
+
+ assert(&r_t != NULL);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::cc_hash_tag)
+{
+ policy_access(__gnu_pbds::basic_hash_tag());
+
+ {
+ typename Cntnr::comb_hash_fn& r_t = m_p_c->get_comb_hash_fn();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::comb_hash_fn& r_t =((const Cntnr& )*m_p_c).get_comb_hash_fn();
+
+ assert(&r_t != NULL);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::gp_hash_tag)
+{
+ policy_access(__gnu_pbds::basic_hash_tag());
+
+ {
+ typename Cntnr::comb_probe_fn& r_t = m_p_c->get_comb_probe_fn();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::comb_probe_fn& r_t =((const Cntnr& )*m_p_c).get_comb_probe_fn();
+
+ assert(&r_t != NULL);
+ }
+
+ {
+ typename Cntnr::probe_fn& r_t = m_p_c->get_probe_fn();
+ assert(&r_t != NULL);
+ }
+ {
+ const typename Cntnr::probe_fn& r_t =((const Cntnr& )*m_p_c).get_probe_fn();
+ assert(&r_t != NULL);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::tree_tag)
+{
+ {
+ typename Cntnr::cmp_fn& r_t = m_p_c->get_cmp_fn();
+ assert(&r_t != NULL);
+ }
+
+ {
+ const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
+ assert(&r_t != NULL);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::list_update_tag)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access(__gnu_pbds::pat_trie_tag)
+{
+ typename Cntnr::e_access_traits& r_t = m_p_c->get_e_access_traits();
+ assert(&r_t != NULL);
+}
+
+
+// Split/Join.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+split_join()
+{
+ enum
+ {
+ split_join = container_traits::order_preserving
+ };
+
+ return (split_join_imp(__gnu_pbds::detail::integral_constant<int,split_join>()));
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+split_join_imp(__gnu_pbds::detail::false_type)
+{
+ return true;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+split_join_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("split_join");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ Cntnr lhs(*m_p_c);
+ Cntnr rhs;
+ native_type native_lhs(m_native_c);
+ native_type native_rhs;
+ const key_type k = test_traits::generate_key(m_g, m_m);
+
+ m_alloc.set_throw_prob(m_tp);
+ lhs.split(k, rhs);
+
+ typename native_type::const_iterator it =
+ native_lhs.upper_bound(test_traits::native_key(k));
+
+ while (!native_lhs.empty()&& it != native_lhs.end())
+ {
+ native_rhs.insert(*it);
+ typename native_type::const_iterator next_it = it;
+ ++next_it;
+ native_lhs.erase(test_traits::extract_native_key(*it));
+ it = next_it;
+ }
+
+ PB_DS_COND_COMPARE(lhs, native_lhs);
+ PB_DS_COND_COMPARE(rhs, native_rhs);
+
+ m_alloc.set_throw_prob(m_tp);
+
+ if (m_g.get_prob() < 0.5)
+ lhs.swap(rhs);
+
+ lhs.join(rhs);
+ PB_DS_THROW_IF_FAILED(rhs.size() == 0, rhs.size(), m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(rhs.empty(), rhs.size(), m_p_c, &m_native_c);
+ m_p_c->swap(lhs);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ PB_DS_THROW_IF_FAILED(container_traits::split_join_can_throw,
+ container_traits::split_join_can_throw,
+ m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+// Iterator conversions.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+it_copy()
+{
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_iterator const_it(it);
+ PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::const_point_iterator const_find_it(it);
+ PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it(it);
+ PB_DS_THROW_IF_FAILED(find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::const_iterator const_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it(const_it);
+ PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::point_iterator find_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it(find_it);
+ PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+it_assign()
+{
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_iterator const_it;
+ const_it = it;
+ PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = it;
+ PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it;
+ find_it = it;
+ PB_DS_THROW_IF_FAILED(find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::const_iterator const_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = const_it;
+ PB_DS_THROW_IF_FAILED(const_find_it == const_it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != const_it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::point_iterator find_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = find_it;
+ PB_DS_THROW_IF_FAILED(find_it == const_find_it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != const_find_it), "", m_p_c, &m_native_c);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_copy()
+{
+ enum
+ {
+ reverse_iteration = container_traits::reverse_iteration
+ };
+
+ rev_it_copy_imp(__gnu_pbds::detail::integral_constant<int,reverse_iteration>());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_assign()
+{
+ enum
+ {
+ reverse_iteration = container_traits::reverse_iteration
+ };
+
+ rev_it_assign_imp(__gnu_pbds::detail::integral_constant<int,reverse_iteration>());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_copy_imp(__gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_copy_imp(__gnu_pbds::detail::true_type)
+{
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_reverse_iterator const_it(it);
+ PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::const_point_iterator const_find_it(it);
+ PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it(it);
+ PB_DS_THROW_IF_FAILED(find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != it), "", m_p_c, &m_native_c);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_assign_imp(__gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+rev_it_assign_imp(__gnu_pbds::detail::true_type)
+{
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_reverse_iterator const_it;
+ const_it = it;
+ PB_DS_THROW_IF_FAILED(const_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = it;
+ PB_DS_THROW_IF_FAILED(const_find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(const_find_it != it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it;
+ find_it = it;
+ PB_DS_THROW_IF_FAILED(find_it == it, "", m_p_c, &m_native_c);
+ PB_DS_THROW_IF_FAILED(!(find_it != it), "", m_p_c, &m_native_c);
+ }
+}
+
+// Resize.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+resize()
+{
+ typedef __gnu_pbds::detail::integral_constant<int, test_traits::resize> resize_ind;
+
+ return resize_imp(resize_ind());
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+resize_imp(__gnu_pbds::detail::false_type)
+{
+ return true;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+resize_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("resize");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+ const size_t old_size = m_p_c->get_actual_size();
+
+ try
+ {
+ enum
+ {
+ min_new_size = 200,
+ max_new_size = 2000
+ };
+
+ m_alloc.set_throw_prob(m_tp);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+ const size_t new_size = m_g.get_unsigned_long(min_new_size, max_new_size);
+ m_p_c->resize(new_size);
+ const size_t actual_new_size = m_p_c->get_actual_size();
+ PB_DS_THROW_IF_FAILED(actual_new_size >= new_size,
+ actual_new_size << " " << new_size,
+ m_p_c, &m_native_c);
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(m_p_c->get_actual_size() == old_size,
+ m_p_c->get_actual_size() << " " << old_size,
+ m_p_c, &m_native_c);
+
+ done = false;
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+
+// Get/Set load.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+get_set_load()
+{
+ typedef
+ __gnu_pbds::detail::integral_constant<int, test_traits::get_set_load>
+ get_set_load_ind;
+
+ get_set_load_imp(get_set_load_ind());
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+get_set_load_imp(__gnu_pbds::detail::false_type)
+{ }
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+get_set_load_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("get_set_load");
+ PB_DS_SET_DESTRUCT_PRINT
+ m_p_c->get_load();
+ m_alloc.set_throw_prob(1);
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+ const float min_load = static_cast<float>(0.05);
+ const float max_load = static_cast<float>(0.9);
+
+ const float new_load = static_cast<float>(m_g.get_prob() * (max_load - min_load) + min_load);
+
+ m_p_c->set_load(new_load);
+ PB_DS_THROW_IF_FAILED(m_p_c->get_load() == new_load, "", m_p_c, &m_native_c);
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+}
+
+
+// Get/Set loads.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+get_set_loads()
+{
+ typedef
+ __gnu_pbds::detail::integral_constant<int, test_traits::get_set_loads>
+ get_set_loads_ind;
+
+ return get_set_loads_imp(get_set_loads_ind());
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+get_set_loads_imp(__gnu_pbds::detail::false_type)
+{
+ return true;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+get_set_loads_imp(__gnu_pbds::detail::true_type)
+{
+ PB_DS_TRACE("get_set_loads");
+ bool done = true;
+ PB_DS_SET_DESTRUCT_PRINT
+ const std::pair<float, float> old_loads = m_p_c->get_loads();
+
+ try
+ {
+ m_alloc.set_throw_prob(m_tp);
+
+ typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
+
+ const float min_min_load = static_cast<float>(0.05);
+ const float max_min_load = static_cast<float>(0.2);
+
+ const float new_min_load =
+ static_cast<float>(m_g.get_prob()* (max_min_load - min_min_load) +
+ min_min_load);
+
+ const float new_max_load = static_cast<float>(new_min_load* 2.5);
+ PB_DS_THROW_IF_FAILED(new_max_load < 1, new_max_load, m_p_c, &m_native_c);
+ m_p_c->set_loads(std::make_pair(new_min_load, new_max_load));
+ }
+ catch(...)
+ {
+ PB_DS_THROW_IF_FAILED(old_loads == m_p_c->get_loads(),
+ old_loads.first << " " << old_loads.second << " " <<
+ m_p_c->get_loads().first << " " <<
+ m_p_c->get_loads().second,
+ m_p_c, &m_native_c);
+
+ done = false;
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ PB_DS_CANCEL_DESTRUCT_PRINT
+ return done;
+}
+
+// Diagnostics.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+print_container(const native_type& r_cnt, std::ostream& r_os) const
+{
+ m_alloc.set_throw_prob(0);
+ typename native_type::const_iterator it = r_cnt.begin();
+ while (it != r_cnt.end())
+ {
+ r_os << test_traits::val_to_string(*it) + "\n";
+ ++it;
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+print_container(const cntnr& r_cnt, std::ostream& r_os) const
+{
+ m_alloc.set_throw_prob(0);
+ typename cntnr::const_iterator it = r_cnt.begin();
+ while (it != r_cnt.end())
+ {
+ r_os << test_traits::val_to_string(*it) + "\n";
+ ++it;
+ }
+}
+
+#endif
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/clear_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/clear_fn_imps.hpp
deleted file mode 100644
index bbc8cbe75c9..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/clear_fn_imps.hpp
+++ /dev/null
@@ -1,58 +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 clear_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-clear()
-{
- m_p_c->clear();
-
- m_native_c.clear();
-
- return (true);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/cmp_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/cmp_fn_imps.hpp
deleted file mode 100644
index 3b19a752696..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/cmp_fn_imps.hpp
+++ /dev/null
@@ -1,601 +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 cmp_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-cmp(const Cntnr& r_c, const native_type& r_native_c, const std::string& r_call_fn)
-{
- m_alloc.set_throw_prob(1);
-
- const size_t size = r_c.size();
- const size_t native_size = r_native_c.size();
-
- PB_DS_THROW_IF_FAILED(
- size == native_size,
- static_cast<unsigned long>(size) << " " <<
- static_cast<unsigned long>(native_size),
- & r_c,
- & r_native_c);
-
- const bool empty = r_c.empty();
- const bool native_empty = r_native_c.empty();
-
- PB_DS_THROW_IF_FAILED(
- empty == native_empty,
- empty << " " << native_empty,
- & r_c,
- & r_native_c);
-
- try
- {
- basic_cmp_(r_c, r_native_c);
-
- cmp_(r_c, r_native_c);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "call-fn: " + r_call_fn, & r_c, & r_native_c);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-basic_cmp_(const Cntnr& r_c, const native_type& r_native_c)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- if (static_cast<size_t>(std::distance(r_c.begin(), r_c.end())) !=
- r_c.size())
- PB_DS_THROW_IF_FAILED(
- false,
- static_cast<unsigned long>(
- std::distance(r_c.begin(), r_c.end())) <<
- " " << static_cast<unsigned long>(r_c.size()),
- & r_c,
- & r_native_c);
-
- typename native_type::const_iterator it = r_native_c.begin();
-
- while (it != r_native_c.end())
- {
- typename native_type::key_type native_key =
- test_traits::extract_native_key(*it);
-
- m_alloc.set_throw_prob(0);
-
- const key_type k = native_key;
-
- m_alloc.set_throw_prob(1);
-
- typename cntnr::const_point_iterator found_it = r_c.find(k);
-
- PB_DS_THROW_IF_FAILED(
- found_it != r_c.end(),
- test_traits::native_val_to_string(*it),
- & r_c,
- & r_native_c);
-
- if (!test_traits::cmp(*found_it, * it))
- PB_DS_THROW_IF_FAILED( false, "", & r_c, & r_native_c);
-
- ++it;
- }
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-cmp_(const Cntnr& r_c, const native_type& r_native_c)
-{
- enum
- {
- order_preserving =
- container_traits::order_preserving,
- back_order_preserving =
- container_traits::order_preserving&&
- !__gnu_pbds::detail::is_same<
- typename std::iterator_traits<
- typename cntnr::const_iterator>::iterator_category,
- std::forward_iterator_tag>::value,
- reverse_iteration = container_traits::reverse_iteration,
- order_statistics = test_traits::order_statistics,
- prefix_search = test_traits::prefix_search,
- has_mapped = !__gnu_pbds::detail::is_same<
- typename Cntnr::mapped_type,
- __gnu_pbds::null_mapped_type>::value
- };
-
- order_preserving_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,order_preserving>());
-
- back_order_preserving_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,back_order_preserving>());
-
- order_statistics_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,order_statistics>());
-
- prefix_search_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,prefix_search>());
-
- reverse_iteration_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,reverse_iteration>());
-
- lower_bound_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,order_preserving>());
-
- upper_bound_cmp_imp(r_c, r_native_c,
- __gnu_pbds::detail::integral_constant<int,order_preserving>());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-order_preserving_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-order_preserving_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- typename cntnr::const_iterator b = r_c.begin();
- typename cntnr::const_iterator e = r_c.end();
-
- typename native_type::const_iterator native_b = r_native_c.begin();
- typename native_type::const_iterator native_e = r_native_c.end();
-
- try
- {
- it_cmp_imp(b, e, native_b, native_e);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "", & r_c, & r_native_c)
- }
-
- try
- {
- back_it_cmp_imp(b, e, native_b, native_e);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "", & r_c, & r_native_c)
- }
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-back_order_preserving_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-back_order_preserving_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- typename cntnr::const_iterator b = r_c.begin();
- typename cntnr::const_iterator e = r_c.end();
-
- typename native_type::const_iterator native_b = r_native_c.begin();
- typename native_type::const_iterator native_e = r_native_c.end();
-
- it_cmp_imp(b, e, native_b, native_e);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-reverse_iteration_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-reverse_iteration_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- typename cntnr::const_reverse_iterator b = r_c.rbegin();
- typename cntnr::const_reverse_iterator e = r_c.rend();
-
- typename native_type::const_reverse_iterator native_b = r_native_c.rbegin();
- typename native_type::const_reverse_iterator native_e = r_native_c.rend();
-
- try
- {
- it_cmp_imp(b, e, native_b, native_e);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "", & r_c, & r_native_c)
- }
-
- try
- {
- back_it_cmp_imp(b, e, native_b, native_e);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "", & r_c, & r_native_c)
- }
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-order_statistics_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-order_statistics_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- {
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(1);
-
- const size_type order = r_c.order_of_key(k);
-
- const size_type native_order = std::distance(
- r_native_c.begin(),
- r_native_c.lower_bound(test_traits::native_key(k)));
-
- PB_DS_THROW_IF_FAILED(
- order == native_order,
- test_traits::key_to_string(k) << " " <<
- static_cast<unsigned long>(order) << " " <<
- static_cast<unsigned long>(native_order),
- & r_c,
- & r_native_c);
- }
-
- const size_type rand_ord =
- static_cast<size_t>(m_g.get_unsigned_long(
- 0,
- 2* static_cast<unsigned long>(m_m)));
-
- typename cntnr::const_iterator it =
- r_c.find_by_order(rand_ord);
-
- typename native_type::const_iterator native_it =
- r_native_c.begin();
-
- std::advance(native_it, std::min(rand_ord, r_native_c.size()));
-
- if (it == r_c.end()&& native_it != r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- false,
- static_cast<unsigned long>(rand_ord),
- m_p_c,
- & m_native_c);
-
- if (it != r_c.end()&& native_it == r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- false,
- static_cast<unsigned long>(rand_ord),
- m_p_c,
- & m_native_c);
-
- if (it != r_c.end()&& native_it != r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- test_traits::cmp(*it, * native_it),
- static_cast<unsigned long>(rand_ord),
- m_p_c,
- & m_native_c);
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-prefix_search_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-prefix_search_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(1);
-
- try
- {
- typedef
- std::pair<
- typename Cntnr::const_iterator,
- typename Cntnr::const_iterator>
- pref_ret_t;
-
- const pref_ret_t pref_ret = r_c.prefix_range(k);
-
- typename native_type::const_iterator native_start_it =
- r_native_c.begin();
-
- while (native_start_it != r_native_c.end()&&
- !test_traits::prefix_match(
- k,
- test_traits::extract_native_key(*native_start_it)))
- ++native_start_it;
-
- typename native_type::const_iterator native_end_it =
- native_start_it;
-
- do
- {
- if (native_end_it != r_native_c.end())
- ++native_end_it;
- }
- while (native_end_it != r_native_c.end()&&
- test_traits::prefix_match(
- k,
- test_traits::extract_native_key(*native_end_it)));
-
- it_cmp_imp( pref_ret.first, pref_ret.second, native_start_it, native_end_it);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED(
- false,
- "prefix key " << k,
- & r_c,
- & r_native_c);
- }
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-template<typename Const_It, class Const_Native_It>
-void
-PB_DS_CLASS_C_DEC::
-it_cmp_imp(Const_It b, Const_It e, Const_Native_It native_b, Const_Native_It native_e)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- if (std::distance(b, e) != std::distance(native_b, native_e))
- {
- const size_t dist = std::distance(b, e);
-
- const size_t native_dist = std::distance(native_b, native_e);
-
- PB_DS_THROW_IF_FAILED(
- false,
- static_cast<unsigned long>(dist) << " "
- << static_cast<unsigned long>(native_dist),
- m_p_c,
- & m_native_c);
- }
-
- while (b != e)
- {
- PB_DS_THROW_IF_FAILED( native_b != native_e, "", m_p_c, & m_native_c);
-
- if (!test_traits::cmp(*b, * native_b))
- PB_DS_THROW_IF_FAILED(
- false,
- test_traits::val_to_string(*b) << " " <<
- test_traits::val_to_string(*native_b),
- m_p_c,
- & m_native_c);
-
- ++b;
- ++native_b;
- }
-
- PB_DS_THROW_IF_FAILED( native_b == native_e, "", m_p_c, & m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-template<typename Const_It, class Const_Native_It>
-void
-PB_DS_CLASS_C_DEC::
-back_it_cmp_imp(Const_It b, Const_It e, Const_Native_It native_b, Const_Native_It native_e)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- while (b != e)
- {
- PB_DS_THROW_IF_FAILED(
- native_b != native_e,
- test_traits::val_to_string(*native_e),
- m_p_c,
- & m_native_c);
-
- --e;
- --native_e;
-
- PB_DS_THROW_IF_FAILED(
- test_traits::cmp(*e, * native_e),
- test_traits::val_to_string(*e) <<
- test_traits::val_to_string(*native_e),
- m_p_c,
- & m_native_c);
- }
-
- PB_DS_THROW_IF_FAILED(
- native_b == native_e,
- test_traits::val_to_string(*native_e),
- m_p_c,
- & m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-lower_bound_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-lower_bound_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(1);
-
- typename cntnr::const_iterator it = r_c.lower_bound(k);
-
- typename native_type::key_type native_k = test_traits::native_key(k);
-
- typename native_type::const_iterator native_it =
- r_native_c.lower_bound(native_k);
-
- if (it != r_c.end()&& native_it == r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- "",
- "it: " + test_traits::val_to_string(*it) + "\n\n",
- & r_c,
- & r_native_c);
-
- if (it == r_c.end()&& native_it != r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- "",
- "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
- & r_c,
- & r_native_c);
-
- if (it != r_c.end()&& !test_traits::cmp(*it, * native_it))
- PB_DS_THROW_IF_FAILED(
- false,
- "key: " + test_traits::key_to_string(k) + "\n\n" +
- "it: " + test_traits::val_to_string(*it) + "\n\n" +
- "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
- & r_c,
- & r_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-upper_bound_cmp_imp(const Cntnr& /*r_c*/, const native_type& /*r_native_c*/, __gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-upper_bound_cmp_imp(const Cntnr& r_c, const native_type& r_native_c, __gnu_pbds::detail::true_type)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(1);
-
- typename cntnr::const_iterator it = r_c.upper_bound(k);
-
- typename native_type::key_type native_k = test_traits::native_key(k);
-
- typename native_type::const_iterator native_it =
- r_native_c.upper_bound(native_k);
-
- if (it == r_c.end()&& native_it != r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- false,
- "key: " + test_traits::key_to_string(k) + "\n\n" +
- "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
- & r_c,
- & r_native_c);
-
- if (it != r_c.end()&& native_it == r_native_c.end())
- PB_DS_THROW_IF_FAILED(
- false,
- "key: " + test_traits::key_to_string(k) + "\n\n" +
- "it: " + test_traits::val_to_string(*it) + "\n\n",
- & r_c,
- & r_native_c);
-
- if (it != r_c.end()&& !test_traits::cmp(*it, * native_it))
- PB_DS_THROW_IF_FAILED(
- false,
- "key: " + test_traits::key_to_string(k) + "\n\n" +
- "it: " + test_traits::val_to_string(*it) + "\n\n" +
- "native_it: " + test_traits::val_to_string(*native_it) + "\n\n",
- & r_c,
- & r_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp
deleted file mode 100644
index c6b02b61a17..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/constructor_destructor_fn_imps.hpp
+++ /dev/null
@@ -1,410 +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 constructor_destructor_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-PB_DS_CLASS_C_DEC::
-container_rand_regression_test(unsigned long seed, size_t n, size_t m,
- double tp, double ip, double ep, double cp,
- double mp, bool disp)
-: m_seed((seed == 0) ? twister_rand_gen::get_time_determined_seed() : seed),
- m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_ep(ep), m_cp(cp), m_mp(mp),
- m_disp(disp), m_p_c(NULL)
-{ }
-
-PB_DS_CLASS_T_DEC
-PB_DS_CLASS_C_DEC::
-~container_rand_regression_test()
-{ }
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-default_constructor()
-{
- PB_DS_TRACE("default_constructor");
- bool done = true;
- m_alloc.set_throw_prob(m_tp);
-
- try
- {
- m_p_c = new Cntnr;
- }
- catch(__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- if (m_p_c != NULL)
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-swap()
-{
- PB_DS_TRACE("swap");
- m_alloc.set_throw_prob(0);
- Cntnr* p_c = new Cntnr;
- m_alloc.set_throw_prob(1);
- p_c->swap(*m_p_c);
- std::swap(p_c, m_p_c);
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-copy_constructor()
-{
- PB_DS_TRACE("copy_constructor");
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- p_c = new Cntnr(*m_p_c);
- std::swap(p_c, m_p_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-assignment_operator()
-{
- PB_DS_TRACE("assignment operator");
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- p_c = new Cntnr();
- * p_c =* m_p_c;
- std::swap(p_c, m_p_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor()
-{
- PB_DS_TRACE("it_constructor");
- return it_constructor_imp(typename Cntnr::container_category());
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor_imp(__gnu_pbds::cc_hash_tag)
-{
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- switch(get_next_sub_op(8))
- {
- case 0:
- p_c = new Cntnr(m_p_c->get_hash_fn());
- m_native_c.clear();
- break;
- case 1:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn());
- m_native_c.clear();
- break;
- case 2:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_hash_fn());
- m_native_c.clear();
- break;
- case 3:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_hash_fn(),
- m_p_c->get_resize_policy());
- m_native_c.clear();
- break;
- case 4:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
- break;
- case 5:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn());
- break;
- case 6:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn());
- break;
- case 7:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_hash_fn());
- break;
- case 8:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_hash_fn(),
- m_p_c->get_resize_policy());
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, & m_native_c);
- };
- std::swap(p_c, m_p_c);
- }
- catch (__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor_imp(__gnu_pbds::gp_hash_tag)
-{
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- switch(get_next_sub_op(11))
- {
- case 0:
- p_c = new Cntnr(m_p_c->get_hash_fn());
- m_native_c.clear();
- break;
- case 1:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn());
- m_native_c.clear();
- break;
- case 2:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_probe_fn());
- m_native_c.clear();
- break;
- case 3:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_probe_fn());
- m_native_c.clear();
- break;
- case 4:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_probe_fn(), m_p_c->get_probe_fn());
- m_native_c.clear();
- break;
- case 5:
- p_c = new Cntnr(m_p_c->get_hash_fn(), m_p_c->get_eq_fn(),
- m_p_c->get_comb_probe_fn(), m_p_c->get_probe_fn(),
- m_p_c->get_resize_policy());
- m_native_c.clear();
- break;
- case 6:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn());
- break;
- case 7:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn());
- break;
- case 8:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn());
- break;
- case 9:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn());
- break;
- case 10:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn(),
- m_p_c->get_probe_fn());
- break;
- case 11:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_hash_fn(),
- m_p_c->get_eq_fn(), m_p_c->get_comb_probe_fn(),
- m_p_c->get_probe_fn(), m_p_c->get_resize_policy());
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, & m_native_c);
- };
- std::swap(p_c, m_p_c);
- }
- catch (__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor_imp(__gnu_pbds::tree_tag)
-{
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- switch(get_next_sub_op(2))
- {
- case 0:
- p_c = new Cntnr(m_p_c->get_cmp_fn());
- m_native_c.clear();
- break;
- case 1:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_cmp_fn());
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- };
- std::swap(p_c, m_p_c);
- }
- catch (__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor_imp(__gnu_pbds::list_update_tag)
-{
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
- std::swap(p_c, m_p_c);
- }
- catch (__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor_imp(__gnu_pbds::pat_trie_tag)
-{
- bool done = true;
- Cntnr* p_c = NULL;
- m_alloc.set_throw_prob(m_tp);
- typename alloc_t::group_throw_prob_adjustor adjust(m_p_c->size());
-
- try
- {
- switch(get_next_sub_op(2))
- {
- case 0:
- p_c = new Cntnr(m_p_c->get_e_access_traits());
- m_native_c.clear();
- break;
- case 1:
- p_c = new Cntnr(m_p_c->begin(), m_p_c->end(),
- m_p_c->get_e_access_traits());
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, & m_native_c);
- };
-
- std::swap(p_c, m_p_c);
- }
- catch (__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
-
- delete p_c;
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- return done;
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/defs_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/defs_fn_imps.hpp
deleted file mode 100644
index f3e01d97fac..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/defs_fn_imps.hpp
+++ /dev/null
@@ -1,248 +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 defs_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-defs()
-{
- // General container types.
-
- typedef typename Cntnr::size_type test_size_type;
-
- typedef typename Cntnr::difference_type difference_type;
-
- key_defs();
-
- mapped_defs();
-
- value_defs();
-
- iterator_defs();
-
- node_iterator_defs(__gnu_pbds::detail::integral_constant<int,
- container_traits::order_preserving>());
-
- policy_defs();
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-key_defs()
-{
- typedef typename Cntnr::key_type test_key_type;
-
- typedef typename Cntnr::key_reference test_key_reference;
-
- typedef typename Cntnr::const_key_reference test_const_key_reference;
-
- typedef typename Cntnr::key_pointer test_key_pointer;
-
- typedef typename Cntnr::const_key_pointer test_const_key_pointer;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-mapped_defs()
-{
- typedef typename Cntnr::mapped_type test_mapped_type;
-
- typedef typename Cntnr::mapped_reference test_mapped_reference;
-
- typedef
- typename Cntnr::const_mapped_reference
- test_const_mapped_reference;
-
- typedef typename Cntnr::mapped_pointer test_mapped_pointer;
-
- typedef typename Cntnr::const_mapped_pointer test_const_mapped_pointer;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-value_defs()
-{
- typedef typename Cntnr::value_type test_value_type;
-
- typedef typename Cntnr::reference test_reference;
-
- typedef typename Cntnr::const_reference test_const_reference;
-
- typedef typename Cntnr::pointer test_pointer;
-
- typedef typename Cntnr::const_pointer test_const_pointer;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-ds_defs()
-{
- typedef __gnu_pbds::container_traits< Cntnr> test_container_traits;
-
- typedef typename test_container_traits::container_category test_container_category;
-
- typedef
- typename test_container_traits::invalidation_guarantee
- test_invalidation_guarantee;
-
- enum
- {
- test_order_preserving =
- test_container_traits::order_preserving
- };
-
- enum
- {
- test_erase_can_throw =
- test_container_traits::erase_can_throw
- };
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-iterator_defs()
-{
- typedef typename Cntnr::point_iterator test_point_iterator;
-
- typedef typename Cntnr::const_point_iterator const_test_point_iterator;
-
- typedef typename Cntnr::iterator test_iterator;
-
- typedef typename Cntnr::const_iterator const_test_iterator;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-node_iterator_defs(__gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-node_iterator_defs(__gnu_pbds::detail::true_type)
-{
- typedef typename Cntnr::node_iterator test_node_iterator;
-
- typedef typename Cntnr::const_node_iterator test_const_node_iterator;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs()
-{
- typedef typename Cntnr::allocator_type test_allocator;
-
- policy_defs(typename Cntnr::container_category());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::basic_hash_tag)
-{
- typedef typename Cntnr::hash_fn test_hash_fn;
-
- typedef typename Cntnr::eq_fn test_eq_fn;
-
- typedef typename Cntnr::resize_policy test_resize_policy;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::cc_hash_tag)
-{
- policy_defs(__gnu_pbds::basic_hash_tag());
-
- typedef typename Cntnr::comb_hash_fn test_comb_hash_fn;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::gp_hash_tag)
-{
- policy_defs(__gnu_pbds::basic_hash_tag());
-
- typedef typename Cntnr::comb_probe_fn test_comb_probe_fn;
-
- typedef typename Cntnr::probe_fn test_probe_fn;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::tree_tag)
-{
- typedef typename Cntnr::cmp_fn test_cmp_fn;
-
- typedef typename Cntnr::node_update test_node_update;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::list_update_tag)
-{
- typedef typename Cntnr::eq_fn test_eq_fn;
-
- typedef typename Cntnr::update_policy test_update_policy;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs(__gnu_pbds::pat_trie_tag)
-{
- typedef typename Cntnr::e_access_traits e_access_traits;
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/diagnostic_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/diagnostic_fn_imps.hpp
deleted file mode 100644
index 0a16482d3a1..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/diagnostic_fn_imps.hpp
+++ /dev/null
@@ -1,79 +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 diagnostic_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-print_container(const native_type& r_cnt, std::ostream& r_os /*= std::cerr*/) const
-{
- m_alloc.set_throw_prob(0);
-
- typename native_type::const_iterator it = r_cnt.begin();
-
- while (it != r_cnt.end())
- {
- r_os << test_traits::val_to_string(*it) + "\n";
-
- ++it;
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-print_container(const cntnr& r_cnt, std::ostream& r_os /*= std::cerr*/) const
-{
- m_alloc.set_throw_prob(0);
-
- typename cntnr::const_iterator it = r_cnt.begin();
-
- while (it != r_cnt.end())
- {
- r_os << test_traits::val_to_string(*it) + "\n";
-
- ++it;
- }
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp
deleted file mode 100644
index 0bd39f33bb3..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/erase_fn_imps.hpp
+++ /dev/null
@@ -1,319 +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 erase_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase()
-{
- PB_DS_TRACE("erase");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- try
- {
- const bool cntnd = m_p_c->find(k) != m_p_c->end();
-
- PB_DS_THROW_IF_FAILED(
- cntnd ==(m_native_c.find(test_traits::native_key(k)) != m_native_c.end()),
- test_traits::key_to_string(k),
- m_p_c,
- & m_native_c);
-
- const bool ersd = m_p_c->erase(k);
-
- const bool native_ersd =
- m_native_c.erase(test_traits::native_key(k)) != 0;
-
- PB_DS_THROW_IF_FAILED(
- ersd == native_ersd,
- ersd << " " << native_ersd,
- m_p_c,
- & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- m_p_c->find(k) == m_p_c->end(),
- "",
- m_p_c,
- & m_native_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_if()
-{
- PB_DS_TRACE("erase_if");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- typedef
- typename std::iterator_traits<
- typename cntnr::iterator>::reference
- it_const_reference;
-
- typedef
- typename test_traits::template erase_if_fn<
- value_type>
- erase_if_fn_t;
-
- m_alloc.set_throw_prob(m_tp);
-
- const size_t ersd =
- m_p_c->erase_if(erase_if_fn_t());
-
- const size_t native_ersd =
- test_traits::erase_if(m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- ersd == native_ersd,
- static_cast<unsigned long>(ersd) << " " <<
- static_cast<unsigned long>(native_ersd),
- m_p_c,
- & m_native_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_it()
-{
- enum
- {
- erase_iterators =
- container_traits::order_preserving
- };
-
- return (erase_it_imp(__gnu_pbds::detail::integral_constant<int,erase_iterators>()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_it_imp(__gnu_pbds::detail::false_type)
-{
- return (true);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_it_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("erase_it");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- typename cntnr::iterator found_it = m_p_c->find(k);
-
- typename native_type::iterator native_it = m_native_c.find(
- test_traits::native_key(k));
-
- const bool found = found_it != m_p_c->end();
- const bool native_found = native_it != m_native_c.end();
-
- PB_DS_THROW_IF_FAILED(
- found == native_found,
- found << " " << native_found,
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_iterator next_it = found_it;
- if (next_it != m_p_c->end())
- ++next_it;
-
- typename cntnr::iterator next_ers_it =
- m_p_c->erase(found_it);
-
- if (native_it != m_native_c.end())
- m_native_c.erase(native_it);
-
- bool range_guarantee =
- __gnu_pbds::detail::is_same<
- typename container_traits::invalidation_guarantee,
- __gnu_pbds::range_invalidation_guarantee>::value ;
-
- if (range_guarantee)
- PB_DS_THROW_IF_FAILED( next_ers_it == next_it, "", m_p_c, & m_native_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_rev_it()
-{
- enum
- {
- erase_iterators =
- container_traits::order_preserving&&
- container_traits::reverse_iteration
- };
-
- return (erase_rev_it_imp(__gnu_pbds::detail::integral_constant<int,erase_iterators>()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_rev_it_imp(__gnu_pbds::detail::false_type)
-{
- return (true);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_rev_it_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("erase_rev_it");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- typename cntnr::iterator found_it = m_p_c->find(k);
-
- typename native_type::iterator native_it = m_native_c.find(
- test_traits::native_key(k));
-
- typename cntnr::const_reverse_iterator next_it = found_it;
- if (next_it != m_p_c->end())
- ++next_it;
-
- typename cntnr::reverse_iterator next_ers_it =
- m_p_c->erase((typename cntnr::reverse_iterator)found_it);
-
- PB_DS_THROW_IF_FAILED( next_ers_it == next_it, "", m_p_c, & m_native_c);
-
- if (native_it != m_native_c.end())
- m_native_c.erase(native_it);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_load_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_load_fn_imps.hpp
deleted file mode 100644
index adc87271c25..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_load_fn_imps.hpp
+++ /dev/null
@@ -1,102 +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 get_set_load_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-get_set_load()
-{
- typedef
- __gnu_pbds::detail::integral_constant<int,
- test_traits::get_set_load>
- get_set_load_ind;
-
- get_set_load_imp(get_set_load_ind());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-get_set_load_imp(__gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-get_set_load_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("get_set_load");
-
- PB_DS_SET_DESTRUCT_PRINT
-
- m_p_c->get_load();
-
- m_alloc.set_throw_prob(1);
-
- typename alloc_t::group_throw_prob_adjustor adjust(
- m_p_c->size());
-
- const float min_load = static_cast<float>(0.05);
- const float max_load = static_cast<float>(0.9);
-
- const float new_load =
- static_cast<float>(
- m_g.get_prob()* (max_load - min_load) +
- min_load);
-
- m_p_c->set_load(new_load);
-
- PB_DS_THROW_IF_FAILED(
- m_p_c->get_load() == new_load,
- "",
- m_p_c,
- & m_native_c);
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_loads_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_loads_fn_imps.hpp
deleted file mode 100644
index 10ea2aed941..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/get_set_loads_fn_imps.hpp
+++ /dev/null
@@ -1,122 +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 get_set_loads_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-get_set_loads()
-{
- typedef
- __gnu_pbds::detail::integral_constant<int,
- test_traits::get_set_loads>
- get_set_loads_ind;
-
- return (get_set_loads_imp(get_set_loads_ind()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-get_set_loads_imp(__gnu_pbds::detail::false_type)
-{
- return (true);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-get_set_loads_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("get_set_loads");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- const std::pair<float, float> old_loads =
- m_p_c->get_loads();
-
- try
- {
- m_alloc.set_throw_prob(m_tp);
-
- typename alloc_t::group_throw_prob_adjustor adjust(
- m_p_c->size());
-
- const float min_min_load = static_cast<float>(0.05);
- const float max_min_load = static_cast<float>(0.2);
-
- const float new_min_load =
- static_cast<float>(
- m_g.get_prob()* (max_min_load - min_min_load) +
- min_min_load);
-
- const float new_max_load = static_cast<float>(new_min_load* 2.5);
-
- PB_DS_THROW_IF_FAILED( new_max_load < 1, new_max_load, m_p_c, & m_native_c);
-
- m_p_c->set_loads(
- std::make_pair( new_min_load, new_max_load));
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED(
- old_loads == m_p_c->get_loads(),
- old_loads.first << " " << old_loads.second << " " <<
- m_p_c->get_loads().first << " " <<
- m_p_c->get_loads().second,
- m_p_c,
- & m_native_c);
-
- done = false;
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp
deleted file mode 100644
index e5bf3be35b0..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/insert_fn_imps.hpp
+++ /dev/null
@@ -1,89 +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 insert_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-insert()
-{
- PB_DS_TRACE("insert");
- bool done = true;
- PB_DS_SET_DESTRUCT_PRINT
- try
- {
- m_alloc.set_throw_prob(0);
- value_type v = test_traits::generate_value(m_g, m_m);
- m_alloc.set_throw_prob(m_tp);
- const_key_reference r_k = test_traits::extract_key(v);
- typename cntnr::const_point_iterator found_it = m_p_c->find(r_k);
- const bool existed = (found_it != m_p_c->end());
- const std::pair<typename cntnr::point_iterator, bool> ins_ret = m_p_c->insert(v);
-
- if (ins_ret.second)
- {
- PB_DS_THROW_IF_FAILED(!existed, "", m_p_c, &m_native_c);
- }
- else
- {
- PB_DS_THROW_IF_FAILED(existed, "", m_p_c, &m_native_c);
- PB_DS_THROW_IF_FAILED(found_it == ins_ret.first, "", m_p_c, &m_native_c);
- }
- m_native_c.insert(test_traits::native_value(v));
- }
- catch(__gnu_cxx::forced_exception_error&)
- {
- done = false;
- }
- catch(__gnu_pbds::insert_error&)
- {
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
- PB_DS_CANCEL_DESTRUCT_PRINT
- return (done);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/it_conversion_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/it_conversion_fn_imps.hpp
deleted file mode 100644
index 2a3c6396e8a..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/it_conversion_fn_imps.hpp
+++ /dev/null
@@ -1,307 +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 it_conversion_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-it_copy()
-{
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_iterator const_it(it);
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it(it);
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it(it);
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::const_iterator const_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it(const_it);
-
- PB_DS_THROW_IF_FAILED( const_find_it == const_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != const_it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::point_iterator find_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it(find_it);
-
- PB_DS_THROW_IF_FAILED( find_it == const_find_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != const_find_it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-it_assign()
-{
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_iterator const_it;
- const_it = it;
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = it;
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it;
- find_it = it;
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::const_iterator const_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = const_it;
-
- PB_DS_THROW_IF_FAILED( const_find_it == const_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != const_it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::point_iterator find_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = find_it;
-
- PB_DS_THROW_IF_FAILED( find_it == const_find_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != const_find_it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_copy()
-{
- enum
- {
- reverse_iteration = container_traits::reverse_iteration
- };
-
- rev_it_copy_imp(__gnu_pbds::detail::integral_constant<int,reverse_iteration>());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_assign()
-{
- enum
- {
- reverse_iteration = container_traits::reverse_iteration
- };
-
- rev_it_assign_imp(__gnu_pbds::detail::integral_constant<int,reverse_iteration>());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_copy_imp(__gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_copy_imp(__gnu_pbds::detail::true_type)
-{
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_reverse_iterator const_it(it);
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it(it);
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it(it);
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_assign_imp(__gnu_pbds::detail::false_type)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-rev_it_assign_imp(__gnu_pbds::detail::true_type)
-{
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_reverse_iterator const_it;
- const_it = it;
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = it;
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it;
- find_it = it;
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp
deleted file mode 100644
index 8c11f765766..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/operator_fn_imps.hpp
+++ /dev/null
@@ -1,246 +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 operator_fn_imps.hpp
- * Contains a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-operator()()
-{
- typedef xml_result_set_regression_formatter formatter_type;
- formatter_type* p_fmt = NULL;
-
- if (m_disp)
- p_fmt = new formatter_type(string_form<Cntnr>::name(),
- string_form<Cntnr>::desc());
-
- m_g.init(m_seed);
-
- // Track allocation from this point only.
- const size_t memory_label = 775;
- m_alloc.init(m_seed);
- m_alloc.set_label(memory_label);
-
- prog_bar pb(m_n, std::cout, m_disp);
- m_i = 0;
-
- try
- {
- for (m_i = 0; m_i < m_n; ++m_i)
- {
- PB_DS_TRACE("Op #" << static_cast<unsigned long>(m_i));
- allocator_type::set_label(m_i);
- switch (m_i)
- {
- case 0:
- PB_DS_RUN_MTHD(default_constructor);
- break;
- case 1:
- defs();
- break;
- case 2:
- policy_access();
- break;
- case 3:
- it_copy();
- break;
- case 4:
- it_assign();
- break;
- case 5:
- rev_it_copy();
- break;
- case 6:
- rev_it_assign();
- break;
- default:
- switch(get_next_op())
- {
- case insert_op:
- switch(get_next_sub_op(2))
- {
- case 0:
- PB_DS_RUN_MTHD(insert)
- break;
- case 1:
- PB_DS_RUN_MTHD(subscript)
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
- break;
- case erase_op:
- switch(get_next_sub_op(4))
- {
- case 0:
- PB_DS_RUN_MTHD(erase)
- break;
- case 1:
- PB_DS_RUN_MTHD(erase_if)
- break;
- case 2:
- PB_DS_RUN_MTHD(erase_it)
- break;
- case 3:
- PB_DS_RUN_MTHD(erase_rev_it)
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
- break;
- case clear_op:
- PB_DS_RUN_MTHD(clear)
- break;
- case other_op:
- switch(get_next_sub_op(8))
- {
- case 0:
- swap();
- break;
- case 1:
- PB_DS_RUN_MTHD(copy_constructor)
- break;
- case 2:
- PB_DS_RUN_MTHD(it_constructor)
- break;
- case 3:
- PB_DS_RUN_MTHD(assignment_operator)
- break;
- case 4:
- PB_DS_RUN_MTHD(split_join)
- break;
- case 5:
- resize();
- break;
- case 6:
- get_set_load();
- break;
- case 7:
- get_set_loads();
- break;
- default:
- 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.inc();
- }
- }
- catch (...)
- {
- std::cerr << "Failed at index " << static_cast<unsigned long>(m_i)
- << std::endl;
- delete m_p_c;
- throw;
- }
-
- // Clean up, then check for allocation by special label, set above.
- delete m_p_c;
-
- try
- { m_alloc.check_allocated(memory_label); }
- catch (...)
- {
- std::cerr << "detected leaks!" << std::endl;
- std::cerr << m_alloc << std::endl;
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
-
- // Reset throw probability.
- m_alloc.set_throw_prob(0);
-
- if (m_disp)
- {
- std::cout << std::endl;
- delete p_fmt;
- }
-}
-
-PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::op
-PB_DS_CLASS_C_DEC::
-get_next_op()
-{
- const double prob = m_g.get_prob();
-
- if (prob < m_ip)
- return insert_op;
-
- if (prob < m_ip + m_ep)
- return erase_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);
-
- return other_op;
-}
-
-PB_DS_CLASS_T_DEC
-size_t
-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,
- static_cast<unsigned long>(i) << " " <<
- static_cast<unsigned long>(max),
- m_p_c, &m_native_c);
-
- return i;
- }
- else
- ++i;
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/policy_access_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/policy_access_fn_imps.hpp
deleted file mode 100644
index 9b4f0927f6f..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/policy_access_fn_imps.hpp
+++ /dev/null
@@ -1,184 +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 policy_access_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access()
-{
- policy_access(typename Cntnr::container_category());
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::basic_hash_tag)
-{
- {
- typename Cntnr::hash_fn& r_t =
- m_p_c->get_hash_fn();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::hash_fn& r_t =((const Cntnr& )*m_p_c).get_hash_fn();
-
- assert(&r_t != NULL);
- }
-
- {
- typename Cntnr::eq_fn& r_t =
- m_p_c->get_eq_fn();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::eq_fn& r_t =((const Cntnr& )*m_p_c).get_eq_fn();
-
- assert(&r_t != NULL);
- }
-
- {
- typename Cntnr::resize_policy& r_t =
- m_p_c->get_resize_policy();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::resize_policy& r_t =((const Cntnr& )*m_p_c).get_resize_policy();
-
- assert(&r_t != NULL);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::cc_hash_tag)
-{
- policy_access(__gnu_pbds::basic_hash_tag());
-
- {
- typename Cntnr::comb_hash_fn& r_t =
- m_p_c->get_comb_hash_fn();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::comb_hash_fn& r_t =((const Cntnr& )*m_p_c).get_comb_hash_fn();
-
- assert(&r_t != NULL);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::gp_hash_tag)
-{
- policy_access(__gnu_pbds::basic_hash_tag());
-
- {
- typename Cntnr::comb_probe_fn& r_t =
- m_p_c->get_comb_probe_fn();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::comb_probe_fn& r_t =((const Cntnr& )*m_p_c).get_comb_probe_fn();
-
- assert(&r_t != NULL);
- }
-
- {
- typename Cntnr::probe_fn& r_t =
- m_p_c->get_probe_fn();
-
- assert(&r_t != NULL);
- }
- {
- const typename Cntnr::probe_fn& r_t =((const Cntnr& )*m_p_c).get_probe_fn();
-
- assert(&r_t != NULL);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::tree_tag)
-{
- {
- typename Cntnr::cmp_fn& r_t =
- m_p_c->get_cmp_fn();
-
- assert(&r_t != NULL);
- }
-
- {
- const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
-
- assert(&r_t != NULL);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::list_update_tag)
-{ }
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access(__gnu_pbds::pat_trie_tag)
-{
- typename Cntnr::e_access_traits& r_t =
- m_p_c->get_e_access_traits();
-
- assert(&r_t != NULL);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/resize_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/resize_fn_imps.hpp
deleted file mode 100644
index 77bfcb84c39..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/resize_fn_imps.hpp
+++ /dev/null
@@ -1,125 +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 resize_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-resize()
-{
- typedef __gnu_pbds::detail::integral_constant<int, test_traits::resize> resize_ind;
-
- return (resize_imp(resize_ind()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-resize_imp(__gnu_pbds::detail::false_type)
-{
- return (true);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-resize_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("resize");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- const size_t old_size =
- m_p_c->get_actual_size();
-
- try
- {
- m_alloc.set_throw_prob(m_tp);
-
- typename alloc_t::group_throw_prob_adjustor
- adjust(m_p_c->size());
-
- enum
- {
- min_new_size = 200,
- max_new_size = 2000
- };
-
- const size_t new_size =
- m_g.get_unsigned_long(min_new_size, max_new_size);
-
- m_p_c->resize(new_size);
-
- const size_t actual_new_size =
- m_p_c->get_actual_size();
-
- PB_DS_THROW_IF_FAILED(
- actual_new_size >= new_size,
- static_cast<unsigned long>(actual_new_size) << " " <<
- static_cast<unsigned long>(new_size),
- m_p_c,
- & m_native_c);
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED(
- m_p_c->get_actual_size() == old_size,
- static_cast<unsigned long>(m_p_c->get_actual_size()) <<
- " " << static_cast<unsigned long>(old_size),
- m_p_c,
- & m_native_c);
-
- done = false;
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp
deleted file mode 100644
index 8026d7cc200..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/split_join_fn_imps.hpp
+++ /dev/null
@@ -1,149 +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 split_join_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-split_join()
-{
- enum
- {
- split_join = container_traits::order_preserving
- };
-
- return (split_join_imp(__gnu_pbds::detail::integral_constant<int,split_join>()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-split_join_imp(__gnu_pbds::detail::false_type)
-{
- return (true);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-split_join_imp(__gnu_pbds::detail::true_type)
-{
- PB_DS_TRACE("split_join");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- Cntnr lhs(*m_p_c);
-
- Cntnr rhs;
-
- native_type native_lhs(m_native_c);
-
- native_type native_rhs;
-
- const key_type k =
- test_traits::generate_key(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- lhs.split(k, rhs);
-
- typename native_type::const_iterator it =
- native_lhs.upper_bound(test_traits::native_key(k));
-
- while (!native_lhs.empty()&& it != native_lhs.end())
- {
- native_rhs.insert(*it);
-
- typename native_type::const_iterator next_it = it;
- ++next_it;
-
- native_lhs.erase(test_traits::extract_native_key(*it));
-
- it = next_it;
- }
-
- PB_DS_COND_COMPARE(lhs, native_lhs);
- PB_DS_COND_COMPARE(rhs, native_rhs);
-
- m_alloc.set_throw_prob(m_tp);
-
- if (m_g.get_prob() < 0.5)
- lhs.swap(rhs);
-
- lhs.join(rhs);
-
- PB_DS_THROW_IF_FAILED(
- rhs.size() == 0,
- static_cast<unsigned long>(rhs.size()),
- m_p_c,
- & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- rhs.empty(),
- static_cast<unsigned long>(rhs.size()),
- m_p_c,
- & m_native_c);
-
- m_p_c->swap(lhs);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( container_traits::split_join_can_throw, container_traits::split_join_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp
deleted file mode 100644
index e627595d728..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/detail/subscript_fn_imps.hpp
+++ /dev/null
@@ -1,127 +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 subscript_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-subscript()
-{
- PB_DS_TRACE("subscript");
-
- enum
- {
- no_data = __gnu_pbds::detail::is_same<
- typename Cntnr::const_key_reference,
- typename Cntnr::const_reference>::value
- };
-
- return (subscript_imp(__gnu_pbds::detail::integral_constant<int,no_data>()));
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-subscript_imp(__gnu_pbds::detail::false_type)
-{
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- value_type v = test_traits::generate_value(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
- (*m_p_c)[v.first] = v.second;
-
- m_native_c[test_traits::native_value(v).first] =
- test_traits::native_value(v).second;
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-subscript_imp(__gnu_pbds::detail::true_type)
-{
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- value_type v = test_traits::generate_value(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
- (*m_p_c)[v] = __gnu_pbds::null_mapped_type();
-
- m_native_c.insert(test_traits::native_value(v));
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
index 2f79df56dce..882d62b6569 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
@@ -49,11 +49,11 @@
#include <iostream>
#include <vector>
-#include <regression/rand/assoc/container_rand_regression_test.hpp>
+#include <regression/rand/assoc/container_rand_regression_test.h>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/assoc/common_type.hpp>
#include <regression/basic_type.hpp>
-#include <regression/assoc/common_type.hpp>
+#include <regression/common_type.hpp>
namespace __gnu_pbds
{
@@ -111,7 +111,7 @@ namespace detail
// Sane defaults.
size_t n = iter;
size_t m = keys;
- size_t sd = 0; // 0 = time-determined arbitrary
+ size_t sd = twister_rand_gen::get_time_determined_seed();
double tp = 0.2;
double ip = 0.6;
double ep = 0.2;
@@ -133,12 +133,10 @@ namespace detail
return -2;
};
+ // XXX RAII, constructor takes bool for display
xml_test_rand_regression_formatter* p_fmt = NULL;
- if (sd == 0)
- sd = twister_rand_gen::get_time_determined_seed();
if (disp)
- p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip,
- ep, cp, mp);
+ p_fmt = new xml_test_rand_regression_formatter(sd, n, m, tp, ip, ep, cp, mp);
try
{
@@ -174,12 +172,12 @@ namespace detail
cerr << "* Performs the same operation on an cntnr object" << endl;
cerr << "* Possibly compares the container to the cntnr object" << endl;
cerr << "* Checks that exceptions (thrown by an allocator) "
- "do not violate exception guarantees";
+ "do not violate exception guarantees";
cerr << endl << endl;
- cerr << "sd = seed for random-number generator; 0 = "
- "time determined value" << endl;
+ cerr << "sd = seed for random-number generator; "
+ "0 = time determined value" << endl;
cerr << "n = number of iterations" << endl;
cerr << "m = number of distinct values" << endl;
cerr << "tp = probability that an exception will be actively thrown" << endl;
diff --git a/libstdc++-v3/testsuite/util/regression/rand/io/assoc/xml_formatter.hpp b/libstdc++-v3/testsuite/util/regression/rand/io/assoc/xml_formatter.hpp
deleted file mode 100644
index db9ed28efb8..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/io/assoc/xml_formatter.hpp
+++ /dev/null
@@ -1,81 +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 xml_formatter.hpp
- * Contains an XML formatter for regression tests.
- */
-
-#ifndef PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
-#define PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
-
-#include <regression/rand/io/xml_formatter.hpp>
-
-namespace __gnu_pbds
-{
-
- namespace test
- {
-
- class xml_test_rand_regression_formatter : public xml_test_formatter
- {
- public:
- xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m, double tp, double ip, double ep, double cp, double mp);
- };
-
- xml_test_rand_regression_formatter::
- xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m, double tp, double ip, double ep, double cp, double mp)
- {
- std::cout << make_xml_tag("sd", "value", sd);
- std::cout << make_xml_tag("n", "value", n);
- std::cout << make_xml_tag("m", "value", m);
- std::cout << make_xml_tag("tp", "value", tp);
- std::cout << make_xml_tag("ip", "value", ip);
- std::cout << make_xml_tag("ep", "value", ep);
- std::cout << make_xml_tag("cp", "value", cp);
- std::cout << make_xml_tag("mp", "value", mp);
- }
-
- } // namespace test
-
-} // namespace __gnu_pbds
-
-#endif // #ifndef PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/rand/io/priority_queue/xml_formatter.hpp b/libstdc++-v3/testsuite/util/regression/rand/io/priority_queue/xml_formatter.hpp
deleted file mode 100644
index af6f5d242b9..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/io/priority_queue/xml_formatter.hpp
+++ /dev/null
@@ -1,82 +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 xml_formatter.hpp
- * Contains an XML formatter for regression tests.
- */
-
-#ifndef PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
-#define PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
-
-#include <regression/rand/io/xml_formatter.hpp>
-
-namespace __gnu_pbds
-{
-
- namespace test
- {
-
- class xml_test_rand_regression_formatter : public xml_test_formatter
- {
- public:
- xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m, double tp, double ip, double dp, double ep, double cp, double mp);
- };
-
- xml_test_rand_regression_formatter::
- xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m, double tp, double ip, double dp, double ep, double cp, double mp)
- {
- std::cout << make_xml_tag("sd", "value", sd);
- std::cout << make_xml_tag("n", "value", n);
- std::cout << make_xml_tag("m", "value", m);
- std::cout << make_xml_tag("tp", "value", tp);
- std::cout << make_xml_tag("ip", "value", ip);
- std::cout << make_xml_tag("dp", "value", dp);
- std::cout << make_xml_tag("ep", "value", ep);
- std::cout << make_xml_tag("cp", "value", cp);
- std::cout << make_xml_tag("mp", "value", mp);
- }
-
- } // namespace test
-
-} // namespace __gnu_pbds
-
-#endif // #ifndef PB_DS_XML_TEST_REGRESSION_FORMATTER_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h
new file mode 100644
index 00000000000..fe22c0c6efa
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h
@@ -0,0 +1,275 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2008 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 container_rand_regression_test.h
+ * Contains a random regression test for a specific container type.
+ */
+
+#ifndef PB_DS_CONTAINER_RAND_REGRESSION_TEST_H
+#define PB_DS_CONTAINER_RAND_REGRESSION_TEST_H
+
+#include <algorithm>
+#include <string>
+#include <sstream>
+#include <utility>
+#include <cassert>
+#include <regression/basic_type.hpp>
+#include <ext/pb_ds/priority_queue.hpp>
+#include <io/prog_bar.hpp>
+#include <testsuite_rng.h>
+#include <common_type/priority_queue/string_form.hpp>
+#include <regression/rand/xml_formatter.hpp>
+#include <regression/trait/priority_queue/trait.hpp>
+
+namespace __gnu_pbds
+{
+namespace test
+{
+namespace detail
+{
+ // Rand test specialized for a specific container.
+ template<typename Cntnr>
+ class container_rand_regression_test
+ {
+ private:
+ typedef Cntnr cntnr;
+ typedef typename cntnr::allocator_type allocator_type;
+ typedef typename cntnr::size_type size_type;
+ typedef twister_rand_gen gen;
+ typedef basic_type value_type;
+ typedef native_priority_queue<std::string, true> native_type;
+ typedef regression_test_traits<cntnr> test_traits;
+
+ enum op
+ {
+ insert_op,
+ modify_op,
+ erase_op,
+ clear_op,
+ other_op
+ };
+
+ op
+ get_next_op();
+
+ size_t
+ get_next_sub_op(size_t max);
+
+ static void
+ defs();
+
+ static void
+ value_defs();
+
+ static void
+ ds_defs();
+
+ static void
+ iterator_defs();
+
+ static void
+ policy_defs();
+
+ void
+ policy_access();
+
+ void
+ it_copy();
+
+ void
+ it_assign();
+
+ bool
+ default_constructor();
+
+ void
+ swap();
+
+ bool
+ copy_constructor();
+
+ bool
+ assignment_operator();
+
+ bool
+ it_constructor();
+
+ bool
+ push();
+
+ bool
+ modify();
+
+ bool
+ pop();
+
+ bool
+ erase_if();
+
+ bool
+ erase_it();
+
+ bool
+ clear();
+
+ bool
+ split_join();
+
+ void
+ cmp(const Cntnr& r_container, const native_type& r_native_c,
+ const std::string& r_call_fn);
+
+ void
+ print_container(const native_type& r_cnt,
+ std::ostream& r_os = std::cerr) const;
+
+ void
+ print_container(const cntnr& r_cnt,
+ std::ostream& r_os = std::cerr) const;
+
+ struct destructor_printer
+ {
+ destructor_printer(const std::string& r_msg)
+ : m_msg(r_msg), m_print(true) { }
+
+ void
+ cancel()
+ { m_print = false; }
+
+ ~destructor_printer()
+ {
+ if (m_print)
+ {
+ std::cerr << std::endl << "Uncaught exception: " << std::endl
+ << m_msg << std::endl;
+ }
+ }
+
+ const std::string m_msg;
+ bool m_print;
+ };
+
+ const unsigned long m_seed;
+ const size_t m_n;
+ const size_t m_m;
+ const double m_tp;
+ const double m_ip;
+ const double m_dp;
+ const double m_ep;
+ const double m_cp;
+ const double m_mp;
+ const bool m_disp;
+ twister_rand_gen m_g;
+ Cntnr* m_p_c;
+ native_type m_native_c;
+ allocator_type m_alloc;
+ size_t m_i;
+
+ public:
+ container_rand_regression_test(unsigned long seed, size_t n, size_t m,
+ double tp, double ip, double dp,
+ double ep, double cp, double mp,
+ bool disp);
+
+ virtual
+ ~container_rand_regression_test();
+
+ void
+ operator()();
+ };
+
+
+#ifdef PB_DS_REGRESSION_TRACE
+# define PB_DS_TRACE(X) std::cerr << X << std::endl
+#else
+# define PB_DS_TRACE(X)
+#endif
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Cntnr>
+
+#define PB_DS_CLASS_C_DEC \
+ container_rand_regression_test<Cntnr>
+
+#define PB_DS_COND_COMPARE(L, R) \
+ if (m_g.get_prob() < m_mp) \
+ cmp(L, R, __FUNCTION__);
+
+#define PB_DS_RUN_MTHD(MTHD) \
+ { \
+ bool done = false; \
+ while (!done) \
+ done = MTHD(); \
+ }
+
+#define _GLIBCXX_THROW_IF_(PRED, MORE, P_C, P_NC, F, L) \
+ if (PRED) \
+ { \
+ std::cerr << "Failure at " << F << ": " << L << std::endl; \
+ std::cerr << MORE << std::endl; \
+ std::cerr << "container:" << std::endl; \
+ print_container(*(P_C)); \
+ std::cerr << std::endl; \
+ std::cerr << "native container:" << std::endl; \
+ print_container(*(P_NC)); \
+ std::cerr << std::endl; \
+ throw std::logic_error("pbds throw if failed"); \
+ }
+
+#define _GLIBCXX_THROW_IF(PRED, MORE, P_C, P_NC) \
+ _GLIBCXX_THROW_IF_(PRED, MORE, P_C, P_NC, __FILE__, __LINE__)
+
+#include <regression/rand/priority_queue/container_rand_regression_test.tcc>
+
+#undef PB_DS_COND_COMPARE
+#undef PB_DS_RUN_MTHD
+#undef PB_DS_CLASS_T_DEC
+#undef PB_DS_CLASS_C_DEC
+#undef _GLIBCXX_THROW_IF_
+#undef _GLIBCXX_THROW_IF
+#undef PB_DS_TRACE
+
+} // namespace detail
+} // namespace test
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
new file mode 100644
index 00000000000..ceaa75badae
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
@@ -0,0 +1,848 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2008 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 container_rand_regression_test.tcc
+ * Contains a random regression test for a specific container type.
+ */
+
+#ifndef PB_DS_CONTAINER_RAND_REGRESSION_TEST_TCC
+#define PB_DS_CONTAINER_RAND_REGRESSION_TEST_TCC
+
+ // Constructor, copy constructor, assignment and destructor.
+PB_DS_CLASS_T_DEC
+PB_DS_CLASS_C_DEC::
+container_rand_regression_test(unsigned long seed, size_t n, size_t m,
+ double tp, double ip, double dp, double ep,
+ double cp, double mp, bool disp)
+: m_seed(seed == 0 ? twister_rand_gen::get_time_determined_seed(): seed),
+ m_n(n), m_m(m), m_tp(tp), m_ip(ip), m_dp(dp), m_ep(ep), m_cp(cp),
+ m_mp(mp), m_disp(disp), m_p_c(NULL)
+{ }
+
+PB_DS_CLASS_T_DEC
+PB_DS_CLASS_C_DEC::
+~container_rand_regression_test()
+{ }
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+default_constructor()
+{
+ PB_DS_TRACE("default_constructor");
+ bool done = true;
+ m_alloc.set_throw_prob(m_tp);
+
+ try
+ {
+ m_p_c = new Cntnr;
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ if (m_p_c != NULL)
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+swap()
+{
+ PB_DS_TRACE("swap");
+ m_alloc.set_throw_prob(0);
+ Cntnr* p_c = new Cntnr;
+ m_alloc.set_throw_prob(1);
+ p_c->swap(*m_p_c);
+ std::swap(p_c, m_p_c);
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+copy_constructor()
+{
+ PB_DS_TRACE("copy_constructor");
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+
+ typedef typename allocator_type::group_throw_prob_adjustor adjustor;
+ adjustor adjust(m_p_c->size());
+
+ try
+ {
+ p_c = new Cntnr(*m_p_c);
+ std::swap(p_c, m_p_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+assignment_operator()
+{
+ PB_DS_TRACE("assignment operator");
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+
+ typedef typename allocator_type::group_throw_prob_adjustor adjustor;
+ adjustor adjust(m_p_c->size());
+
+ try
+ {
+ p_c = new Cntnr();
+ *p_c = *m_p_c;
+ std::swap(p_c, m_p_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+it_constructor()
+{
+ bool done = true;
+ Cntnr* p_c = NULL;
+ m_alloc.set_throw_prob(m_tp);
+ typedef typename allocator_type::group_throw_prob_adjustor adjustor;
+ adjustor adjust(m_p_c->size());
+
+ try
+ {
+ switch(get_next_sub_op(3))
+ {
+ case 0:
+ p_c = new Cntnr(m_p_c->get_cmp_fn());
+ m_native_c.clear();
+ break;
+ case 1:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
+ break;
+ case 2:
+ p_c = new Cntnr(m_p_c->begin(), m_p_c->end(), m_p_c->get_cmp_fn());
+ break;
+ default:
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ };
+
+ std::swap(p_c, m_p_c);
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+
+ delete p_c;
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ return done;
+}
+
+
+ // Compare.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+cmp(const Cntnr& c, const native_type& native, const std::string& callfn)
+{
+ destructor_printer notify(__FUNCTION__);
+
+ try
+ {
+ m_alloc.set_throw_prob(1);
+
+ const size_t size = c.size();
+ const size_t native_size = native.size();
+ _GLIBCXX_THROW_IF(size != native_size, size << " " << native_size,
+ &c, &native);
+
+ const bool empty = c.empty();
+ const bool native_empty = native.empty();
+ _GLIBCXX_THROW_IF(empty != native_empty, empty << " " << native_empty,
+ &c, &native);
+
+ const size_t it_size = std::distance(c.begin(), c.end());
+ _GLIBCXX_THROW_IF(it_size != size, it_size << " " << size, &c, &native);
+
+ if (!c.empty())
+ {
+ const std::string native_top = native.top();
+ const std::string top = test_traits::native_value(c.top());
+ const bool top_smaller = std::less<std::string>()(top, native_top);
+ const bool top_larger = std::less<std::string>()(native_top, top);
+
+ if (top_smaller || top_larger)
+ _GLIBCXX_THROW_IF(true, top << " " << native_top, &c, &native);
+ }
+ }
+ catch(...)
+ {
+ _GLIBCXX_THROW_IF(true, "call-fn: " + callfn, &c, &native);
+ }
+
+ notify.cancel();
+}
+
+ // Operators.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+operator()()
+{
+ typedef xml_result_set_regression_formatter formatter_type;
+ formatter_type* p_fmt = NULL;
+ if (m_disp)
+ p_fmt = new formatter_type(string_form<Cntnr>::name(),
+ string_form<Cntnr>::desc());
+
+ m_g.init(m_seed);
+ m_alloc.init(m_seed);
+
+ // The __throw_allocator::_S_label defaults to 0, so to make things
+ // easier and more precise when debugging, start at 1.
+ const size_t starting_label(1);
+
+ try
+ {
+ prog_bar pb(m_n, std::cout, m_disp);
+
+ for (m_i = starting_label; m_i <= m_n; ++m_i)
+ {
+ PB_DS_TRACE("Op #" << m_i);
+
+ // Track allocation from this point only.
+ allocator_type::set_label(m_i);
+ switch(m_i)
+ {
+ case 1:
+ PB_DS_RUN_MTHD(default_constructor);
+ break;
+ case 2:
+ defs();
+ break;
+ case 3:
+ policy_access();
+ break;
+ case 4:
+ it_copy();
+ break;
+ case 5:
+ it_assign();
+ break;
+ default:
+ switch(get_next_op())
+ {
+ case insert_op:
+ PB_DS_RUN_MTHD(push)
+ break;
+ case modify_op:
+ PB_DS_RUN_MTHD(modify)
+ break;
+ case erase_op:
+ switch(get_next_sub_op(3))
+ {
+ case 0:
+ PB_DS_RUN_MTHD(pop)
+ break;
+ case 1:
+ PB_DS_RUN_MTHD(erase_if)
+ break;
+ case 2:
+ PB_DS_RUN_MTHD(erase_it)
+ break;
+ default:
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+ break;
+ case clear_op:
+ PB_DS_RUN_MTHD(clear)
+ break;
+ case other_op:
+ switch(get_next_sub_op(5))
+ {
+ case 0:
+ swap();
+ break;
+ case 1:
+ PB_DS_RUN_MTHD(copy_constructor)
+ break;
+ case 2:
+ PB_DS_RUN_MTHD(it_constructor)
+ break;
+ case 3:
+ PB_DS_RUN_MTHD(assignment_operator)
+ break;
+ case 4:
+ PB_DS_RUN_MTHD(split_join)
+ break;
+ default:
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+ break;
+ default:
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ };
+ }
+ pb.inc();
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Failed at index " << m_i << std::endl;
+ delete m_p_c;
+ throw;
+ }
+
+ // Clean up, then check for allocation by special label, set above.
+ allocator_type::set_label(0);
+ delete m_p_c;
+
+ try
+ {
+ for (size_t n = starting_label; n <= m_n; ++n)
+ m_alloc.check_allocated(n);
+ }
+ catch (std::logic_error& obj)
+ {
+ // On fail, check_allocated should throw std::logic_error.
+ std::cerr << obj.what() << std::endl;
+ std::cerr << typeid(Cntnr).name() << std::endl;
+ throw;
+ }
+
+ // Reset throw probability.
+ m_alloc.set_throw_prob(0);
+
+ if (m_disp)
+ {
+ std::cout << std::endl;
+ delete p_fmt;
+ }
+}
+
+PB_DS_CLASS_T_DEC
+typename PB_DS_CLASS_C_DEC::op
+PB_DS_CLASS_C_DEC::
+get_next_op()
+{
+ const double prob = m_g.get_prob();
+
+ if (prob < m_ip)
+ return insert_op;
+
+ if (prob < m_ip + m_dp)
+ return modify_op;
+
+ if (prob < m_ip + m_dp + m_ep)
+ return erase_op;
+
+ if (prob < m_ip + m_dp + m_ep + m_cp)
+ return clear_op;
+
+ _GLIBCXX_THROW_IF(prob > 1, prob, m_p_c, &m_native_c);
+ return other_op;
+}
+
+PB_DS_CLASS_T_DEC
+size_t
+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)
+ {
+ _GLIBCXX_THROW_IF(i >= max, i << " " << max, m_p_c, &m_native_c);
+ return i;
+ }
+ else
+ ++i;
+}
+
+ // Insert.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+push()
+{
+ PB_DS_TRACE("push");
+ bool done = true;
+ destructor_printer notify(__FUNCTION__);
+
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ value_type v = test_traits::generate_value(m_g, m_m);
+ m_alloc.set_throw_prob(m_tp);
+ const typename cntnr::size_type sz = m_p_c->size();
+ m_p_c->push(v);
+ _GLIBCXX_THROW_IF(sz != m_p_c->size() - 1, sz, m_p_c, &m_native_c);
+ m_native_c.push(test_traits::native_value(v));
+ }
+ catch(__gnu_cxx::forced_exception_error& )
+ {
+ done = false;
+ }
+ catch(...)
+ {
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+
+ // Modify.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+modify()
+{
+ PB_DS_TRACE("modify");
+ destructor_printer notify(__FUNCTION__);
+
+ bool done = true;
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ value_type v = test_traits::generate_value(m_g, m_m);
+
+ m_alloc.set_throw_prob(m_tp);
+ typename cntnr::iterator it = m_p_c->begin();
+ std::advance(it, m_g.get_unsigned_long(0, m_p_c->size()));
+ if (it != m_p_c->end())
+ {
+ typedef typename test_traits::native_value_type native_value_type;
+ native_value_type native_v = test_traits::native_value(*it);
+ native_value_type new_native_v = test_traits::native_value(v);
+ m_p_c->modify(it, v);
+ m_native_c.modify(native_v, new_native_v);
+ }
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+ // Clear.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+clear()
+{
+ PB_DS_TRACE("clear");
+ m_p_c->clear();
+ m_native_c.clear();
+ return true;
+}
+
+ // Erase.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+pop()
+{
+ PB_DS_TRACE("pop");
+ destructor_printer notify(__FUNCTION__);
+
+ bool done = true;
+ try
+ {
+ m_alloc.set_throw_prob(1);
+ if (!m_p_c->empty())
+ {
+ m_p_c->pop();
+ m_native_c.pop();
+ }
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_if()
+{
+ PB_DS_TRACE("erase_if");
+ destructor_printer notify(__FUNCTION__);
+
+ bool done = true;
+ try
+ {
+ typedef
+ typename std::iterator_traits<typename cntnr::iterator>::reference
+ it_const_reference;
+
+ m_alloc.set_throw_prob(1);
+
+ typedef
+ typename test_traits::template erase_if_fn<value_type>
+ erase_if_fn_t;
+
+ const size_t ersd = m_p_c->erase_if(erase_if_fn_t());
+
+ typedef
+ typename test_traits::template erase_if_fn<std::string>
+ native_erase_if_fn_t;
+
+ const size_t native_ersd = m_native_c.erase_if(native_erase_if_fn_t());
+
+ _GLIBCXX_THROW_IF(ersd != native_ersd, ersd << " " << native_ersd,
+ m_p_c, &m_native_c);
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+erase_it()
+{
+ PB_DS_TRACE("erase_it");
+ destructor_printer notify(__FUNCTION__);
+
+ bool done = true;
+ try
+ {
+ m_alloc.set_throw_prob(1);
+ typename cntnr::iterator it = m_p_c->begin();
+ std::advance(it, m_g.get_unsigned_long(0, m_p_c->size()));
+
+ if (it != m_p_c->end())
+ {
+ m_native_c.erase(*it);
+ m_p_c->erase(it);
+ }
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ _GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+ // Defs.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+defs()
+{
+ // General container types.
+ typedef typename Cntnr::size_type test_size_type;
+ typedef typename Cntnr::difference_type difference_type;
+ value_defs();
+ iterator_defs();
+ policy_defs();
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+value_defs()
+{
+ typedef typename Cntnr::value_type test_value_type;
+ typedef typename Cntnr::reference test_reference;
+ typedef typename Cntnr::const_reference test_const_reference;
+ typedef typename Cntnr::pointer test_pointer;
+ typedef typename Cntnr::const_pointer test_const_pointer;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+ds_defs()
+{
+ typedef typename Cntnr::container_category test_container_category;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+iterator_defs()
+{
+ typedef typename Cntnr::point_iterator test_point_iterator;
+ typedef typename Cntnr::const_point_iterator const_test_point_iterator;
+ typedef typename Cntnr::iterator test_iterator;
+ typedef typename Cntnr::const_iterator const_test_iterator;
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_defs()
+{
+ typedef typename Cntnr::allocator_type test_allocator;
+ typedef typename Cntnr::cmp_fn test_cmp_fn;
+}
+
+
+// Policy access.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+policy_access()
+{
+ PB_DS_TRACE("policy_access");
+
+ {
+ typename Cntnr::cmp_fn& r_t = m_p_c->get_cmp_fn();
+ assert(&r_t != NULL);
+ }
+
+ {
+ const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
+ assert(&r_t != NULL);
+ }
+}
+
+// Split join.
+PB_DS_CLASS_T_DEC
+bool
+PB_DS_CLASS_C_DEC::
+split_join()
+{
+ PB_DS_TRACE("split_join");
+ destructor_printer notify(__FUNCTION__);
+
+ bool done = true;
+ try
+ {
+ m_alloc.set_throw_prob(0);
+ Cntnr lhs(*m_p_c);
+ Cntnr rhs;
+ native_type native_lhs(m_native_c);
+ m_alloc.set_throw_prob(m_tp);
+
+ typedef typename test_traits::template erase_if_fn<value_type> split_fn_t;
+ lhs.split(split_fn_t(), rhs);
+
+ typedef typename test_traits::template erase_if_fn<std::string>
+ native_split_fn_t;
+
+ native_type native_rhs;
+ native_lhs.split(native_split_fn_t(), native_rhs);
+ PB_DS_COND_COMPARE(lhs, native_lhs);
+ PB_DS_COND_COMPARE(rhs, native_rhs);
+
+ m_alloc.set_throw_prob(m_tp);
+
+ if (m_g.get_prob() < 0.5)
+ lhs.swap(rhs);
+ lhs.join(rhs);
+
+ _GLIBCXX_THROW_IF(rhs.size() != 0, rhs.size(), m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!rhs.empty(), rhs.size(), m_p_c, &m_native_c);
+ }
+ catch(__gnu_cxx::forced_exception_error&)
+ {
+ done = false;
+ const bool b = __gnu_pbds::container_traits<cntnr>::split_join_can_throw;
+ _GLIBCXX_THROW_IF(!b, b, m_p_c, &m_native_c);
+ }
+
+ PB_DS_COND_COMPARE(*m_p_c, m_native_c);
+ notify.cancel();
+ return done;
+}
+
+// Iterator conversions.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+it_copy()
+{
+ PB_DS_TRACE("it_copy");
+
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_iterator const_it(it);
+ _GLIBCXX_THROW_IF(const_it != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_it == it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::const_iterator const_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it(const_it);
+ _GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it1(it);
+ _GLIBCXX_THROW_IF(const_find_it1 != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_find_it1 == it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it1(it);
+ _GLIBCXX_THROW_IF(find_it1 != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(find_it1 == it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it(find_it);
+ _GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c);
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+it_assign()
+{
+ PB_DS_TRACE("it_assign");
+
+ {
+ typename cntnr::iterator it = m_p_c->end();
+ typename cntnr::const_iterator const_it;
+ const_it = it;
+ _GLIBCXX_THROW_IF(const_it != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_it == it), "", m_p_c, &m_native_c);
+
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = it;
+ _GLIBCXX_THROW_IF(const_find_it != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_find_it == it), "", m_p_c, &m_native_c);
+
+ typename cntnr::point_iterator find_it;
+ find_it = it;
+ _GLIBCXX_THROW_IF(find_it != it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(find_it == it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::const_iterator const_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = const_it;
+ _GLIBCXX_THROW_IF(const_find_it != const_it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(const_find_it == const_it), "", m_p_c, &m_native_c);
+ }
+
+ {
+ typename cntnr::point_iterator find_it = m_p_c->end();
+ typename cntnr::const_point_iterator const_find_it;
+ const_find_it = find_it;
+ _GLIBCXX_THROW_IF(find_it != const_find_it, "", m_p_c, &m_native_c);
+ _GLIBCXX_THROW_IF(!(find_it == const_find_it), "", m_p_c, &m_native_c);
+ }
+}
+
+
+// Diagnostics.
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+print_container(const native_type& cnt, std::ostream& os) const
+{
+ m_alloc.set_throw_prob(0);
+ native_type cpy(cnt);
+ while (!cpy.empty())
+ {
+ os << cpy.top() << std::endl;
+ cpy.pop();
+ }
+}
+
+PB_DS_CLASS_T_DEC
+void
+PB_DS_CLASS_C_DEC::
+print_container(const cntnr& cnt, std::ostream& os) const
+{
+ typedef typename cntnr::const_iterator const_iterator;
+ m_alloc.set_throw_prob(0);
+ for (const_iterator it = cnt.begin(); it != cnt.end(); ++it)
+ os << *it << std::endl;
+}
+
+#endif
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/clear_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/clear_fn_imps.hpp
deleted file mode 100644
index 009b56faaf6..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/clear_fn_imps.hpp
+++ /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 clear_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-clear()
-{
- PB_DS_TRACE("clear");
-
- m_p_c->clear();
-
- m_native_c.clear();
-
- return (true);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/cmp_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/cmp_fn_imps.hpp
deleted file mode 100644
index 3707b7db997..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/cmp_fn_imps.hpp
+++ /dev/null
@@ -1,108 +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 cmp_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-cmp(const Cntnr& r_c, const native_type& r_native_c, const std::string& r_call_fn)
-{
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(1);
-
- const size_t size = r_c.size();
- const size_t native_size = r_native_c.size();
-
- PB_DS_THROW_IF_FAILED(
- size == native_size,
- static_cast<unsigned long>(size) << " " <<
- static_cast<unsigned long>(native_size),
- & r_c,
- & r_native_c);
-
- const bool empty = r_c.empty();
- const bool native_empty = r_native_c.empty();
-
- PB_DS_THROW_IF_FAILED(
- empty == native_empty,
- empty << " " << native_empty,
- & r_c,
- & r_native_c);
-
- const size_t it_size = std::distance(r_c.begin(), r_c.end());
-
- PB_DS_THROW_IF_FAILED(
- it_size == size,
- it_size << " " << size,
- & r_c,
- & r_native_c);
-
- if (!r_c.empty())
- {
- const std::string native_top = r_native_c.top();
- const std::string top = test_traits::native_value(r_c.top());
-
- const bool top_smaller = std::less<std::string>()(top, native_top);
- const bool top_larger = std::less<std::string>()(native_top, top);
-
- if (top_smaller || top_larger)
- PB_DS_THROW_IF_FAILED(
- false,
- top << " " << native_top,
- & r_c,
- & r_native_c);
- }
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "call-fn: " + r_call_fn, & r_c, & r_native_c);
- }
-
- PB_DS_CANCEL_DESTRUCT_PRINT
- }
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp
deleted file mode 100644
index 87282825f9c..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/constructor_destructor_fn_imps.hpp
+++ /dev/null
@@ -1,235 +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 constructor_destructor_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-PB_DS_CLASS_C_DEC::
-container_rand_regression_test(unsigned long seed, size_t n, size_t m, double tp, double ip, double dp, double ep, double cp, double mp, bool disp) :
- m_seed((seed == 0)?
- twister_rand_gen::get_time_determined_seed():
- seed),
- m_n(n),
- m_m(m),
- m_tp(tp),
- m_ip(ip),
- m_dp(dp),
- m_ep(ep),
- m_cp(cp),
- m_mp(mp),
- m_disp(disp),
- m_p_c(NULL)
-{ }
-
-PB_DS_CLASS_T_DEC
-PB_DS_CLASS_C_DEC::
-~container_rand_regression_test()
-{ }
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-default_constructor()
-{
- PB_DS_TRACE("default_constructor");
-
- bool done = true;
-
- m_alloc.set_throw_prob(m_tp);
-
- try
- {
- m_p_c = new Cntnr;
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- if (m_p_c != NULL)
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-swap()
-{
- PB_DS_TRACE("swap");
-
- m_alloc.set_throw_prob(0);
-
- Cntnr* p_c = new Cntnr;
-
- m_alloc.set_throw_prob(1);
-
- p_c->swap(*m_p_c);
-
- std::swap(p_c, m_p_c);
-
- delete p_c;
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-copy_constructor()
-{
- PB_DS_TRACE("copy_constructor");
-
- bool done = true;
-
- Cntnr* p_c = NULL;
-
- m_alloc.set_throw_prob(m_tp);
-
- typename alloc_t::group_throw_prob_adjustor
- adjust(m_p_c->size());
-
- try
- {
- p_c = new Cntnr(*m_p_c);
-
- std::swap(p_c, m_p_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- delete p_c;
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-assignment_operator()
-{
- PB_DS_TRACE("assignment operator");
-
- bool done = true;
-
- Cntnr* p_c = NULL;
-
- m_alloc.set_throw_prob(m_tp);
-
- typename alloc_t::group_throw_prob_adjustor
- adjust(m_p_c->size());
-
- try
- {
- p_c = new Cntnr();
-
- * p_c =* m_p_c;
-
- std::swap(p_c, m_p_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- delete p_c;
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-it_constructor()
-{
- bool done = true;
-
- Cntnr* p_c = NULL;
-
- m_alloc.set_throw_prob(m_tp);
-
- typename alloc_t::group_throw_prob_adjustor
- adjust(m_p_c->size());
-
- try
- {
- switch(get_next_sub_op(3))
- {
- case 0:
- p_c = new Cntnr(m_p_c->get_cmp_fn());
- m_native_c.clear();
- break;
- case 1:
- p_c = new Cntnr(m_p_c->begin(),
- m_p_c->end());
- break;
- case 2:
- p_c = new Cntnr(m_p_c->begin(),
- m_p_c->end(),
- m_p_c->get_cmp_fn());
- break;
- default:
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- };
-
- std::swap(p_c, m_p_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
-
- delete p_c;
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/defs_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/defs_fn_imps.hpp
deleted file mode 100644
index ae406937337..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/defs_fn_imps.hpp
+++ /dev/null
@@ -1,98 +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 defs_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-defs()
-{
- // General container types.
- typedef typename Cntnr::size_type test_size_type;
- typedef typename Cntnr::difference_type difference_type;
- value_defs();
- iterator_defs();
- policy_defs();
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-value_defs()
-{
- typedef typename Cntnr::value_type test_value_type;
- typedef typename Cntnr::reference test_reference;
- typedef typename Cntnr::const_reference test_const_reference;
- typedef typename Cntnr::pointer test_pointer;
- typedef typename Cntnr::const_pointer test_const_pointer;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-ds_defs()
-{
- typedef typename Cntnr::container_category test_container_category;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-iterator_defs()
-{
- typedef typename Cntnr::point_iterator test_point_iterator;
- typedef typename Cntnr::const_point_iterator const_test_point_iterator;
- typedef typename Cntnr::iterator test_iterator;
- typedef typename Cntnr::const_iterator const_test_iterator;
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_defs()
-{
- typedef typename Cntnr::allocator_type test_allocator;
- typedef typename Cntnr::cmp_fn test_cmp_fn;
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/diagnostic_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/diagnostic_fn_imps.hpp
deleted file mode 100644
index caeba090e25..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/diagnostic_fn_imps.hpp
+++ /dev/null
@@ -1,73 +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 diagnostic_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-print_container(const native_type& r_cnt, std::ostream& r_os /*= std::cerr*/) const
-{
- m_alloc.set_throw_prob(0);
-
- native_type cpy(r_cnt);
-
- while (!cpy.empty())
- {
- r_os << cpy.top() << std::endl;
-
- cpy.pop();
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-print_container(const cntnr& r_cnt, std::ostream& r_os /*= std::cerr*/) const
-{
- m_alloc.set_throw_prob(0);
-
- for (typename cntnr::const_iterator it = r_cnt.begin(); it != r_cnt.end(); ++it)
- r_os <<* it << std::endl;
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp
deleted file mode 100644
index 82b126a883a..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/erase_fn_imps.hpp
+++ /dev/null
@@ -1,178 +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 erase_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-pop()
-{
- PB_DS_TRACE("pop");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- m_alloc.set_throw_prob(1);
-
- try
- {
- if (!m_p_c->empty())
- {
- m_p_c->pop();
-
- m_native_c.pop();
- }
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_if()
-{
- PB_DS_TRACE("erase_if");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- typedef
- typename std::iterator_traits<
- typename cntnr::iterator>::reference
- it_const_reference;
-
- m_alloc.set_throw_prob(1);
-
- typedef
- typename test_traits::template erase_if_fn<
- value_type>
- erase_if_fn_t;
-
- const size_t ersd =
- m_p_c->erase_if(erase_if_fn_t());
-
- typedef
- typename test_traits::template erase_if_fn<
- std::string>
- native_erase_if_fn_t;
-
- const size_t native_ersd =
- m_native_c.erase_if(native_erase_if_fn_t());
-
- PB_DS_THROW_IF_FAILED(
- ersd == native_ersd,
- static_cast<unsigned long>(ersd) << " " <<
- static_cast<unsigned long>(native_ersd),
- m_p_c,
- & m_native_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-erase_it()
-{
- PB_DS_TRACE("erase_it");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(1);
-
- typename cntnr::iterator it = m_p_c->begin();
-
- std::advance(it, m_g.get_unsigned_long(0, m_p_c->size()));
-
- if (it != m_p_c->end())
- {
- m_native_c.erase(*it);
-
- m_p_c->erase(it);
- }
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp
deleted file mode 100644
index 24dc6499d81..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/insert_fn_imps.hpp
+++ /dev/null
@@ -1,93 +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 insert_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-push()
-{
- PB_DS_TRACE("push");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- value_type v = test_traits::generate_value(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- const typename cntnr::size_type sz = m_p_c->size();
-
- typename cntnr::point_iterator ins_ret = m_p_c->push(v);
-
- PB_DS_THROW_IF_FAILED(
- sz == m_p_c->size() - 1,
- sz,
- m_p_c,
- & m_native_c);
-
- m_native_c.push(test_traits::native_value(v));
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
- }
- catch(...)
- {
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/it_conversion_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/it_conversion_fn_imps.hpp
deleted file mode 100644
index c59e1368835..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/it_conversion_fn_imps.hpp
+++ /dev/null
@@ -1,190 +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 it_conversion_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-it_copy()
-{
- PB_DS_TRACE("it_copy");
-
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_iterator const_it(it);
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it(it);
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it(it);
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::const_iterator const_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it(const_it);
-
- PB_DS_THROW_IF_FAILED( const_find_it == const_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != const_it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::point_iterator find_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it(find_it);
-
- PB_DS_THROW_IF_FAILED( find_it == const_find_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != const_find_it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-it_assign()
-{
- PB_DS_TRACE("it_assign");
-
- {
- typename cntnr::iterator it = m_p_c->end();
-
- typename cntnr::const_iterator const_it;
- const_it = it;
-
- PB_DS_THROW_IF_FAILED( const_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = it;
-
- PB_DS_THROW_IF_FAILED( const_find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != it),
- "",
- m_p_c,
- & m_native_c);
-
- typename cntnr::point_iterator find_it;
- find_it = it;
-
- PB_DS_THROW_IF_FAILED( find_it == it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::const_iterator const_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = const_it;
-
- PB_DS_THROW_IF_FAILED( const_find_it == const_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(const_find_it != const_it),
- "",
- m_p_c,
- & m_native_c);
- }
-
- {
- typename cntnr::point_iterator find_it = m_p_c->end();
-
- typename cntnr::const_point_iterator const_find_it;
- const_find_it = find_it;
-
- PB_DS_THROW_IF_FAILED( find_it == const_find_it, "", m_p_c, & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- !(find_it != const_find_it),
- "",
- m_p_c,
- & m_native_c);
- }
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp
deleted file mode 100644
index 5e99e09628f..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/modify_fn_imps.hpp
+++ /dev/null
@@ -1,96 +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 modify_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-modify()
-{
- PB_DS_TRACE("modify");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- value_type v = test_traits::generate_value(m_g, m_m);
-
- m_alloc.set_throw_prob(m_tp);
-
- typename cntnr::iterator it = m_p_c->begin();
-
- std::advance(it, m_g.get_unsigned_long(0, m_p_c->size()));
-
- if (it != m_p_c->end())
- {
- typename test_traits::native_value_type native_v =
- test_traits::native_value(*it);
-
- typename test_traits::native_value_type new_native_v =
- test_traits::native_value(v);
-
- m_p_c->modify(it, v);
-
- m_native_c.modify(native_v, new_native_v);
- }
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( false, "", m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
-
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp
deleted file mode 100644
index 61869919843..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/operator_fn_imps.hpp
+++ /dev/null
@@ -1,222 +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 operator_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-operator()()
-{
- typedef xml_result_set_regression_formatter formatter_type;
- formatter_type* p_fmt = NULL;
-
- if (m_disp)
- p_fmt = new formatter_type(string_form<Cntnr>::name(),
- string_form<Cntnr>::desc());
-
- m_g.init(m_seed);
-
- // Track allocation from this point only.
- const size_t memory_label = 775;
- m_alloc.init(m_seed);
- m_alloc.set_label(memory_label);
-
- prog_bar pb(m_n, std::cout, m_disp);
- m_i = 0;
-
- try
- {
- for (m_i = 0; m_i < m_n; ++m_i)
- {
- PB_DS_TRACE("Op #" << static_cast<unsigned long>(m_i));
- allocator_type::set_label(m_i);
- switch(m_i)
- {
- case 0:
- PB_DS_RUN_MTHD(default_constructor);
- break;
- case 1:
- defs();
- break;
- case 2:
- policy_access();
- break;
- case 3:
- it_copy();
- break;
- case 4:
- it_assign();
- break;
- default:
- switch(get_next_op())
- {
- case insert_op:
- PB_DS_RUN_MTHD(push)
- break;
- case modify_op:
- PB_DS_RUN_MTHD(modify)
- break;
- case erase_op:
- switch(get_next_sub_op(3))
- {
- case 0:
- PB_DS_RUN_MTHD(pop)
- break;
- case 1:
- PB_DS_RUN_MTHD(erase_if)
- break;
- case 2:
- PB_DS_RUN_MTHD(erase_it)
- break;
- default:
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
- break;
- case clear_op:
- PB_DS_RUN_MTHD(clear)
- break;
- case other_op:
- switch(get_next_sub_op(5))
- {
- case 0:
- swap();
- break;
- case 1:
- PB_DS_RUN_MTHD(copy_constructor)
- break;
- case 2:
- PB_DS_RUN_MTHD(it_constructor)
- break;
- case 3:
- PB_DS_RUN_MTHD(assignment_operator)
- break;
- case 4:
- PB_DS_RUN_MTHD(split_join)
- break;
- default:
- 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.inc();
- }
- }
- catch (...)
- {
- std::cerr << "Failed at index " << static_cast<unsigned long>(m_i)
- << std::endl;
- delete m_p_c;
- throw;
- }
-
- // Clean up, then check for allocation by special label, set above.
- delete m_p_c;
-
- try
- { m_alloc.check_allocated(memory_label); }
- catch (...)
- {
- std::cerr << "detected leaks!" << std::endl;
- std::cerr << m_alloc << std::endl;
- PB_DS_THROW_IF_FAILED(false, "", m_p_c, &m_native_c);
- }
-
- // Reset throw probability.
- m_alloc.set_throw_prob(0);
-
- if (m_disp)
- {
- std::cout << std::endl;
- delete p_fmt;
- }
-}
-
-PB_DS_CLASS_T_DEC
-typename PB_DS_CLASS_C_DEC::op
-PB_DS_CLASS_C_DEC::
-get_next_op()
-{
- const double prob = m_g.get_prob();
-
- if (prob < m_ip)
- return (insert_op);
-
- if (prob < m_ip + m_dp)
- return (modify_op);
-
- if (prob < m_ip + m_dp + m_ep)
- return (erase_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_CLASS_T_DEC
-size_t
-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,
- static_cast<unsigned long>(i) << " " <<
- static_cast<unsigned long>(max),
- m_p_c,
- & m_native_c);
- return i;
- }
- else
- ++i;
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/policy_access_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/policy_access_fn_imps.hpp
deleted file mode 100644
index 40f37926c8e..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/policy_access_fn_imps.hpp
+++ /dev/null
@@ -1,66 +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 policy_access_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-void
-PB_DS_CLASS_C_DEC::
-policy_access()
-{
- PB_DS_TRACE("policy_access");
-
- {
- typename Cntnr::cmp_fn& r_t =
- m_p_c->get_cmp_fn();
-
- assert(&r_t != NULL);
- }
-
- {
- const typename Cntnr::cmp_fn& r_t =((const Cntnr& )*m_p_c).get_cmp_fn();
-
- assert(&r_t != NULL);
- }
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp
deleted file mode 100644
index b25394fa34d..00000000000
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/detail/split_join_fn_imps.hpp
+++ /dev/null
@@ -1,120 +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 split_join_fn_imps.hpp
- * Containsert a random regression test for a specific container type.
- */
-
-PB_DS_CLASS_T_DEC
-bool
-PB_DS_CLASS_C_DEC::
-split_join()
-{
- PB_DS_TRACE("split_join");
-
- bool done = true;
-
- PB_DS_SET_DESTRUCT_PRINT
-
- try
- {
- m_alloc.set_throw_prob(0);
-
- Cntnr lhs(*m_p_c);
-
- Cntnr rhs;
-
- native_type native_lhs(m_native_c);
-
- m_alloc.set_throw_prob(m_tp);
-
- typedef
- typename test_traits::template erase_if_fn<
- value_type>
- split_fn_t;
-
- lhs.split(split_fn_t(), rhs);
-
- typedef
- typename test_traits::template erase_if_fn<
- std::string>
- native_split_fn_t;
-
- native_type native_rhs;
-
- native_lhs.split(native_split_fn_t(), native_rhs);
-
- PB_DS_COND_COMPARE(lhs, native_lhs);
- PB_DS_COND_COMPARE(rhs, native_rhs);
-
- m_alloc.set_throw_prob(m_tp);
-
- if (m_g.get_prob() < 0.5)
- lhs.swap(rhs);
-
- lhs.join(rhs);
-
- PB_DS_THROW_IF_FAILED(
- rhs.size() == 0,
- static_cast<unsigned long>(rhs.size()),
- m_p_c,
- & m_native_c);
-
- PB_DS_THROW_IF_FAILED(
- rhs.empty(),
- static_cast<unsigned long>(rhs.size()),
- m_p_c,
- & m_native_c);
- }
- catch(__gnu_cxx::forced_exception_error& )
- {
- done = false;
-
- PB_DS_THROW_IF_FAILED( __gnu_pbds::container_traits<cntnr>::split_join_can_throw, __gnu_pbds::container_traits<cntnr>::split_join_can_throw, m_p_c, & m_native_c);
- }
-
- PB_DS_COND_COMPARE(*m_p_c, m_native_c);
-
- PB_DS_CANCEL_DESTRUCT_PRINT
-
- return (done);
-}
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
index 80f941a6db9..c74b1a06714 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2008 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
@@ -49,11 +49,9 @@
#include <iostream>
#include <vector>
-#include <regression/rand/priority_queue/container_rand_regression_test.hpp>
#include <io/verified_cmd_line_input.hpp>
-#include <common_type/priority_queue/common_type.hpp>
-#include <regression/basic_type.hpp>
-#include <regression/priority_queue/common_type.hpp>
+#include <regression/common_type.hpp>
+#include <regression/rand/priority_queue/container_rand_regression_test.h>
namespace __gnu_pbds
{
diff --git a/libstdc++-v3/testsuite/util/regression/rand/io/xml_formatter.hpp b/libstdc++-v3/testsuite/util/regression/rand/xml_formatter.hpp
index 7006618bd47..2e43eb35dda 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/io/xml_formatter.hpp
+++ b/libstdc++-v3/testsuite/util/regression/rand/xml_formatter.hpp
@@ -53,35 +53,58 @@
namespace __gnu_pbds
{
-
namespace test
{
-
- class xml_result_set_regression_formatter : public xml_result_set_formatter
+ // Test formatters.
+ struct xml_test_rand_regression_formatter : public xml_test_formatter
{
- public:
- xml_result_set_regression_formatter(const std::string& r_container_name, const std::string& r_container_desc);
-
- ~xml_result_set_regression_formatter();
+ // Associative.
+ xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m,
+ double tp, double ip, double ep,
+ double cp, double mp)
+ {
+ std::cout << make_xml_tag("sd", "value", sd);
+ std::cout << make_xml_tag("n", "value", n);
+ std::cout << make_xml_tag("m", "value", m);
+ std::cout << make_xml_tag("tp", "value", tp);
+ std::cout << make_xml_tag("ip", "value", ip);
+ std::cout << make_xml_tag("ep", "value", ep);
+ std::cout << make_xml_tag("cp", "value", cp);
+ std::cout << make_xml_tag("mp", "value", mp);
+ }
+
+ // Priority Queue.
+ xml_test_rand_regression_formatter(size_t sd, size_t n, size_t m,
+ double tp, double ip, double dp,
+ double ep, double cp, double mp)
+ {
+ std::cout << make_xml_tag("sd", "value", sd);
+ std::cout << make_xml_tag("n", "value", n);
+ std::cout << make_xml_tag("m", "value", m);
+ std::cout << make_xml_tag("tp", "value", tp);
+ std::cout << make_xml_tag("ip", "value", ip);
+ std::cout << make_xml_tag("dp", "value", dp);
+ std::cout << make_xml_tag("ep", "value", ep);
+ std::cout << make_xml_tag("cp", "value", cp);
+ std::cout << make_xml_tag("mp", "value", mp);
+ }
};
- xml_result_set_regression_formatter::
- xml_result_set_regression_formatter(const std::string& r_container_name, const std::string& r_container_desc) :
- xml_result_set_formatter(r_container_name, r_container_desc)
+ // Result formatter.
+ struct xml_result_set_regression_formatter : public xml_result_set_formatter
{
-
- std::cout << detail::make_xml_name_start_tag("progress");
- std::cout << detail::make_xml_name_start_tag_end_delimiter();
- }
-
- xml_result_set_regression_formatter::
- ~xml_result_set_regression_formatter()
- {
- std::cout << detail::make_xml_name_end_tag("progress");
- }
-
+ xml_result_set_regression_formatter(const std::string& r_container_name,
+ const std::string& r_container_desc)
+ : xml_result_set_formatter(r_container_name, r_container_desc)
+ {
+ std::cout << detail::make_xml_name_start_tag("progress");
+ std::cout << detail::make_xml_name_start_tag_end_delimiter();
+ }
+
+ ~xml_result_set_regression_formatter()
+ { std::cout << detail::make_xml_name_end_tag("progress"); }
+ };
} // namespace test
-
} // namespace __gnu_pbds
#endif // #ifndef PB_DS_COMMON_XML_TEST_REGRESSION_FORMATTER_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
index a796b81b732..9e8e0f37bb7 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file get_set_load_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
index 389ad6467fe..d2fd190eea1 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file get_set_loads_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
index d70c88339dd..f97609781a0 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file native_type_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
index ff3004279f4..b54a9350e79 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file node_update_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
index 932a0ccbc1a..4c7d0268bb6 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file resize_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
index a0ba69388a2..772fa172abc 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
@@ -41,7 +41,7 @@
/**
* @file to_string.hpp
- * Containsert classes for transforming stuff to strings.
+ * Contains classes for transforming stuff to strings.
*/
#ifndef PB_DS_REGRESSION_TEST_TO_STRING_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
index 5e97aea41e5..1ce2a9e59e5 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
@@ -41,13 +41,14 @@
/**
* @file trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
#ifndef PB_DS_REGRESSION_TEST_TRAIT_HPP
#define PB_DS_REGRESSION_TEST_TRAIT_HPP
+#include <regression/trait/erase_if_fn.hpp>
#include <regression/trait/assoc/to_string.hpp>
#include <regression/trait/assoc/type_trait.hpp>
#include <regression/trait/assoc/native_type_trait.hpp>
@@ -55,7 +56,6 @@
#include <regression/trait/assoc/get_set_loads_trait.hpp>
#include <regression/trait/assoc/get_set_load_trait.hpp>
#include <regression/trait/assoc/node_update_trait.hpp>
-#include <regression/trait/erase_if_fn.hpp>
namespace __gnu_pbds
{
@@ -104,14 +104,16 @@ namespace detail
typedef PB_DS_TYPE_TRAITS_C_DEC type_traits_base;
public:
- typedef typename Cntnr::key_type key_type;
- typedef typename Cntnr::const_key_reference const_key_reference;
typedef typename Cntnr::value_type value_type;
typedef typename Cntnr::const_reference const_reference;
typedef typename PB_DS_NATIVE_TYPE_TRAITS_C_DEC::type native_type;
- typedef typename native_type::key_type native_key_type;
typedef typename native_type::value_type native_value_type;
+ // Only associative containers.
+ typedef typename Cntnr::key_type key_type;
+ typedef typename Cntnr::const_key_reference const_key_reference;
+ typedef typename native_type::key_type native_key_type;
+
enum
{
resize = PB_DS_RESIZE_TRAITS_C_DEC::value,
@@ -128,8 +130,7 @@ namespace detail
static size_t
erase_if(native_type& r_native_c)
{
- typedef regression_test_erase_if_fn<typename native_type::value_type> erase_if_fn;
-
+ typedef regression_test_erase_if_fn<native_value_type> erase_if_fn;
typename native_type::iterator it = r_native_c.begin();
size_t num_ersd = 0;
while (it != r_native_c.end())
@@ -193,13 +194,9 @@ namespace detail
static bool
prefix_match(const_key_reference r_key, const std::string& r_native_key)
{
- const size_t native_substr_len = std::min(r_key.length(),
- r_native_key.length());
-
- const std::string native_substr = r_native_key.substr(0,
- native_substr_len);
-
- return native_substr == (const std::string&) r_key;
+ const size_t len = std::min(r_key.length(), r_native_key.length());
+ const std::string substr = r_native_key.substr(0, len);
+ return substr == static_cast<const std::string&>(r_key);
}
};
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
index b9db4a71b3d..2764e434f75 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
@@ -41,7 +41,7 @@
/**
* @file type_trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp b/libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp
index 41618a6843e..994259c4d4c 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp
@@ -41,7 +41,7 @@
/**
* @file erase_if_fn.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
diff --git a/libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp
index f2875105649..34bf706d987 100644
--- a/libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp
+++ b/libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp
@@ -41,7 +41,7 @@
/**
* @file trait.hpp
- * Containsert traits for a random regression test
+ * Contains traits for a random regression test
* for a specific container type.
*/
OpenPOWER on IntegriCloud