forked from boostorg/unordered
Add compile_map tests
This commit is contained in:
@@ -35,9 +35,12 @@ namespace boost {
|
|||||||
using init_type = std::pair<Key, T>;
|
using init_type = std::pair<Key, T>;
|
||||||
using moved_type = std::pair<Key&&, T&&>;
|
using moved_type = std::pair<Key&&, T&&>;
|
||||||
using value_type = std::pair<Key const, T>;
|
using value_type = std::pair<Key const, T>;
|
||||||
static Key const& extract(init_type const& kv) { return kv.first; }
|
|
||||||
static Key const& extract(value_type const& kv) { return kv.first; }
|
template <class K, class V>
|
||||||
static Key const& extract(moved_type const& kv) { return kv.first; }
|
static K const& extract(std::pair<K, V> const& kv)
|
||||||
|
{
|
||||||
|
return kv.first;
|
||||||
|
}
|
||||||
|
|
||||||
static moved_type move(value_type& x)
|
static moved_type move(value_type& x)
|
||||||
{
|
{
|
||||||
@@ -57,6 +60,7 @@ namespace boost {
|
|||||||
using mapped_type = T;
|
using mapped_type = T;
|
||||||
using value_type = typename map_types::value_type;
|
using value_type = typename map_types::value_type;
|
||||||
using size_type = std::size_t;
|
using size_type = std::size_t;
|
||||||
|
using difference_type = std::ptrdiff_t;
|
||||||
using hasher = Hash;
|
using hasher = Hash;
|
||||||
using key_equal = KeyEqual;
|
using key_equal = KeyEqual;
|
||||||
using allocator_type = Allocator;
|
using allocator_type = Allocator;
|
||||||
@@ -79,6 +83,11 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unordered_flat_map(size_type n, hasher const& h, allocator_type const& a)
|
||||||
|
: unordered_flat_map(n, h, key_equal(), a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
explicit unordered_flat_map(allocator_type const& a)
|
explicit unordered_flat_map(allocator_type const& a)
|
||||||
: unordered_flat_map(0, a)
|
: unordered_flat_map(0, a)
|
||||||
{
|
{
|
||||||
@@ -93,6 +102,20 @@ namespace boost {
|
|||||||
this->insert(first, last);
|
this->insert(first, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
unordered_flat_map(
|
||||||
|
Iterator first, Iterator last, size_type n, allocator_type const& a)
|
||||||
|
: unordered_flat_map(first, last, n, hasher(), key_equal(), a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
unordered_flat_map(Iterator first, Iterator last, size_type n,
|
||||||
|
hasher const& h, allocator_type const& a)
|
||||||
|
: unordered_flat_map(first, last, n, h, key_equal(), a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
unordered_flat_map(unordered_flat_map const& other) : table_(other.table_)
|
unordered_flat_map(unordered_flat_map const& other) : table_(other.table_)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -124,6 +147,18 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unordered_flat_map(std::initializer_list<value_type> init, size_type n,
|
||||||
|
allocator_type const& a)
|
||||||
|
: unordered_flat_map(init, n, hasher(), key_equal(), a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
unordered_flat_map(std::initializer_list<value_type> init, size_type n,
|
||||||
|
hasher const& h, allocator_type const& a)
|
||||||
|
: unordered_flat_map(init, n, h, key_equal(), a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
~unordered_flat_map() = default;
|
~unordered_flat_map() = default;
|
||||||
|
|
||||||
unordered_flat_map& operator=(unordered_flat_map const& other)
|
unordered_flat_map& operator=(unordered_flat_map const& other)
|
||||||
@@ -165,6 +200,8 @@ namespace boost {
|
|||||||
|
|
||||||
size_type size() const noexcept { return table_.size(); }
|
size_type size() const noexcept { return table_.size(); }
|
||||||
|
|
||||||
|
size_type max_size() const noexcept { return table_.max_size(); }
|
||||||
|
|
||||||
/// Modifiers
|
/// Modifiers
|
||||||
///
|
///
|
||||||
|
|
||||||
@@ -302,6 +339,22 @@ namespace boost {
|
|||||||
table_.swap(rhs.table_);
|
table_.swap(rhs.table_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class H2, class P2>
|
||||||
|
void merge(
|
||||||
|
unordered_flat_map<key_type, mapped_type, H2, P2, allocator_type>&
|
||||||
|
source)
|
||||||
|
{
|
||||||
|
(void)source;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class H2, class P2>
|
||||||
|
void merge(
|
||||||
|
unordered_flat_map<key_type, mapped_type, H2, P2, allocator_type>&&
|
||||||
|
source)
|
||||||
|
{
|
||||||
|
(void)source;
|
||||||
|
}
|
||||||
|
|
||||||
/// Lookup
|
/// Lookup
|
||||||
///
|
///
|
||||||
|
|
||||||
|
@@ -105,6 +105,7 @@ rule build_foa ( name )
|
|||||||
build_foa fwd_set_test ;
|
build_foa fwd_set_test ;
|
||||||
build_foa fwd_map_test ;
|
build_foa fwd_map_test ;
|
||||||
build_foa compile_set ;
|
build_foa compile_set ;
|
||||||
|
build_foa compile_map ;
|
||||||
build_foa constructor_tests ;
|
build_foa constructor_tests ;
|
||||||
build_foa copy_tests ;
|
build_foa copy_tests ;
|
||||||
build_foa move_tests ;
|
build_foa move_tests ;
|
||||||
|
@@ -8,7 +8,12 @@
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
#include "../helpers/prefix.hpp"
|
#include "../helpers/prefix.hpp"
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
#include <boost/unordered/unordered_flat_map.hpp>
|
||||||
|
#include <boost/unordered/detail/implementation.hpp>
|
||||||
|
#else
|
||||||
#include <boost/unordered_map.hpp>
|
#include <boost/unordered_map.hpp>
|
||||||
|
#endif
|
||||||
#include "../helpers/postfix.hpp"
|
#include "../helpers/postfix.hpp"
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@@ -17,7 +22,28 @@
|
|||||||
#include "./compile_tests.hpp"
|
#include "./compile_tests.hpp"
|
||||||
|
|
||||||
// Explicit instantiation to catch compile-time errors
|
// Explicit instantiation to catch compile-time errors
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
|
||||||
|
// emulates what was already done for previous tests but without leaking to
|
||||||
|
// the detail namespace
|
||||||
|
//
|
||||||
|
template <typename K, typename T, typename H, typename P, typename A>
|
||||||
|
class instantiate_flat_map
|
||||||
|
{
|
||||||
|
typedef boost::unordered_flat_map<K, T, H, P, A> container;
|
||||||
|
container x;
|
||||||
|
};
|
||||||
|
|
||||||
|
template class instantiate_flat_map<int, int, boost::hash<int>,
|
||||||
|
std::equal_to<int>, test::minimal::allocator<int> >;
|
||||||
|
|
||||||
|
template class instantiate_flat_map<test::minimal::assignable const,
|
||||||
|
test::minimal::default_assignable const,
|
||||||
|
test::minimal::hash<test::minimal::assignable>,
|
||||||
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
|
test::minimal::allocator<int> >;
|
||||||
|
|
||||||
|
#else
|
||||||
#define INSTANTIATE(type) \
|
#define INSTANTIATE(type) \
|
||||||
template class boost::unordered::detail::instantiate_##type
|
template class boost::unordered::detail::instantiate_##type
|
||||||
|
|
||||||
@@ -35,6 +61,7 @@ INSTANTIATE(multimap)<test::minimal::assignable, test::minimal::assignable,
|
|||||||
test::minimal::hash<test::minimal::assignable>,
|
test::minimal::hash<test::minimal::assignable>,
|
||||||
test::minimal::equal_to<test::minimal::assignable>,
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
test::minimal::allocator<int> >;
|
test::minimal::allocator<int> >;
|
||||||
|
#endif
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST (test0) {
|
UNORDERED_AUTO_TEST (test0) {
|
||||||
test::minimal::constructor_param x;
|
test::minimal::constructor_param x;
|
||||||
@@ -45,6 +72,19 @@ UNORDERED_AUTO_TEST (test0) {
|
|||||||
|
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<int, int> int_map;
|
||||||
|
|
||||||
|
boost::unordered_flat_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
|
test::minimal::cxx11_allocator<std::pair<int const, int> > >
|
||||||
|
int_map2;
|
||||||
|
|
||||||
|
boost::unordered_flat_map<test::minimal::assignable,
|
||||||
|
test::minimal::assignable, test::minimal::hash<test::minimal::assignable>,
|
||||||
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
|
test::minimal::allocator<value_type> >
|
||||||
|
map;
|
||||||
|
#else
|
||||||
boost::unordered_map<int, int> int_map;
|
boost::unordered_map<int, int> int_map;
|
||||||
|
|
||||||
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
@@ -56,11 +96,13 @@ UNORDERED_AUTO_TEST (test0) {
|
|||||||
test::minimal::equal_to<test::minimal::assignable>,
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
test::minimal::allocator<value_type> >
|
test::minimal::allocator<value_type> >
|
||||||
map;
|
map;
|
||||||
|
#endif
|
||||||
|
|
||||||
container_test(int_map, std::pair<int const, int>(0, 0));
|
container_test(int_map, std::pair<int const, int>(0, 0));
|
||||||
container_test(int_map2, std::pair<int const, int>(0, 0));
|
container_test(int_map2, std::pair<int const, int>(0, 0));
|
||||||
container_test(map, value);
|
container_test(map, value);
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
||||||
|
|
||||||
boost::unordered_multimap<int, int> int_multimap;
|
boost::unordered_multimap<int, int> int_multimap;
|
||||||
@@ -78,6 +120,7 @@ UNORDERED_AUTO_TEST (test0) {
|
|||||||
container_test(int_multimap, std::pair<int const, int>(0, 0));
|
container_test(int_multimap, std::pair<int const, int>(0, 0));
|
||||||
container_test(int_multimap2, std::pair<int const, int>(0, 0));
|
container_test(int_multimap2, std::pair<int const, int>(0, 0));
|
||||||
container_test(multimap, value);
|
container_test(multimap, value);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST (equality_tests) {
|
UNORDERED_AUTO_TEST (equality_tests) {
|
||||||
@@ -85,6 +128,22 @@ UNORDERED_AUTO_TEST (equality_tests) {
|
|||||||
test::minimal::copy_constructible_equality_comparable>
|
test::minimal::copy_constructible_equality_comparable>
|
||||||
value_type;
|
value_type;
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<int, int> int_map;
|
||||||
|
|
||||||
|
boost::unordered_flat_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
|
test::minimal::cxx11_allocator<std::pair<int const, int> > >
|
||||||
|
int_map2;
|
||||||
|
|
||||||
|
boost::unordered_flat_map<
|
||||||
|
test::minimal::copy_constructible_equality_comparable,
|
||||||
|
test::minimal::copy_constructible_equality_comparable,
|
||||||
|
test::minimal::hash<test::minimal::copy_constructible_equality_comparable>,
|
||||||
|
test::minimal::equal_to<
|
||||||
|
test::minimal::copy_constructible_equality_comparable>,
|
||||||
|
test::minimal::allocator<value_type> >
|
||||||
|
map;
|
||||||
|
#else
|
||||||
boost::unordered_map<int, int> int_map;
|
boost::unordered_map<int, int> int_map;
|
||||||
|
|
||||||
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
@@ -98,11 +157,13 @@ UNORDERED_AUTO_TEST (equality_tests) {
|
|||||||
test::minimal::copy_constructible_equality_comparable>,
|
test::minimal::copy_constructible_equality_comparable>,
|
||||||
test::minimal::allocator<value_type> >
|
test::minimal::allocator<value_type> >
|
||||||
map;
|
map;
|
||||||
|
#endif
|
||||||
|
|
||||||
equality_test(int_map);
|
equality_test(int_map);
|
||||||
equality_test(int_map2);
|
equality_test(int_map2);
|
||||||
equality_test(map);
|
equality_test(map);
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
boost::unordered_multimap<int, int> int_multimap;
|
boost::unordered_multimap<int, int> int_multimap;
|
||||||
|
|
||||||
boost::unordered_multimap<int, int, boost::hash<int>, std::equal_to<int>,
|
boost::unordered_multimap<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
@@ -121,6 +182,7 @@ UNORDERED_AUTO_TEST (equality_tests) {
|
|||||||
equality_test(int_multimap);
|
equality_test(int_multimap);
|
||||||
equality_test(int_multimap2);
|
equality_test(int_multimap2);
|
||||||
equality_test(multimap);
|
equality_test(multimap);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST (test1) {
|
UNORDERED_AUTO_TEST (test1) {
|
||||||
@@ -131,11 +193,19 @@ UNORDERED_AUTO_TEST (test1) {
|
|||||||
|
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<int, int> map;
|
||||||
|
|
||||||
|
boost::unordered_flat_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
|
test::minimal::cxx11_allocator<std::pair<int const, int> > >
|
||||||
|
map2;
|
||||||
|
#else
|
||||||
boost::unordered_map<int, int> map;
|
boost::unordered_map<int, int> map;
|
||||||
|
|
||||||
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>,
|
||||||
test::minimal::cxx11_allocator<std::pair<int const, int> > >
|
test::minimal::cxx11_allocator<std::pair<int const, int> > >
|
||||||
map2;
|
map2;
|
||||||
|
#endif
|
||||||
|
|
||||||
unordered_unique_test(map, map_value);
|
unordered_unique_test(map, map_value);
|
||||||
unordered_map_test(map, value, value);
|
unordered_map_test(map, value, value);
|
||||||
@@ -147,6 +217,7 @@ UNORDERED_AUTO_TEST (test1) {
|
|||||||
unordered_copyable_test(map2, value, map_value, hash, equal_to);
|
unordered_copyable_test(map2, value, map_value, hash, equal_to);
|
||||||
unordered_map_functions(map2, value, value);
|
unordered_map_functions(map2, value, value);
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
||||||
|
|
||||||
boost::unordered_multimap<int, int> multimap;
|
boost::unordered_multimap<int, int> multimap;
|
||||||
@@ -162,6 +233,7 @@ UNORDERED_AUTO_TEST (test1) {
|
|||||||
unordered_equivalent_test(multimap2, map_value);
|
unordered_equivalent_test(multimap2, map_value);
|
||||||
unordered_map_test(multimap2, value, value);
|
unordered_map_test(multimap2, value, value);
|
||||||
unordered_copyable_test(multimap2, value, map_value, hash, equal_to);
|
unordered_copyable_test(multimap2, value, map_value, hash, equal_to);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST (test2) {
|
UNORDERED_AUTO_TEST (test2) {
|
||||||
@@ -178,28 +250,46 @@ UNORDERED_AUTO_TEST (test2) {
|
|||||||
|
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n";
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<test::minimal::assignable,
|
||||||
|
test::minimal::assignable, test::minimal::hash<test::minimal::assignable>,
|
||||||
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
|
test::minimal::allocator<map_value_type> >
|
||||||
|
map;
|
||||||
|
#else
|
||||||
boost::unordered_map<test::minimal::assignable, test::minimal::assignable,
|
boost::unordered_map<test::minimal::assignable, test::minimal::assignable,
|
||||||
test::minimal::hash<test::minimal::assignable>,
|
test::minimal::hash<test::minimal::assignable>,
|
||||||
test::minimal::equal_to<test::minimal::assignable>,
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
test::minimal::allocator<map_value_type> >
|
test::minimal::allocator<map_value_type> >
|
||||||
map;
|
map;
|
||||||
|
#endif
|
||||||
|
|
||||||
unordered_unique_test(map, map_value);
|
unordered_unique_test(map, map_value);
|
||||||
unordered_map_test(map, assignable, assignable);
|
unordered_map_test(map, assignable, assignable);
|
||||||
unordered_copyable_test(map, assignable, map_value, hash, equal_to);
|
unordered_copyable_test(map, assignable, map_value, hash, equal_to);
|
||||||
unordered_map_member_test(map, map_value);
|
unordered_map_member_test(map, map_value);
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<test::minimal::assignable,
|
||||||
|
test::minimal::default_assignable,
|
||||||
|
test::minimal::hash<test::minimal::assignable>,
|
||||||
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
|
test::minimal::allocator<map_value_type> >
|
||||||
|
map2;
|
||||||
|
#else
|
||||||
boost::unordered_map<test::minimal::assignable,
|
boost::unordered_map<test::minimal::assignable,
|
||||||
test::minimal::default_assignable,
|
test::minimal::default_assignable,
|
||||||
test::minimal::hash<test::minimal::assignable>,
|
test::minimal::hash<test::minimal::assignable>,
|
||||||
test::minimal::equal_to<test::minimal::assignable>,
|
test::minimal::equal_to<test::minimal::assignable>,
|
||||||
test::minimal::allocator<map_value_type> >
|
test::minimal::allocator<map_value_type> >
|
||||||
map2;
|
map2;
|
||||||
|
#endif
|
||||||
|
|
||||||
test::minimal::default_assignable default_assignable;
|
test::minimal::default_assignable default_assignable;
|
||||||
|
|
||||||
unordered_map_functions(map2, assignable, default_assignable);
|
unordered_map_functions(map2, assignable, default_assignable);
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n";
|
||||||
|
|
||||||
boost::unordered_multimap<test::minimal::assignable,
|
boost::unordered_multimap<test::minimal::assignable,
|
||||||
@@ -212,6 +302,7 @@ UNORDERED_AUTO_TEST (test2) {
|
|||||||
unordered_map_test(multimap, assignable, assignable);
|
unordered_map_test(multimap, assignable, assignable);
|
||||||
unordered_copyable_test(multimap, assignable, map_value, hash, equal_to);
|
unordered_copyable_test(multimap, assignable, map_value, hash, equal_to);
|
||||||
unordered_map_member_test(multimap, map_value);
|
unordered_map_member_test(multimap, map_value);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for ambiguity when using key convertible from iterator
|
// Test for ambiguity when using key convertible from iterator
|
||||||
@@ -232,6 +323,11 @@ std::size_t hash_value(lwg2059_key x)
|
|||||||
bool operator==(lwg2059_key x, lwg2059_key y) { return x.value == y.value; }
|
bool operator==(lwg2059_key x, lwg2059_key y) { return x.value == y.value; }
|
||||||
|
|
||||||
UNORDERED_AUTO_TEST (lwg2059) {
|
UNORDERED_AUTO_TEST (lwg2059) {
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
boost::unordered_flat_map<lwg2059_key, int> x;
|
||||||
|
x.emplace(lwg2059_key(10), 5);
|
||||||
|
x.erase(x.begin());
|
||||||
|
#else
|
||||||
{
|
{
|
||||||
boost::unordered_map<lwg2059_key, int> x;
|
boost::unordered_map<lwg2059_key, int> x;
|
||||||
x.emplace(lwg2059_key(10), 5);
|
x.emplace(lwg2059_key(10), 5);
|
||||||
@@ -243,6 +339,7 @@ UNORDERED_AUTO_TEST (lwg2059) {
|
|||||||
x.emplace(lwg2059_key(10), 5);
|
x.emplace(lwg2059_key(10), 5);
|
||||||
x.erase(x.begin());
|
x.erase(x.begin());
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
RUN_TESTS()
|
RUN_TESTS()
|
||||||
|
@@ -360,23 +360,29 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
|
|
||||||
typedef typename X::iterator iterator;
|
typedef typename X::iterator iterator;
|
||||||
typedef typename X::const_iterator const_iterator;
|
typedef typename X::const_iterator const_iterator;
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
typedef typename X::local_iterator local_iterator;
|
typedef typename X::local_iterator local_iterator;
|
||||||
typedef typename X::const_local_iterator const_local_iterator;
|
typedef typename X::const_local_iterator const_local_iterator;
|
||||||
|
#endif
|
||||||
typedef typename std::iterator_traits<iterator>::pointer iterator_pointer;
|
typedef typename std::iterator_traits<iterator>::pointer iterator_pointer;
|
||||||
typedef typename std::iterator_traits<const_iterator>::pointer
|
typedef typename std::iterator_traits<const_iterator>::pointer
|
||||||
const_iterator_pointer;
|
const_iterator_pointer;
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
typedef typename std::iterator_traits<local_iterator>::pointer
|
typedef typename std::iterator_traits<local_iterator>::pointer
|
||||||
local_iterator_pointer;
|
local_iterator_pointer;
|
||||||
typedef typename std::iterator_traits<const_local_iterator>::pointer
|
typedef typename std::iterator_traits<const_local_iterator>::pointer
|
||||||
const_local_iterator_pointer;
|
const_local_iterator_pointer;
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<value_type*, iterator_pointer>::value));
|
BOOST_STATIC_ASSERT((boost::is_same<value_type*, iterator_pointer>::value));
|
||||||
BOOST_STATIC_ASSERT(
|
BOOST_STATIC_ASSERT(
|
||||||
(boost::is_same<value_type const*, const_iterator_pointer>::value));
|
(boost::is_same<value_type const*, const_iterator_pointer>::value));
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
BOOST_STATIC_ASSERT(
|
BOOST_STATIC_ASSERT(
|
||||||
(boost::is_same<value_type*, local_iterator_pointer>::value));
|
(boost::is_same<value_type*, local_iterator_pointer>::value));
|
||||||
BOOST_STATIC_ASSERT(
|
BOOST_STATIC_ASSERT(
|
||||||
(boost::is_same<value_type const*, const_local_iterator_pointer>::value));
|
(boost::is_same<value_type const*, const_local_iterator_pointer>::value));
|
||||||
|
#endif
|
||||||
|
|
||||||
// pointer_traits<iterator>
|
// pointer_traits<iterator>
|
||||||
|
|
||||||
@@ -396,6 +402,7 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
|
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
|
||||||
typename boost::pointer_traits<const_iterator>::difference_type>::value));
|
typename boost::pointer_traits<const_iterator>::difference_type>::value));
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
// pointer_traits<local_iterator>
|
// pointer_traits<local_iterator>
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<local_iterator,
|
BOOST_STATIC_ASSERT((boost::is_same<local_iterator,
|
||||||
@@ -424,6 +431,7 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
BOOST_STATIC_ASSERT((boost::is_same<T, node_mapped_type>::value));
|
BOOST_STATIC_ASSERT((boost::is_same<T, node_mapped_type>::value));
|
||||||
// Superfluous,but just to make sure.
|
// Superfluous,but just to make sure.
|
||||||
BOOST_STATIC_ASSERT((!boost::is_const<node_key_type>::value));
|
BOOST_STATIC_ASSERT((!boost::is_const<node_key_type>::value));
|
||||||
|
#endif
|
||||||
|
|
||||||
// Calling functions
|
// Calling functions
|
||||||
|
|
||||||
@@ -442,8 +450,12 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
r.emplace(k_lvalue, v_lvalue);
|
r.emplace(k_lvalue, v_lvalue);
|
||||||
r.emplace(rvalue(k), rvalue(v));
|
r.emplace(rvalue(k), rvalue(v));
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
r.emplace(std::piecewise_construct, std::make_tuple(k), std::make_tuple(v));
|
||||||
|
#else
|
||||||
r.emplace(boost::unordered::piecewise_construct, boost::make_tuple(k),
|
r.emplace(boost::unordered::piecewise_construct, boost::make_tuple(k),
|
||||||
boost::make_tuple(v));
|
boost::make_tuple(v));
|
||||||
|
#endif
|
||||||
|
|
||||||
// Emplace with hint
|
// Emplace with hint
|
||||||
|
|
||||||
@@ -451,9 +463,15 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
r.emplace_hint(r.begin(), k_lvalue, v_lvalue);
|
r.emplace_hint(r.begin(), k_lvalue, v_lvalue);
|
||||||
r.emplace_hint(r.begin(), rvalue(k), rvalue(v));
|
r.emplace_hint(r.begin(), rvalue(k), rvalue(v));
|
||||||
|
|
||||||
|
#ifdef BOOST_UNORDERED_FOA_TESTS
|
||||||
|
r.emplace_hint(r.begin(), std::piecewise_construct, std::make_tuple(k),
|
||||||
|
std::make_tuple(v));
|
||||||
|
#else
|
||||||
r.emplace_hint(r.begin(), boost::unordered::piecewise_construct,
|
r.emplace_hint(r.begin(), boost::unordered::piecewise_construct,
|
||||||
boost::make_tuple(k), boost::make_tuple(v));
|
boost::make_tuple(k), boost::make_tuple(v));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_UNORDERED_FOA_TESTS
|
||||||
// Extract
|
// Extract
|
||||||
|
|
||||||
test::check_return_type<node_type>::equals(r.extract(r.begin()));
|
test::check_return_type<node_type>::equals(r.extract(r.begin()));
|
||||||
@@ -476,6 +494,7 @@ void unordered_map_test(X& r, Key const& k, T const& v)
|
|||||||
node_type n = r.extract(r.begin());
|
node_type n = r.extract(r.begin());
|
||||||
test::check_return_type<node_key_type>::equals_ref(n.key());
|
test::check_return_type<node_key_type>::equals_ref(n.key());
|
||||||
test::check_return_type<node_mapped_type>::equals_ref(n.mapped());
|
test::check_return_type<node_mapped_type>::equals_ref(n.mapped());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class X> void equality_test(X& r)
|
template <class X> void equality_test(X& r)
|
||||||
|
Reference in New Issue
Block a user