diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/util/regression/trait/assoc | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/util/regression/trait/assoc')
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 |