summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/util/regression/trait/assoc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/util/regression/trait/assoc')
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp90
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp90
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp185
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp124
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp90
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp81
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp206
-rw-r--r--libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp111
8 files changed, 977 insertions, 0 deletions
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
new file mode 100644
index 000000000..b771b8020
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_SET_LOAD_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_SET_LOAD_TRAIT_HPP
+
+#include <ext/pb_ds/assoc_container.hpp>
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ template<typename Cntnr, class Tag>
+ struct regression_test_get_set_load_traits
+ {
+ enum
+ {
+ value = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_hash_get_set_load_traits
+ {
+ enum
+ {
+ value = Cntnr::resize_policy::trigger_policy::get_set_load
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_get_set_load_traits<
+ Cntnr,
+ __gnu_pbds::cc_hash_tag> : public regression_test_hash_get_set_load_traits<
+ Cntnr>
+ { };
+
+ template<typename Cntnr>
+ struct regression_test_get_set_load_traits<
+ Cntnr,
+ __gnu_pbds::gp_hash_tag> : public regression_test_hash_get_set_load_traits<
+ Cntnr>
+ { };
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_REGRESSION_TEST_SET_LOAD_TRAIT_HPP
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
new file mode 100644
index 000000000..6d7508da8
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_SET_LOADS_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_SET_LOADS_TRAIT_HPP
+
+#include <ext/pb_ds/assoc_container.hpp>
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ template<typename Cntnr, class Tag>
+ struct regression_test_get_set_loacontainer_traits
+ {
+ enum
+ {
+ value = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_hash_get_set_loacontainer_traits
+ {
+ enum
+ {
+ value = Cntnr::resize_policy::trigger_policy::get_set_loads
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_get_set_loacontainer_traits<
+ Cntnr,
+ __gnu_pbds::cc_hash_tag> : public regression_test_hash_get_set_loacontainer_traits<
+ Cntnr>
+ { };
+
+ template<typename Cntnr>
+ struct regression_test_get_set_loacontainer_traits<
+ Cntnr,
+ __gnu_pbds::gp_hash_tag> : public regression_test_hash_get_set_loacontainer_traits<
+ Cntnr>
+ { };
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_REGRESSION_TEST_SET_LOADS_TRAIT_HPP
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
new file mode 100644
index 000000000..38761a177
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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 native_type_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_NATIVE_TYPE_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_NATIVE_TYPE_TRAIT_HPP
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ template<typename Key, class Allocator>
+ struct native_key_type;
+
+ template<typename Allocator>
+ struct native_key_type<
+ basic_type,
+ Allocator>
+ {
+ typedef std::string type;
+
+ static type
+ native_key(typename Allocator::template rebind<
+ basic_type>::other::const_reference r_key)
+ {
+ return (std::string(r_key));
+ }
+ };
+
+ template<typename Hd, class Tl, class Allocator>
+ struct native_key_type<
+ std::pair<
+ Hd,
+ Tl>,
+ Allocator>
+ {
+ typedef typename native_key_type< Hd, Allocator>::type hd_type;
+
+ typedef typename native_key_type< Tl, Allocator>::type tl_type;
+
+ typedef std::pair< hd_type, tl_type> type;
+
+ static type
+ native_key(typename Allocator::template rebind< std::pair<Hd, Tl> >::other::const_reference r_key)
+ {
+ return (std::make_pair(
+ native_key_type<Hd, Allocator>::native_key(r_key.first),
+ native_key_type<Tl, Allocator>::native_key(r_key.second)));
+ }
+ };
+
+ template<typename Native_Key_Type,
+ class Key_Type,
+ class Data_Type,
+ class Allocator>
+ struct native_type_traits_base;
+
+ template<typename Native_Key_Type, class Key_Type, class Allocator>
+ struct native_type_traits_base<
+ Native_Key_Type,
+ Key_Type,
+ basic_type,
+ Allocator>
+ {
+ public:
+ typedef std::map< Native_Key_Type, std::string> type;
+
+ public:
+ static const typename type::key_type&
+ extract_key(typename type::const_reference r_val)
+ {
+ return (r_val.first);
+ }
+
+ static typename type::value_type
+ native_value(typename Allocator::template rebind< std::pair<Key_Type, basic_type> >::other::const_reference r_val)
+ {
+ return (std::make_pair(
+ native_key_type<Key_Type, Allocator>::native_key(r_val.first),
+ std::string(r_val.second)));
+ }
+ };
+
+ template<typename Native_Key_Type, class Key_Type, class Allocator>
+ struct native_type_traits_base<
+ Native_Key_Type,
+ Key_Type,
+ __gnu_pbds::null_mapped_type,
+ Allocator>
+ {
+ public:
+ typedef std::set< Native_Key_Type> type;
+
+ public:
+ static const typename type::key_type&
+ extract_key(typename type::const_reference r_val)
+ {
+ return (r_val);
+ }
+
+ static typename type::value_type
+ native_value(typename Allocator::template rebind<
+ Key_Type>::other::const_reference r_val)
+ {
+ return (native_key_type<Key_Type, Allocator>::native_key(
+ r_val));
+ }
+ };
+
+#define PB_DS_NATIVE_KEY_TYPE_C_DEC \
+ native_key_type< \
+ Key_Type, \
+ Allocator>
+
+#define PB_DS_BASE_C_DEC \
+ native_type_traits_base< \
+ typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type, \
+ Key_Type, \
+ Data_Type, \
+ Allocator>
+
+ template<typename Key_Type, class Data_Type, class Allocator>
+ struct native_type_traits : public PB_DS_BASE_C_DEC
+ {
+ typedef typename PB_DS_BASE_C_DEC::type type;
+
+ typedef typename type::key_type key_type;
+
+ static typename PB_DS_NATIVE_KEY_TYPE_C_DEC::type
+ native_key(typename Allocator::template rebind<
+ Key_Type>::other::const_reference r_key)
+ {
+ return (PB_DS_NATIVE_KEY_TYPE_C_DEC::native_key(r_key));
+ }
+ };
+
+#undef PB_DS_BASE_C_DEC
+
+#undef PB_DS_NATIVE_KEY_TYPE_C_DEC
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_REGRESSION_TEST_NATIVE_TYPE_TRAIT_HPP
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
new file mode 100644
index 000000000..d971c1fb2
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
@@ -0,0 +1,124 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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 node_update_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_NODE_UPDATOR_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_NODE_UPDATOR_TRAIT_HPP
+
+#include <ext/pb_ds/assoc_container.hpp>
+#include <common_type/assoc/detail/tree_supports_order_statistics.hpp>
+#include <common_type/assoc/detail/trie_supports_order_statistics.hpp>
+#include <common_type/assoc/detail/trie_supports_prefix_search.hpp>
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ template<typename Cntnr, class Tag>
+ struct regression_test_node_update_traits
+ {
+ enum
+ {
+ order_statistics = false,
+ prefix_search = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_node_update_traits<
+ Cntnr,
+ __gnu_pbds::pat_trie_tag>
+ {
+ enum
+ {
+ order_statistics =
+ trie_supports_order_statistics<Cntnr>::value,
+ prefix_search =
+ trie_supports_prefix_search<Cntnr>::value
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_node_update_traits<
+ Cntnr,
+ __gnu_pbds::rb_tree_tag>
+ {
+ enum
+ {
+ order_statistics =
+ tree_supports_order_statistics<Cntnr>::value,
+ prefix_search = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_node_update_traits<
+ Cntnr,
+ __gnu_pbds::splay_tree_tag>
+ {
+ enum
+ {
+ order_statistics =
+ tree_supports_order_statistics<Cntnr>::value,
+ prefix_search = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_node_update_traits<
+ Cntnr,
+ __gnu_pbds::ov_tree_tag>
+ {
+ enum
+ {
+ order_statistics =
+ tree_supports_order_statistics<Cntnr>::value,
+ prefix_search = false
+ };
+ };
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_REGRESSION_TEST_NODE_UPDATOR_TRAIT_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
new file mode 100644
index 000000000..51e012775
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_RESIZE_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_RESIZE_TRAIT_HPP
+
+#include <ext/pb_ds/assoc_container.hpp>
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ template<typename Cntnr, class Tag>
+ struct regression_test_resize_traits
+ {
+ enum
+ {
+ value = false
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_hash_resize_traits
+ {
+ enum
+ {
+ value = Cntnr::resize_policy::external_size_access
+ };
+ };
+
+ template<typename Cntnr>
+ struct regression_test_resize_traits<
+ Cntnr,
+ __gnu_pbds::cc_hash_tag> : public regression_test_hash_resize_traits<
+ Cntnr>
+ { };
+
+ template<typename Cntnr>
+ struct regression_test_resize_traits<
+ Cntnr,
+ __gnu_pbds::gp_hash_tag> : public regression_test_hash_resize_traits<
+ Cntnr>
+ { };
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #ifndef PB_DS_REGRESSION_TEST_RESIZE_TRAIT_HPP
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
new file mode 100644
index 000000000..7a1a2e305
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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 to_string.hpp
+ * Contains classes for transforming stuff to strings.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_TO_STRING_HPP
+#define PB_DS_REGRESSION_TEST_TO_STRING_HPP
+
+#include <regression/basic_type.hpp>
+#include <string>
+
+namespace __gnu_pbds
+{
+
+ namespace test
+ {
+
+ namespace detail
+ {
+
+ std::string
+ to_string(const basic_type& r_t)
+ {
+ return (r_t);
+ }
+
+ std::string
+ to_string(const std::string& r_t)
+ {
+ return (r_t);
+ }
+
+ template<typename Hd, class Tl>
+ std::string
+ to_string(const std::pair<Hd, Tl>&r_t)
+ {
+ std::ostringstream ret;
+
+ ret << to_string(r_t.first) << " " << to_string(r_t.second);
+
+ return (ret.str());
+ }
+
+ } // namespace detail
+
+ } // namespace test
+
+} // namespace __gnu_pbds
+
+#endif // #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
new file mode 100644
index 000000000..a4a768e5e
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
@@ -0,0 +1,206 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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 trait.hpp
+ * 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>
+#include <regression/trait/assoc/resize_trait.hpp>
+#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>
+
+namespace __gnu_pbds
+{
+namespace test
+{
+namespace detail
+{
+
+#define PB_DS_CLASS_T_DEC \
+ template<typename Cntnr>
+
+#define PB_DS_CLASS_C_DEC \
+ regression_test_traits<Cntnr>
+
+#define PB_DS_TYPE_TRAITS_C_DEC \
+ regression_test_type_traits<Cntnr>
+
+#define PB_DS_NATIVE_TYPE_TRAITS_C_DEC \
+ native_type_traits<typename PB_DS_TYPE_TRAITS_C_DEC::key_type, \
+ typename PB_DS_TYPE_TRAITS_C_DEC::mapped_type, \
+ typename Cntnr::allocator_type>
+
+#define PB_DS_RESIZE_TRAITS_C_DEC \
+ regression_test_resize_traits<Cntnr, typename Cntnr::container_category>
+
+#define PB_DS_SET_LOADS_TRAITS_C_DEC \
+ regression_test_get_set_loacontainer_traits<Cntnr, \
+ typename Cntnr::container_category>
+
+#define PB_DS_SET_LOAD_TRAITS_C_DEC \
+ regression_test_get_set_load_traits<Cntnr,typename Cntnr::container_category>
+
+#define PB_DS_NODE_UPDATOR_TRAITS_C_DEC \
+ regression_test_node_update_traits<Cntnr, typename Cntnr::container_category>
+
+ template<typename Cntnr>
+ struct regression_test_traits : private PB_DS_TYPE_TRAITS_C_DEC,
+ private PB_DS_NATIVE_TYPE_TRAITS_C_DEC,
+ private PB_DS_RESIZE_TRAITS_C_DEC,
+ private PB_DS_NODE_UPDATOR_TRAITS_C_DEC,
+ private PB_DS_SET_LOADS_TRAITS_C_DEC,
+ private PB_DS_SET_LOAD_TRAITS_C_DEC
+ {
+ private:
+ typedef PB_DS_NATIVE_TYPE_TRAITS_C_DEC native_type_traits_base;
+ typedef PB_DS_TYPE_TRAITS_C_DEC type_traits_base;
+
+ public:
+ 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::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,
+ get_set_loads = PB_DS_SET_LOADS_TRAITS_C_DEC::value,
+ get_set_load = PB_DS_SET_LOAD_TRAITS_C_DEC::value,
+ order_statistics = PB_DS_NODE_UPDATOR_TRAITS_C_DEC::order_statistics,
+ prefix_search = PB_DS_NODE_UPDATOR_TRAITS_C_DEC::prefix_search
+ };
+
+ template<typename T>
+ struct erase_if_fn : public regression_test_erase_if_fn<T>
+ { };
+
+ static size_t
+ erase_if(native_type& r_native_c)
+ {
+ 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())
+ if (erase_if_fn()(*it))
+ {
+ ++num_ersd;
+ r_native_c.erase(it);
+ it = r_native_c.begin();
+ }
+ else
+ ++it;
+ return num_ersd;
+ }
+
+ static void
+ print_container(const Cntnr& r_c, std::ostream& r_os)
+ { PB_DS_TYPE_TRAITS_C_DEC::print_container(r_c, r_os); }
+
+ template<typename Gen>
+ static key_type
+ generate_key(Gen& r_gen, size_t max)
+ { return PB_DS_TYPE_TRAITS_C_DEC::generate_key(r_gen, max); }
+
+ template<typename Gen>
+ static value_type
+ generate_value(Gen& r_gen, size_t max)
+ { return PB_DS_TYPE_TRAITS_C_DEC::generate_value(r_gen, max); }
+
+ static const_key_reference
+ extract_key(const_reference r_val)
+ { return type_traits_base::extract_key(r_val); }
+
+ static native_key_type
+ native_key(const_key_reference r_key)
+ { return native_type_traits_base::native_key(r_key); }
+
+ static native_value_type
+ native_value(const_reference r_val)
+ { return native_type_traits_base::native_value(r_val); }
+
+ static const native_key_type&
+ extract_native_key(const native_value_type& r_val)
+ { return native_type_traits_base::extract_key(r_val); }
+
+ static bool
+ cmp(const_reference r_val, const native_value_type& r_native_val)
+ { return val_to_string(r_val) == native_val_to_string(r_native_val); }
+
+ static std::string
+ val_to_string(const_reference r_val)
+ { return to_string(r_val); }
+
+ static std::string
+ key_to_string(const_key_reference r_key)
+ { return to_string(r_key); }
+
+ static std::string
+ native_val_to_string(const native_value_type& r_native_val)
+ { return to_string(r_native_val); }
+
+ static bool
+ prefix_match(const_key_reference r_key, const std::string& r_native_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);
+ }
+ };
+
+#undef PB_DS_TYPE_TRAITS_C_DEC
+#undef PB_DS_NATIVE_TYPE_TRAITS_C_DEC
+#undef PB_DS_RESIZE_TRAITS_C_DEC
+#undef PB_DS_SET_LOADS_TRAITS_C_DEC
+#undef PB_DS_SET_LOAD_TRAITS_C_DEC
+#undef PB_DS_NODE_UPDATOR_TRAITS_C_DEC
+#undef PB_DS_CLASS_T_DEC
+#undef PB_DS_CLASS_C_DEC
+
+} // namespace detail
+} // namespace test
+} // namespace __gnu_pbds
+
+#endif
diff --git a/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
new file mode 100644
index 000000000..c7ce5f7a3
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
@@ -0,0 +1,111 @@
+// -*- C++ -*-
+
+// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 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 type_trait.hpp
+ * Contains traits for a random regression test
+ * for a specific container type.
+ */
+
+#ifndef PB_DS_REGRESSION_TEST_TYPE_TRAIT_HPP
+#define PB_DS_REGRESSION_TEST_TYPE_TRAIT_HPP
+
+#include <regression/basic_type.hpp>
+
+namespace __gnu_pbds
+{
+ namespace test
+ {
+ namespace detail
+ {
+ template<typename Cntnr>
+ struct regression_test_type_traits
+ {
+ typedef Cntnr cntnr;
+ 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 cntnr::mapped_type mapped_type;
+ typedef typename cntnr::const_mapped_reference const_mapped_reference;
+
+ template<typename Gen>
+ static key_type
+ generate_key(Gen& r_gen, size_t max)
+ { return basic_type(r_gen, max); }
+
+ template<typename Gen>
+ static value_type
+ generate_value(Gen& r_gen, size_t max)
+ { return generate_value(r_gen, max, value_type()); }
+
+ static const_key_reference
+ extract_key(const_reference r_val)
+ { return extract_key_imp(r_val); }
+
+ private:
+ typedef typename cntnr::allocator_type::template rebind<basic_type>::other
+ basic_type_rebind;
+
+ typedef typename basic_type_rebind::const_reference basic_type_const_reference;
+
+ typedef typename cntnr::allocator_type::template rebind<std::pair<const basic_type, basic_type> >::other pair_type_rebind;
+ typedef typename pair_type_rebind::const_reference pair_type_const_reference;
+
+ template<typename Gen>
+ static value_type
+ generate_value(Gen& r_gen, size_t max, __gnu_pbds::null_mapped_type)
+ { return basic_type(r_gen, max); }
+
+ template<typename Gen>
+ static value_type
+ generate_value(Gen& r_gen, size_t max, basic_type)
+ { return basic_type(r_gen, max); }
+
+ template<typename Gen>
+ static value_type
+ generate_value(Gen& gen, size_t max,
+ std::pair<const basic_type, basic_type>)
+ { return std::make_pair(basic_type(gen, max), basic_type(gen, max)); }
+
+ static const_key_reference
+ extract_key_imp(basic_type_const_reference r_val)
+ { return r_val; }
+
+ static const_key_reference
+ extract_key_imp(pair_type_const_reference r_val)
+ { return r_val.first; }
+ };
+ } // namespace detail
+ } // namespace test
+} // namespace __gnu_pbds
+
+#endif