Implement full support for non-pointer types in custom allocators. This is for the unordered containers only. This work still needs to be done on the sequence containers.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@184635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
70342b99e2
commit
7a6b7cedcb
@ -33,7 +33,6 @@ template <class _NodePtr>
|
||||
struct __hash_node_base
|
||||
{
|
||||
typedef __hash_node_base __first_node;
|
||||
// typedef _NodePtr pointer;
|
||||
|
||||
_NodePtr __next_;
|
||||
|
||||
@ -111,7 +110,7 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return __node_->__value_;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return _VSTD::addressof(__node_->__value_);}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__node_->__value_);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_iterator& operator++()
|
||||
@ -189,7 +188,7 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return __node_->__value_;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return _VSTD::addressof(__node_->__value_);}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__node_->__value_);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_const_iterator& operator++()
|
||||
@ -255,7 +254,7 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return __node_->__value_;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return &__node_->__value_;}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__node_->__value_);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_local_iterator& operator++()
|
||||
@ -345,7 +344,7 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return __node_->__value_;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return &__node_->__value_;}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__node_->__value_);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_const_local_iterator& operator++()
|
||||
@ -505,8 +504,15 @@ public:
|
||||
__node_allocator;
|
||||
typedef allocator_traits<__node_allocator> __node_traits;
|
||||
typedef typename __node_traits::pointer __node_pointer;
|
||||
typedef typename __node_traits::const_pointer __node_const_pointer;
|
||||
typedef typename __node_traits::pointer __node_const_pointer;
|
||||
typedef __hash_node_base<__node_pointer> __first_node;
|
||||
typedef typename pointer_traits<__node_pointer>::template
|
||||
#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
||||
rebind<__first_node>
|
||||
#else
|
||||
rebind<__first_node>::other
|
||||
#endif
|
||||
__node_base_pointer;
|
||||
|
||||
private:
|
||||
|
||||
@ -558,9 +564,9 @@ public:
|
||||
|
||||
public:
|
||||
typedef __hash_iterator<__node_pointer> iterator;
|
||||
typedef __hash_const_iterator<__node_const_pointer> const_iterator;
|
||||
typedef __hash_const_iterator<__node_pointer> const_iterator;
|
||||
typedef __hash_local_iterator<__node_pointer> local_iterator;
|
||||
typedef __hash_const_local_iterator<__node_const_pointer> const_local_iterator;
|
||||
typedef __hash_const_local_iterator<__node_pointer> const_local_iterator;
|
||||
|
||||
__hash_table()
|
||||
_NOEXCEPT_(
|
||||
@ -706,7 +712,7 @@ public:
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
size_type max_bucket_count() const _NOEXCEPT
|
||||
{return __bucket_list_.get_deleter().__alloc().max_size();}
|
||||
{return __pointer_alloc_traits::max_size(__bucket_list_.get_deleter().__alloc());}
|
||||
size_type bucket_size(size_type __n) const;
|
||||
_LIBCPP_INLINE_VISIBILITY float load_factor() const _NOEXCEPT
|
||||
{
|
||||
@ -807,6 +813,9 @@ private:
|
||||
|
||||
void __deallocate(__node_pointer __np) _NOEXCEPT;
|
||||
__node_pointer __detach() _NOEXCEPT;
|
||||
|
||||
template <class, class, class, class, class> friend class _LIBCPP_TYPE_VIS unordered_map;
|
||||
template <class, class, class, class, class> friend class _LIBCPP_TYPE_VIS unordered_multimap;
|
||||
};
|
||||
|
||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||
@ -893,7 +902,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u)
|
||||
if (size() > 0)
|
||||
{
|
||||
__bucket_list_[__constrain_hash(__p1_.first().__next_->__hash_, bucket_count())] =
|
||||
static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
__u.__p1_.first().__next_ = nullptr;
|
||||
__u.size() = 0;
|
||||
}
|
||||
@ -917,7 +926,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u,
|
||||
__p1_.first().__next_ = __u.__p1_.first().__next_;
|
||||
__u.__p1_.first().__next_ = nullptr;
|
||||
__bucket_list_[__constrain_hash(__p1_.first().__next_->__hash_, bucket_count())] =
|
||||
static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
size() = __u.size();
|
||||
__u.size() = 0;
|
||||
}
|
||||
@ -1014,7 +1023,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(
|
||||
if (size() > 0)
|
||||
{
|
||||
__bucket_list_[__constrain_hash(__p1_.first().__next_->__hash_, bucket_count())] =
|
||||
static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
__u.__p1_.first().__next_ = nullptr;
|
||||
__u.size() = 0;
|
||||
}
|
||||
@ -1236,7 +1245,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_unique(__node_pointer __
|
||||
__node_pointer __pn = __bucket_list_[__chash];
|
||||
if (__pn == nullptr)
|
||||
{
|
||||
__pn = static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
__pn = static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
__nd->__next_ = __pn->__next_;
|
||||
__pn->__next_ = __nd;
|
||||
// fix up __bucket_list_
|
||||
@ -1274,7 +1283,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(__node_pointer __c
|
||||
__node_pointer __pn = __bucket_list_[__chash];
|
||||
if (__pn == nullptr)
|
||||
{
|
||||
__pn = static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
__pn = static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
__cp->__next_ = __pn->__next_;
|
||||
__pn->__next_ = __cp;
|
||||
// fix up __bucket_list_
|
||||
@ -1322,7 +1331,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(
|
||||
{
|
||||
if (__p != end() && key_eq()(*__p, __cp->__value_))
|
||||
{
|
||||
__node_pointer __np = const_cast<__node_pointer>(__p.__node_);
|
||||
__node_pointer __np = __p.__node_;
|
||||
__cp->__hash_ = __np->__hash_;
|
||||
size_type __bc = bucket_count();
|
||||
if (size()+1 > __bc * max_load_factor() || __bc == 0)
|
||||
@ -1380,7 +1389,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__insert_unique(const value_type& __x)
|
||||
__node_pointer __pn = __bucket_list_[__chash];
|
||||
if (__pn == nullptr)
|
||||
{
|
||||
__pn = static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
__pn = static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
__h->__next_ = __pn->__next_;
|
||||
__pn->__next_ = __h.get();
|
||||
// fix up __bucket_list_
|
||||
@ -1542,7 +1551,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __nbc)
|
||||
{
|
||||
for (size_type __i = 0; __i < __nbc; ++__i)
|
||||
__bucket_list_[__i] = nullptr;
|
||||
__node_pointer __pp(static_cast<__node_pointer>(_VSTD::addressof(__p1_.first())));
|
||||
__node_pointer __pp(static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first())));
|
||||
__node_pointer __cp = __pp->__next_;
|
||||
if (__cp != nullptr)
|
||||
{
|
||||
@ -1700,7 +1709,7 @@ template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||
typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
|
||||
__hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __p)
|
||||
{
|
||||
__node_pointer __np = const_cast<__node_pointer>(__p.__node_);
|
||||
__node_pointer __np = __p.__node_;
|
||||
iterator __r(__np);
|
||||
++__r;
|
||||
remove(__p);
|
||||
@ -1717,7 +1726,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __first,
|
||||
++__first;
|
||||
erase(__p);
|
||||
}
|
||||
__node_pointer __np = const_cast<__node_pointer>(__last.__node_);
|
||||
__node_pointer __np = __last.__node_;
|
||||
return iterator (__np);
|
||||
}
|
||||
|
||||
@ -1757,7 +1766,7 @@ typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder
|
||||
__hash_table<_Tp, _Hash, _Equal, _Alloc>::remove(const_iterator __p) _NOEXCEPT
|
||||
{
|
||||
// current node
|
||||
__node_pointer __cn = const_cast<__node_pointer>(__p.__node_);
|
||||
__node_pointer __cn = __p.__node_;
|
||||
size_type __bc = bucket_count();
|
||||
size_t __chash = __constrain_hash(__cn->__hash_, __bc);
|
||||
// find previous node
|
||||
@ -1767,7 +1776,8 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::remove(const_iterator __p) _NOEXCEPT
|
||||
// Fix up __bucket_list_
|
||||
// if __pn is not in same bucket (before begin is not in same bucket) &&
|
||||
// if __cn->__next_ is not in same bucket (nullptr is not in same bucket)
|
||||
if (__pn == _VSTD::addressof(__p1_.first()) || __constrain_hash(__pn->__hash_, __bc) != __chash)
|
||||
if (__pn == static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()))
|
||||
|| __constrain_hash(__pn->__hash_, __bc) != __chash)
|
||||
{
|
||||
if (__cn->__next_ == nullptr || __constrain_hash(__cn->__next_->__hash_, __bc) != __chash)
|
||||
__bucket_list_[__chash] = nullptr;
|
||||
@ -1907,10 +1917,10 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::swap(__hash_table& __u)
|
||||
__p3_.swap(__u.__p3_);
|
||||
if (size() > 0)
|
||||
__bucket_list_[__constrain_hash(__p1_.first().__next_->__hash_, bucket_count())] =
|
||||
static_cast<__node_pointer>(_VSTD::addressof(__p1_.first()));
|
||||
static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__p1_.first()));
|
||||
if (__u.size() > 0)
|
||||
__u.__bucket_list_[__constrain_hash(__u.__p1_.first().__next_->__hash_, __u.bucket_count())] =
|
||||
static_cast<__node_pointer>(_VSTD::addressof(__u.__p1_.first()));
|
||||
static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(__u.__p1_.first()));
|
||||
}
|
||||
|
||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||
|
@ -492,8 +492,8 @@ class __hash_map_node_destructor
|
||||
public:
|
||||
typedef typename __alloc_traits::pointer pointer;
|
||||
private:
|
||||
typedef typename value_type::first_type first_type;
|
||||
typedef typename value_type::second_type second_type;
|
||||
typedef typename value_type::value_type::first_type first_type;
|
||||
typedef typename value_type::value_type::second_type second_type;
|
||||
|
||||
allocator_type& __na_;
|
||||
|
||||
@ -535,9 +535,9 @@ public:
|
||||
void operator()(pointer __p) _NOEXCEPT
|
||||
{
|
||||
if (__second_constructed)
|
||||
__alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.second));
|
||||
__alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.second));
|
||||
if (__first_constructed)
|
||||
__alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.first));
|
||||
__alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.first));
|
||||
if (__p)
|
||||
__alloc_traits::deallocate(__na_, __p, 1);
|
||||
}
|
||||
@ -549,8 +549,8 @@ class _LIBCPP_TYPE_VIS __hash_map_iterator
|
||||
_HashIterator __i_;
|
||||
|
||||
typedef pointer_traits<typename _HashIterator::pointer> __pointer_traits;
|
||||
typedef const typename _HashIterator::value_type::first_type key_type;
|
||||
typedef typename _HashIterator::value_type::second_type mapped_type;
|
||||
typedef const typename _HashIterator::value_type::value_type::first_type key_type;
|
||||
typedef typename _HashIterator::value_type::value_type::second_type mapped_type;
|
||||
public:
|
||||
typedef forward_iterator_tag iterator_category;
|
||||
typedef pair<key_type, mapped_type> value_type;
|
||||
@ -571,9 +571,9 @@ public:
|
||||
__hash_map_iterator(_HashIterator __i) _NOEXCEPT : __i_(__i) {}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return *operator->();}
|
||||
reference operator*() const {return __i_->__cc;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return (pointer)__i_.operator->();}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_map_iterator& operator++() {++__i_; return *this;}
|
||||
@ -605,8 +605,8 @@ class _LIBCPP_TYPE_VIS __hash_map_const_iterator
|
||||
_HashIterator __i_;
|
||||
|
||||
typedef pointer_traits<typename _HashIterator::pointer> __pointer_traits;
|
||||
typedef const typename _HashIterator::value_type::first_type key_type;
|
||||
typedef typename _HashIterator::value_type::second_type mapped_type;
|
||||
typedef const typename _HashIterator::value_type::value_type::first_type key_type;
|
||||
typedef typename _HashIterator::value_type::value_type::second_type mapped_type;
|
||||
public:
|
||||
typedef forward_iterator_tag iterator_category;
|
||||
typedef pair<key_type, mapped_type> value_type;
|
||||
@ -632,9 +632,9 @@ public:
|
||||
: __i_(__i.__i_) {}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
reference operator*() const {return *operator->();}
|
||||
reference operator*() const {return __i_->__cc;}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
pointer operator->() const {return (pointer)__i_.operator->();}
|
||||
pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
__hash_map_const_iterator& operator++() {++__i_; return *this;}
|
||||
@ -671,11 +671,58 @@ public:
|
||||
typedef _Pred key_equal;
|
||||
typedef _Alloc allocator_type;
|
||||
typedef pair<const key_type, mapped_type> value_type;
|
||||
typedef pair<key_type, mapped_type> __nc_value_type;
|
||||
typedef value_type& reference;
|
||||
typedef const value_type& const_reference;
|
||||
|
||||
private:
|
||||
typedef pair<key_type, mapped_type> __value_type;
|
||||
#if __cplusplus >= 201103L
|
||||
union __value_type
|
||||
{
|
||||
typedef typename unordered_map::value_type value_type;
|
||||
typedef typename unordered_map::__nc_value_type __nc_value_type;
|
||||
value_type __cc;
|
||||
__nc_value_type __nc;
|
||||
|
||||
template <class ..._Args>
|
||||
__value_type(_Args&& ...__args)
|
||||
: __cc(std::forward<_Args>(__args)...) {}
|
||||
|
||||
__value_type(const __value_type& __v)
|
||||
: __cc(std::move(__v.__cc)) {}
|
||||
|
||||
__value_type(__value_type&& __v)
|
||||
: __nc(std::move(__v.__nc)) {}
|
||||
|
||||
__value_type& operator=(const __value_type& __v)
|
||||
{__nc = __v.__cc; return *this;}
|
||||
|
||||
__value_type& operator=(__value_type&& __v)
|
||||
{__nc = std::move(__v.__nc); return *this;}
|
||||
|
||||
~__value_type() {__cc.~value_type();}
|
||||
|
||||
operator const value_type& () const {return __cc;}
|
||||
};
|
||||
#else
|
||||
struct __value_type
|
||||
{
|
||||
typedef typename unordered_map::value_type value_type;
|
||||
value_type __cc;
|
||||
|
||||
__value_type() {}
|
||||
|
||||
template <class _A0>
|
||||
__value_type(const _A0& __a0)
|
||||
: __cc(__a0) {}
|
||||
|
||||
template <class _A0, class _A1>
|
||||
__value_type(const _A0& __a0, const _A1& __a1)
|
||||
: __cc(__a0, __a1) {}
|
||||
|
||||
operator const value_type& () const {return __cc;}
|
||||
};
|
||||
#endif
|
||||
typedef __unordered_map_hasher<key_type, mapped_type, hasher> __hasher;
|
||||
typedef __unordered_map_equal<key_type, mapped_type, key_equal> __key_equal;
|
||||
typedef typename allocator_traits<allocator_type>::template
|
||||
@ -750,7 +797,16 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
unordered_map& operator=(const unordered_map& __u)
|
||||
{
|
||||
#if __cplusplus >= 201103L
|
||||
__table_ = __u.__table_;
|
||||
#else
|
||||
__table_.clear();
|
||||
__table_.hash_function() = __u.__table_.hash_function();
|
||||
__table_.key_eq() = __u.__table_.key_eq();
|
||||
__table_.max_load_factor() = __u.__table_.max_load_factor();
|
||||
__table_.__copy_assign_alloc(__u.__table_);
|
||||
insert(__u.begin(), __u.end());
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
@ -1132,10 +1188,10 @@ unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0)
|
||||
{
|
||||
__node_allocator& __na = __table_.__node_alloc();
|
||||
__node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first),
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.first),
|
||||
_VSTD::forward<_A0>(__a0));
|
||||
__h.get_deleter().__first_constructed = true;
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
|
||||
__h.get_deleter().__second_constructed = true;
|
||||
return __h;
|
||||
}
|
||||
@ -1180,9 +1236,9 @@ unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(const key_type&
|
||||
{
|
||||
__node_allocator& __na = __table_.__node_alloc();
|
||||
__node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), __k);
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.first), __k);
|
||||
__h.get_deleter().__first_constructed = true;
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
|
||||
__h.get_deleter().__second_constructed = true;
|
||||
return _VSTD::move(__h);
|
||||
}
|
||||
@ -1304,11 +1360,58 @@ public:
|
||||
typedef _Pred key_equal;
|
||||
typedef _Alloc allocator_type;
|
||||
typedef pair<const key_type, mapped_type> value_type;
|
||||
typedef pair<key_type, mapped_type> __nc_value_type;
|
||||
typedef value_type& reference;
|
||||
typedef const value_type& const_reference;
|
||||
|
||||
private:
|
||||
typedef pair<key_type, mapped_type> __value_type;
|
||||
#if __cplusplus >= 201103L
|
||||
union __value_type
|
||||
{
|
||||
typedef typename unordered_multimap::value_type value_type;
|
||||
typedef typename unordered_multimap::__nc_value_type __nc_value_type;
|
||||
value_type __cc;
|
||||
__nc_value_type __nc;
|
||||
|
||||
template <class ..._Args>
|
||||
__value_type(_Args&& ...__args)
|
||||
: __cc(std::forward<_Args>(__args)...) {}
|
||||
|
||||
__value_type(const __value_type& __v)
|
||||
: __cc(std::move(__v.__cc)) {}
|
||||
|
||||
__value_type(__value_type&& __v)
|
||||
: __nc(std::move(__v.__nc)) {}
|
||||
|
||||
__value_type& operator=(const __value_type& __v)
|
||||
{__nc = __v.__cc; return *this;}
|
||||
|
||||
__value_type& operator=(__value_type&& __v)
|
||||
{__nc = std::move(__v.__nc); return *this;}
|
||||
|
||||
~__value_type() {__cc.~value_type();}
|
||||
|
||||
operator const value_type& () const {return __cc;}
|
||||
};
|
||||
#else
|
||||
struct __value_type
|
||||
{
|
||||
typedef typename unordered_multimap::value_type value_type;
|
||||
value_type __cc;
|
||||
|
||||
__value_type() {}
|
||||
|
||||
template <class _A0>
|
||||
__value_type(const _A0& __a0)
|
||||
: __cc(__a0) {}
|
||||
|
||||
template <class _A0, class _A1>
|
||||
__value_type(const _A0& __a0, const _A1& __a1)
|
||||
: __cc(__a0, __a1) {}
|
||||
|
||||
operator const value_type& () const {return __cc;}
|
||||
};
|
||||
#endif
|
||||
typedef __unordered_map_hasher<key_type, mapped_type, hasher> __hasher;
|
||||
typedef __unordered_map_equal<key_type, mapped_type, key_equal> __key_equal;
|
||||
typedef typename allocator_traits<allocator_type>::template
|
||||
@ -1382,7 +1485,16 @@ public:
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
unordered_multimap& operator=(const unordered_multimap& __u)
|
||||
{
|
||||
#if __cplusplus >= 201103L
|
||||
__table_ = __u.__table_;
|
||||
#else
|
||||
__table_.clear();
|
||||
__table_.hash_function() = __u.__table_.hash_function();
|
||||
__table_.key_eq() = __u.__table_.key_eq();
|
||||
__table_.max_load_factor() = __u.__table_.max_load_factor();
|
||||
__table_.__copy_assign_alloc(__u.__table_);
|
||||
insert(__u.begin(), __u.end());
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
@ -1754,10 +1866,10 @@ unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0
|
||||
{
|
||||
__node_allocator& __na = __table_.__node_alloc();
|
||||
__node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first),
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.first),
|
||||
_VSTD::forward<_A0>(__a0));
|
||||
__h.get_deleter().__first_constructed = true;
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
|
||||
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
|
||||
__h.get_deleter().__second_constructed = true;
|
||||
return __h;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ then
|
||||
RC_ProjectSourceVersion=1
|
||||
fi
|
||||
|
||||
EXTRA_FLAGS="-std=c++0x -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
|
||||
EXTRA_FLAGS="-std=c++11 -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
|
||||
-Wnewline-eof -Wpadded -Wmissing-prototypes -Wstrict-aliasing=2 \
|
||||
-Wstrict-overflow=4 "
|
||||
|
||||
@ -48,7 +48,7 @@ case $TRIPLE in
|
||||
SOEXT=dylib
|
||||
if [ "$MACOSX_DEPLOYMENT_TARGET" == "10.6" ]
|
||||
then
|
||||
EXTRA_FLAGS="-std=c++0x -U__STRICT_ANSI__"
|
||||
EXTRA_FLAGS="-std=c++11 -U__STRICT_ANSI__"
|
||||
LDSHARED_FLAGS="-o libc++.1.dylib \
|
||||
-dynamiclib -nodefaultlibs -current_version 1 \
|
||||
-compatibility_version 1 \
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -39,4 +41,25 @@ int main()
|
||||
for (size_t i = 0; i < 13; ++i)
|
||||
assert(c.bucket(i) == i % bc);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
size_t bc = c.bucket_count();
|
||||
assert(bc >= 5);
|
||||
for (size_t i = 0; i < 13; ++i)
|
||||
assert(c.bucket(i) == i % bc);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -46,4 +48,33 @@ int main()
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.bucket_count() >= 11);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.bucket_count() == 0);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.bucket_count() >= 11);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -41,4 +43,27 @@ int main()
|
||||
assert(c.bucket_size(3) == 1);
|
||||
assert(c.bucket_size(4) == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.bucket_size(0) == 0);
|
||||
assert(c.bucket_size(1) == 1);
|
||||
assert(c.bucket_size(2) == 1);
|
||||
assert(c.bucket_size(3) == 1);
|
||||
assert(c.bucket_size(4) == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -39,4 +41,25 @@ int main()
|
||||
assert(c.count(30) == 1);
|
||||
assert(c.count(5) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.count(30) == 1);
|
||||
assert(c.count(5) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -89,4 +91,73 @@ int main()
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c1(std::begin(a), std::end(a));
|
||||
const C c2;
|
||||
assert(!(c1 == c2));
|
||||
assert( (c1 != c2));
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c1(std::begin(a), std::end(a));
|
||||
const C c2 = c1;
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(std::begin(a), std::end(a));
|
||||
C c2 = c1;
|
||||
c2.rehash(30);
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
c2.insert(P(90, "ninety"));
|
||||
assert(!(c1 == c2));
|
||||
assert( (c1 != c2));
|
||||
c1.insert(P(90, "ninety"));
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -44,4 +46,30 @@ int main()
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
std::pair<I, I> r = c.equal_range(30);
|
||||
assert(std::distance(r.first, r.second) == 1);
|
||||
assert(r.first->first == 30);
|
||||
assert(r.first->second == "thirty");
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -44,4 +46,30 @@ int main()
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c(std::begin(a), std::end(a));
|
||||
std::pair<I, I> r = c.equal_range(30);
|
||||
assert(std::distance(r.first, r.second) == 1);
|
||||
assert(r.first->first == 30);
|
||||
assert(r.first->second == "thirty");
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -42,4 +44,28 @@ int main()
|
||||
i = c.find(5);
|
||||
assert(i == c.cend());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
C::const_iterator i = c.find(30);
|
||||
assert(i->first == 30);
|
||||
assert(i->second == "thirty");
|
||||
i = c.find(5);
|
||||
assert(i == c.cend());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -42,4 +44,28 @@ int main()
|
||||
i = c.find(5);
|
||||
assert(i == c.end());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c(std::begin(a), std::end(a));
|
||||
C::iterator i = c.find(30);
|
||||
assert(i->first == 30);
|
||||
assert(i->second == "thirty");
|
||||
i = c.find(5);
|
||||
assert(i == c.end());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -64,4 +66,46 @@ int main()
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::const_iterator i;
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.size() == 4);
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::iterator i;
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.size() == 4);
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::const_iterator i;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <cassert>
|
||||
#include <cfloat>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -45,4 +47,31 @@ int main()
|
||||
const C c;
|
||||
assert(c.load_factor() == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.load_factor() == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -218,4 +220,202 @@ int main()
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.begin(b);
|
||||
I j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.begin(b);
|
||||
I j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.cbegin(b);
|
||||
I j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 5);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.cbegin(b);
|
||||
I j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -28,4 +30,14 @@ int main()
|
||||
const C c;
|
||||
assert(c.max_bucket_count() > 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.max_bucket_count() > 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -36,4 +38,22 @@ int main()
|
||||
c.max_load_factor(2.5);
|
||||
assert(c.max_load_factor() == 2.5);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c;
|
||||
assert(c.max_load_factor() == 1);
|
||||
c.max_load_factor(2.5);
|
||||
assert(c.max_load_factor() == 2.5);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -18,10 +18,19 @@
|
||||
#include <unordered_map>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::unordered_map<int, int> u;
|
||||
assert(u.max_size() > 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
std::unordered_map<int, int, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, int>>> u;
|
||||
assert(u.max_size() > 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,7 +19,10 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
void test(const std::unordered_map<int, std::string>& c)
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
template <class C>
|
||||
void test(const C& c)
|
||||
{
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
@ -56,4 +59,33 @@ int main()
|
||||
assert(c.bucket_count() == 31);
|
||||
test(c);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
test(c);
|
||||
assert(c.bucket_count() >= 5);
|
||||
c.rehash(3);
|
||||
assert(c.bucket_count() == 5);
|
||||
test(c);
|
||||
c.max_load_factor(2);
|
||||
c.rehash(3);
|
||||
assert(c.bucket_count() == 3);
|
||||
test(c);
|
||||
c.rehash(31);
|
||||
assert(c.bucket_count() == 31);
|
||||
test(c);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,7 +19,10 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
void test(const std::unordered_map<int, std::string>& c)
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
template <class C>
|
||||
void test(const C& c)
|
||||
{
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
@ -56,4 +59,33 @@ int main()
|
||||
assert(c.bucket_count() >= 16);
|
||||
test(c);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
test(c);
|
||||
assert(c.bucket_count() >= 5);
|
||||
c.reserve(3);
|
||||
assert(c.bucket_count() == 5);
|
||||
test(c);
|
||||
c.max_load_factor(2);
|
||||
c.reserve(3);
|
||||
assert(c.bucket_count() >= 2);
|
||||
test(c);
|
||||
c.reserve(31);
|
||||
assert(c.bucket_count() >= 16);
|
||||
test(c);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../test_compare.h"
|
||||
#include "../../test_hash.h"
|
||||
#include "../../test_allocator.h"
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -386,4 +387,186 @@ int main()
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.at(10) == "ten");
|
||||
assert(c1.at(20) == "twenty");
|
||||
assert(c1.at(30) == "thirty");
|
||||
assert(c1.at(40) == "fourty");
|
||||
assert(c1.at(50) == "fifty");
|
||||
assert(c1.at(60) == "sixty");
|
||||
assert(c1.at(70) == "seventy");
|
||||
assert(c1.at(80) == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 5);
|
||||
assert(c2.size() == 4);
|
||||
assert(c2.at(1) == "one");
|
||||
assert(c2.at(2) == "two");
|
||||
assert(c2.at(3) == "three");
|
||||
assert(c2.at(4) == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.at(10) == "ten");
|
||||
assert(c1.at(20) == "twenty");
|
||||
assert(c1.at(30) == "thirty");
|
||||
assert(c1.at(40) == "fourty");
|
||||
assert(c1.at(50) == "fifty");
|
||||
assert(c1.at(60) == "sixty");
|
||||
assert(c1.at(70) == "seventy");
|
||||
assert(c1.at(80) == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 5);
|
||||
assert(c2.size() == 4);
|
||||
assert(c2.at(1) == "one");
|
||||
assert(c2.at(2) == "two");
|
||||
assert(c2.at(3) == "three");
|
||||
assert(c2.at(4) == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -31,6 +31,8 @@
|
||||
#include <unordered_map>
|
||||
#include <type_traits>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -48,4 +50,22 @@ int main()
|
||||
static_assert((std::is_same<C::size_type, std::size_t>::value), "");
|
||||
static_assert((std::is_same<C::difference_type, std::ptrdiff_t>::value), "");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<char, short, std::hash<char>, std::equal_to<char>,
|
||||
min_allocator<std::pair<const char, short>>> C;
|
||||
static_assert((std::is_same<C::key_type, char>::value), "");
|
||||
static_assert((std::is_same<C::mapped_type, short>::value), "");
|
||||
static_assert((std::is_same<C::hasher, std::hash<C::key_type> >::value), "");
|
||||
static_assert((std::is_same<C::key_equal, std::equal_to<C::key_type> >::value), "");
|
||||
static_assert((std::is_same<C::allocator_type, min_allocator<C::value_type> >::value), "");
|
||||
static_assert((std::is_same<C::value_type, std::pair<const C::key_type, C::mapped_type> >::value), "");
|
||||
static_assert((std::is_same<C::reference, C::value_type&>::value), "");
|
||||
static_assert((std::is_same<C::const_reference, const C::value_type&>::value), "");
|
||||
static_assert((std::is_same<C::pointer, min_pointer<C::value_type>>::value), "");
|
||||
static_assert((std::is_same<C::const_pointer, min_pointer<const C::value_type>>::value), "");
|
||||
static_assert((std::is_same<C::size_type, std::size_t>::value), "");
|
||||
static_assert((std::is_same<C::difference_type, std::ptrdiff_t>::value), "");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(min_allocator<std::pair<const NotConstructible, NotConstructible> >{});
|
||||
assert(c.bucket_count() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -116,4 +117,51 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(a, a + 2,
|
||||
7,
|
||||
test_hash<std::hash<int> >(2),
|
||||
test_compare<std::equal_to<int> >(3),
|
||||
A()
|
||||
);
|
||||
c = c0;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A());
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -58,5 +59,39 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c = {
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
c = {
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -164,5 +165,53 @@ int main()
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c0.size() == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(a, a + 2,
|
||||
7,
|
||||
test_hash<std::hash<int> >(2),
|
||||
test_compare<std::equal_to<int> >(3),
|
||||
A()
|
||||
);
|
||||
c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A());
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c0.size() == 0);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -106,4 +107,45 @@ int main()
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = c0;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -65,4 +66,45 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c(c0, min_allocator<std::pair<const int, std::string> >());
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c;
|
||||
assert(c.bucket_count() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -58,5 +59,38 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c = {
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -60,5 +61,40 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -61,5 +62,41 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -63,5 +64,42 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -64,5 +65,43 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -104,5 +105,84 @@ int main()
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -109,5 +110,48 @@ int main()
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef min_allocator<std::pair<const int, std::string>> A;
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(std::move(c0), A());
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A());
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -62,4 +63,39 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])));
|
||||
assert(c.bucket_count() >= 5);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -64,4 +65,41 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
10
|
||||
);
|
||||
assert(c.bucket_count() == 11);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -66,4 +67,42 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -67,4 +68,43 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -69,4 +70,44 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c = 7;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(7);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -46,4 +47,27 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(7,
|
||||
test_hash<std::hash<NotConstructible> >(8)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -47,4 +48,28 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(7,
|
||||
test_hash<std::hash<NotConstructible> >(8),
|
||||
test_compare<std::equal_to<NotConstructible> >(9)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -48,4 +49,29 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(7,
|
||||
test_hash<std::hash<NotConstructible> >(8),
|
||||
test_compare<std::equal_to<NotConstructible> >(9),
|
||||
min_allocator<std::pair<const NotConstructible, NotConstructible> >()
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../MoveOnly.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -75,4 +76,59 @@ int main()
|
||||
}
|
||||
assert(c.size() == 4);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.size() == 4);
|
||||
c.at(1) = "ONE";
|
||||
assert(c.at(1) == "ONE");
|
||||
try
|
||||
{
|
||||
c.at(11) = "eleven";
|
||||
assert(false);
|
||||
}
|
||||
catch (std::out_of_range&)
|
||||
{
|
||||
}
|
||||
assert(c.size() == 4);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
try
|
||||
{
|
||||
c.at(11);
|
||||
assert(false);
|
||||
}
|
||||
catch (std::out_of_range&)
|
||||
{
|
||||
}
|
||||
assert(c.size() == 4);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../MoveOnly.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -65,4 +66,50 @@ int main()
|
||||
assert(c.at(11) == "eleven");
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.size() == 4);
|
||||
c[1] = "ONE";
|
||||
assert(c.at(1) == "ONE");
|
||||
c[11] = "eleven";
|
||||
assert(c.size() == 5);
|
||||
assert(c.at(11) == "eleven");
|
||||
}
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
{
|
||||
typedef std::unordered_map<MoveOnly, std::string, std::hash<MoveOnly>, std::equal_to<MoveOnly>,
|
||||
min_allocator<std::pair<const MoveOnly, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.size() == 4);
|
||||
c[1] = "ONE";
|
||||
assert(c.at(1) == "ONE");
|
||||
c[11] = "eleven";
|
||||
assert(c.size() == 5);
|
||||
assert(c.at(11) == "eleven");
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -386,4 +387,186 @@ int main()
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
swap(c1, c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
swap(c1, c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.at(10) == "ten");
|
||||
assert(c1.at(20) == "twenty");
|
||||
assert(c1.at(30) == "thirty");
|
||||
assert(c1.at(40) == "fourty");
|
||||
assert(c1.at(50) == "fifty");
|
||||
assert(c1.at(60) == "sixty");
|
||||
assert(c1.at(70) == "seventy");
|
||||
assert(c1.at(80) == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
swap(c1, c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 5);
|
||||
assert(c2.size() == 4);
|
||||
assert(c2.at(1) == "one");
|
||||
assert(c2.at(2) == "two");
|
||||
assert(c2.at(3) == "three");
|
||||
assert(c2.at(4) == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
swap(c1, c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.at(10) == "ten");
|
||||
assert(c1.at(20) == "twenty");
|
||||
assert(c1.at(30) == "thirty");
|
||||
assert(c1.at(40) == "fourty");
|
||||
assert(c1.at(50) == "fifty");
|
||||
assert(c1.at(60) == "sixty");
|
||||
assert(c1.at(70) == "seventy");
|
||||
assert(c1.at(80) == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 5);
|
||||
assert(c2.size() == 4);
|
||||
assert(c2.at(1) == "one");
|
||||
assert(c2.at(2) == "two");
|
||||
assert(c2.at(3) == "three");
|
||||
assert(c2.at(4) == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -37,4 +39,23 @@ int main()
|
||||
c.clear();
|
||||
assert(c.size() == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
c.clear();
|
||||
assert(c.size() == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../Emplaceable.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -47,5 +48,31 @@ int main()
|
||||
assert(r.first->first == 5);
|
||||
assert(r.first->second == Emplaceable(6, 7));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, Emplaceable, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, Emplaceable>>> C;
|
||||
typedef std::pair<C::iterator, bool> R;
|
||||
C c;
|
||||
R r = c.emplace(3);
|
||||
assert(r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3);
|
||||
assert(r.first->second == Emplaceable());
|
||||
|
||||
r = c.emplace(std::pair<const int, Emplaceable>(4, Emplaceable(5, 6)));
|
||||
assert(r.second);
|
||||
assert(c.size() == 2);
|
||||
assert(r.first->first == 4);
|
||||
assert(r.first->second == Emplaceable(5, 6));
|
||||
|
||||
r = c.emplace(std::piecewise_construct, std::forward_as_tuple(5),
|
||||
std::forward_as_tuple(6, 7));
|
||||
assert(r.second);
|
||||
assert(c.size() == 3);
|
||||
assert(r.first->first == 5);
|
||||
assert(r.first->second == Emplaceable(6, 7));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../Emplaceable.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -45,5 +46,29 @@ int main()
|
||||
assert(r->first == 5);
|
||||
assert(r->second == Emplaceable(6, 7));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, Emplaceable, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, Emplaceable>>> C;
|
||||
typedef C::iterator R;
|
||||
C c;
|
||||
C::const_iterator e = c.end();
|
||||
R r = c.emplace_hint(e, 3);
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3);
|
||||
assert(r->second == Emplaceable());
|
||||
|
||||
r = c.emplace_hint(e, std::pair<const int, Emplaceable>(4, Emplaceable(5, 6)));
|
||||
assert(c.size() == 2);
|
||||
assert(r->first == 4);
|
||||
assert(r->second == Emplaceable(5, 6));
|
||||
|
||||
r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5),
|
||||
std::forward_as_tuple(6, 7));
|
||||
assert(c.size() == 3);
|
||||
assert(r->first == 5);
|
||||
assert(r->second == Emplaceable(6, 7));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -41,4 +43,27 @@ int main()
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
C::const_iterator i = c.find(2);
|
||||
C::iterator j = c.erase(i);
|
||||
assert(c.size() == 3);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -77,4 +79,63 @@ int main()
|
||||
assert(c.erase(3) == 0);
|
||||
assert(c.size() == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.erase(5) == 0);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
|
||||
assert(c.erase(2) == 1);
|
||||
assert(c.size() == 3);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
|
||||
assert(c.erase(2) == 0);
|
||||
assert(c.size() == 3);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
|
||||
assert(c.erase(4) == 1);
|
||||
assert(c.size() == 2);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
|
||||
assert(c.erase(4) == 0);
|
||||
assert(c.size() == 2);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
|
||||
assert(c.erase(1) == 1);
|
||||
assert(c.size() == 1);
|
||||
assert(c.at(3) == "three");
|
||||
|
||||
assert(c.erase(1) == 0);
|
||||
assert(c.size() == 1);
|
||||
assert(c.at(3) == "three");
|
||||
|
||||
assert(c.erase(3) == 1);
|
||||
assert(c.size() == 0);
|
||||
|
||||
assert(c.erase(3) == 0);
|
||||
assert(c.size() == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -56,4 +58,42 @@ int main()
|
||||
assert(c.size() == 0);
|
||||
assert(k == c.end());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
C::const_iterator i = c.find(2);
|
||||
C::const_iterator j = next(i, 1);
|
||||
C::iterator k = c.erase(i, i);
|
||||
assert(k == i);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
|
||||
k = c.erase(i, j);
|
||||
assert(c.size() == 3);
|
||||
assert(k == j);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
|
||||
k = c.erase(c.cbegin(), c.cend());
|
||||
assert(k == c.cend());
|
||||
assert(c.size() == 0);
|
||||
assert(k == c.end());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -18,6 +18,8 @@
|
||||
#include <unordered_map>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -49,4 +51,36 @@ int main()
|
||||
assert(r.first->first == 5.5);
|
||||
assert(r.first->second == 4);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>,
|
||||
min_allocator<std::pair<const double, int>>> C;
|
||||
typedef std::pair<C::iterator, bool> R;
|
||||
typedef C::value_type P;
|
||||
C c;
|
||||
R r = c.insert(P(3.5, 3));
|
||||
assert(r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3.5);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(3.5, 4));
|
||||
assert(!r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3.5);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(4.5, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 2);
|
||||
assert(r.first->first == 4.5);
|
||||
assert(r.first->second == 4);
|
||||
|
||||
r = c.insert(P(5.5, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 3);
|
||||
assert(r.first->first == 5.5);
|
||||
assert(r.first->second == 4);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -18,6 +18,8 @@
|
||||
#include <unordered_map>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -46,4 +48,33 @@ int main()
|
||||
assert(r->first == 5.5);
|
||||
assert(r->second == 4);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>,
|
||||
min_allocator<std::pair<const double, int>>> C;
|
||||
typedef C::iterator R;
|
||||
typedef C::value_type P;
|
||||
C c;
|
||||
C::const_iterator e = c.end();
|
||||
R r = c.insert(e, P(3.5, 3));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3.5);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(3.5, 4));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3.5);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(4.5, 4));
|
||||
assert(c.size() == 2);
|
||||
assert(r->first == 4.5);
|
||||
assert(r->second == 4);
|
||||
|
||||
r = c.insert(e, P(5.5, 4));
|
||||
assert(c.size() == 3);
|
||||
assert(r->first == 5.5);
|
||||
assert(r->second == 4);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../MoveOnly.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -78,4 +79,62 @@ int main()
|
||||
assert(r->second == 4);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>,
|
||||
min_allocator<std::pair<const double, int>>> C;
|
||||
typedef C::iterator R;
|
||||
typedef std::pair<double, short> P;
|
||||
C c;
|
||||
C::const_iterator e = c.end();
|
||||
R r = c.insert(e, P(3.5, 3));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3.5);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(3.5, 4));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3.5);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(4.5, 4));
|
||||
assert(c.size() == 2);
|
||||
assert(r->first == 4.5);
|
||||
assert(r->second == 4);
|
||||
|
||||
r = c.insert(e, P(5.5, 4));
|
||||
assert(c.size() == 3);
|
||||
assert(r->first == 5.5);
|
||||
assert(r->second == 4);
|
||||
}
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
{
|
||||
typedef std::unordered_map<MoveOnly, MoveOnly, std::hash<MoveOnly>, std::equal_to<MoveOnly>,
|
||||
min_allocator<std::pair<const MoveOnly, MoveOnly>>> C;
|
||||
typedef C::iterator R;
|
||||
typedef std::pair<MoveOnly, MoveOnly> P;
|
||||
C c;
|
||||
C::const_iterator e = c.end();
|
||||
R r = c.insert(e, P(3, 3));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(3, 4));
|
||||
assert(c.size() == 1);
|
||||
assert(r->first == 3);
|
||||
assert(r->second == 3);
|
||||
|
||||
r = c.insert(e, P(4, 4));
|
||||
assert(c.size() == 2);
|
||||
assert(r->first == 4);
|
||||
assert(r->second == 4);
|
||||
|
||||
r = c.insert(e, P(5, 4));
|
||||
assert(c.size() == 3);
|
||||
assert(r->first == 5);
|
||||
assert(r->second == 4);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "test_iterators.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,5 +45,28 @@ int main()
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c;
|
||||
c.insert(
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
}
|
||||
);
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "test_iterators.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,27 @@ int main()
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c;
|
||||
c.insert(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])));
|
||||
assert(c.size() == 4);
|
||||
assert(c.at(1) == "one");
|
||||
assert(c.at(2) == "two");
|
||||
assert(c.at(3) == "three");
|
||||
assert(c.at(4) == "four");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "../../../MoveOnly.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -84,4 +85,68 @@ int main()
|
||||
assert(r.first->second == 4);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>,
|
||||
min_allocator<std::pair<const double, int>>> C;
|
||||
typedef std::pair<C::iterator, bool> R;
|
||||
typedef std::pair<double, short> P;
|
||||
C c;
|
||||
R r = c.insert(P(3.5, 3));
|
||||
assert(r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3.5);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(3.5, 4));
|
||||
assert(!r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3.5);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(4.5, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 2);
|
||||
assert(r.first->first == 4.5);
|
||||
assert(r.first->second == 4);
|
||||
|
||||
r = c.insert(P(5.5, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 3);
|
||||
assert(r.first->first == 5.5);
|
||||
assert(r.first->second == 4);
|
||||
}
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
{
|
||||
typedef std::unordered_map<MoveOnly, MoveOnly, std::hash<MoveOnly>, std::equal_to<MoveOnly>,
|
||||
min_allocator<std::pair<const MoveOnly, MoveOnly>>> C;
|
||||
typedef std::pair<C::iterator, bool> R;
|
||||
typedef std::pair<MoveOnly, MoveOnly> P;
|
||||
C c;
|
||||
R r = c.insert(P(3, 3));
|
||||
assert(r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(3, 4));
|
||||
assert(!r.second);
|
||||
assert(c.size() == 1);
|
||||
assert(r.first->first == 3);
|
||||
assert(r.first->second == 3);
|
||||
|
||||
r = c.insert(P(4, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 2);
|
||||
assert(r.first->first == 4);
|
||||
assert(r.first->second == 4);
|
||||
|
||||
r = c.insert(P(5, 4));
|
||||
assert(r.second);
|
||||
assert(c.size() == 3);
|
||||
assert(r.first->first == 5);
|
||||
assert(r.first->second == 4);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -39,4 +41,25 @@ int main()
|
||||
for (size_t i = 0; i < 13; ++i)
|
||||
assert(c.bucket(i) == i % bc);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
size_t bc = c.bucket_count();
|
||||
assert(bc >= 7);
|
||||
for (size_t i = 0; i < 13; ++i)
|
||||
assert(c.bucket(i) == i % bc);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -43,4 +45,29 @@ int main()
|
||||
assert(c.bucket_size(5) == 0);
|
||||
assert(c.bucket_size(6) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.bucket_size(0) == 0);
|
||||
assert(c.bucket_size(1) == 2);
|
||||
assert(c.bucket_size(2) == 2);
|
||||
assert(c.bucket_size(3) == 1);
|
||||
assert(c.bucket_size(4) == 1);
|
||||
assert(c.bucket_size(5) == 0);
|
||||
assert(c.bucket_size(6) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -42,4 +44,28 @@ int main()
|
||||
assert(c.count(50) == 3);
|
||||
assert(c.count(5) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fiftyA"),
|
||||
P(50, "fiftyB"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(c.count(30) == 1);
|
||||
assert(c.count(50) == 3);
|
||||
assert(c.count(5) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -98,4 +100,82 @@ int main()
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(20, "twenty 2"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fifty 2"),
|
||||
P(50, "fifty 3"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c1(std::begin(a), std::end(a));
|
||||
const C c2;
|
||||
assert(!(c1 == c2));
|
||||
assert( (c1 != c2));
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(20, "twenty 2"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fifty 2"),
|
||||
P(50, "fifty 3"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c1(std::begin(a), std::end(a));
|
||||
const C c2 = c1;
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(20, "twenty 2"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fifty 2"),
|
||||
P(50, "fifty 3"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(std::begin(a), std::end(a));
|
||||
C c2 = c1;
|
||||
c2.rehash(30);
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
c2.insert(P(90, "ninety"));
|
||||
assert(!(c1 == c2));
|
||||
assert( (c1 != c2));
|
||||
c1.insert(P(90, "ninety"));
|
||||
assert( (c1 == c2));
|
||||
assert(!(c1 != c2));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -55,4 +57,41 @@ int main()
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyB");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fiftyA"),
|
||||
P(50, "fiftyB"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
std::pair<I, I> r = c.equal_range(30);
|
||||
assert(std::distance(r.first, r.second) == 1);
|
||||
assert(r.first->first == 30);
|
||||
assert(r.first->second == "thirty");
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
r = c.equal_range(50);
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fifty");
|
||||
++r.first;
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyA");
|
||||
++r.first;
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyB");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -55,4 +57,41 @@ int main()
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyB");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(50, "fiftyA"),
|
||||
P(50, "fiftyB"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c(std::begin(a), std::end(a));
|
||||
std::pair<I, I> r = c.equal_range(30);
|
||||
assert(std::distance(r.first, r.second) == 1);
|
||||
assert(r.first->first == 30);
|
||||
assert(r.first->second == "thirty");
|
||||
r = c.equal_range(5);
|
||||
assert(std::distance(r.first, r.second) == 0);
|
||||
r = c.equal_range(50);
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fifty");
|
||||
++r.first;
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyA");
|
||||
++r.first;
|
||||
assert(r.first->first == 50);
|
||||
assert(r.first->second == "fiftyB");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -42,4 +44,28 @@ int main()
|
||||
i = c.find(5);
|
||||
assert(i == c.cend());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
C::const_iterator i = c.find(30);
|
||||
assert(i->first == 30);
|
||||
assert(i->second == "thirty");
|
||||
i = c.find(5);
|
||||
assert(i == c.cend());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -42,4 +44,28 @@ int main()
|
||||
i = c.find(5);
|
||||
assert(i == c.end());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c(std::begin(a), std::end(a));
|
||||
C::iterator i = c.find(30);
|
||||
assert(i->first == 30);
|
||||
assert(i->second == "thirty");
|
||||
i = c.find(5);
|
||||
assert(i == c.end());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -67,4 +69,49 @@ int main()
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::const_iterator i;
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.size() == 6);
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::iterator i;
|
||||
i = c.begin();
|
||||
i->second = "ONE";
|
||||
assert(i->second == "ONE");
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.size() == 6);
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
C::const_iterator i;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <cassert>
|
||||
#include <cfloat>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -45,4 +47,31 @@ int main()
|
||||
const C c;
|
||||
assert(c.load_factor() == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
const C c(std::begin(a), std::end(a));
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.load_factor() == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -282,4 +284,266 @@ int main()
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.begin(b);
|
||||
I j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(5);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(6);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.begin(b);
|
||||
I j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(5);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(6);
|
||||
i = c.begin(b);
|
||||
j = c.end(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.cbegin(b);
|
||||
I j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(5);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(6);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef C::const_local_iterator I;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
const C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
assert(c.bucket_count() >= 7);
|
||||
C::size_type b = c.bucket(0);
|
||||
I i = c.cbegin(b);
|
||||
I j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(1);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(2);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 2);
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(3);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
|
||||
b = c.bucket(4);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 1);
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
|
||||
b = c.bucket(5);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
|
||||
b = c.bucket(6);
|
||||
i = c.cbegin(b);
|
||||
j = c.cend(b);
|
||||
assert(std::distance(i, j) == 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -28,4 +30,14 @@ int main()
|
||||
const C c;
|
||||
assert(c.max_bucket_count() > 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef C::const_iterator I;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.max_bucket_count() > 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -36,4 +38,22 @@ int main()
|
||||
c.max_load_factor(2.5);
|
||||
assert(c.max_load_factor() == 2.5);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
const C c;
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c;
|
||||
assert(c.max_load_factor() == 1);
|
||||
c.max_load_factor(2.5);
|
||||
assert(c.max_load_factor() == 2.5);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -18,10 +18,19 @@
|
||||
#include <unordered_map>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::unordered_multimap<int, int> u;
|
||||
assert(u.max_size() > 0);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
std::unordered_multimap<int, int, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, int>>> u;
|
||||
assert(u.max_size() > 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -20,14 +20,16 @@
|
||||
#include <cassert>
|
||||
#include <cfloat>
|
||||
|
||||
void test(const std::unordered_multimap<int, std::string>& c)
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
template <class C>
|
||||
void test(const C& c)
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string> C;
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
typedef std::pair<typename C::const_iterator, typename C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
typename C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
@ -85,4 +87,33 @@ int main()
|
||||
assert(c.bucket_count() == 31);
|
||||
test(c);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
test(c);
|
||||
assert(c.bucket_count() >= 7);
|
||||
c.rehash(3);
|
||||
assert(c.bucket_count() == 7);
|
||||
test(c);
|
||||
c.max_load_factor(2);
|
||||
c.rehash(3);
|
||||
assert(c.bucket_count() == 3);
|
||||
test(c);
|
||||
c.rehash(31);
|
||||
assert(c.bucket_count() == 31);
|
||||
test(c);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -19,7 +19,10 @@
|
||||
#include <string>
|
||||
#include <cassert>
|
||||
|
||||
void test(const std::unordered_multimap<int, std::string>& c)
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
template <class C>
|
||||
void test(const C& c)
|
||||
{
|
||||
assert(c.size() == 6);
|
||||
assert(c.find(1)->second == "one");
|
||||
@ -58,4 +61,33 @@ int main()
|
||||
assert(c.bucket_count() >= 16);
|
||||
test(c);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
|
||||
min_allocator<std::pair<const int, std::string>>> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(a, a + sizeof(a)/sizeof(a[0]));
|
||||
test(c);
|
||||
assert(c.bucket_count() >= 7);
|
||||
c.reserve(3);
|
||||
assert(c.bucket_count() == 7);
|
||||
test(c);
|
||||
c.max_load_factor(2);
|
||||
c.reserve(3);
|
||||
assert(c.bucket_count() == 3);
|
||||
test(c);
|
||||
c.reserve(31);
|
||||
assert(c.bucket_count() >= 16);
|
||||
test(c);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include "../../test_hash.h"
|
||||
#include "../../test_allocator.h"
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -394,4 +396,190 @@ int main()
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.find(10)->second == "ten");
|
||||
assert(c1.find(20)->second == "twenty");
|
||||
assert(c1.find(30)->second == "thirty");
|
||||
assert(c1.find(40)->second == "fourty");
|
||||
assert(c1.find(50)->second == "fifty");
|
||||
assert(c1.find(60)->second == "sixty");
|
||||
assert(c1.find(70)->second == "seventy");
|
||||
assert(c1.find(80)->second == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() == 0);
|
||||
assert(c2.size() == 0);
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() == 0);
|
||||
assert(c1.size() == 0);
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 7);
|
||||
assert(c2.size() == 6);
|
||||
assert(c2.find(1)->second == "one");
|
||||
assert(next(c2.find(1))->second == "four");
|
||||
assert(c2.find(2)->second == "two");
|
||||
assert(next(c2.find(2))->second == "four");
|
||||
assert(c2.find(3)->second == "three");
|
||||
assert(c2.find(4)->second == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
{
|
||||
typedef test_hash<std::hash<int> > Hash;
|
||||
typedef test_compare<std::equal_to<int> > Compare;
|
||||
typedef min_allocator<std::pair<const int, std::string> > Alloc;
|
||||
typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a1[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
P a2[] =
|
||||
{
|
||||
P(10, "ten"),
|
||||
P(20, "twenty"),
|
||||
P(30, "thirty"),
|
||||
P(40, "fourty"),
|
||||
P(50, "fifty"),
|
||||
P(60, "sixty"),
|
||||
P(70, "seventy"),
|
||||
P(80, "eighty"),
|
||||
};
|
||||
C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
|
||||
C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
|
||||
c2.max_load_factor(2);
|
||||
c1.swap(c2);
|
||||
|
||||
assert(c1.bucket_count() >= 11);
|
||||
assert(c1.size() == 8);
|
||||
assert(c1.find(10)->second == "ten");
|
||||
assert(c1.find(20)->second == "twenty");
|
||||
assert(c1.find(30)->second == "thirty");
|
||||
assert(c1.find(40)->second == "fourty");
|
||||
assert(c1.find(50)->second == "fifty");
|
||||
assert(c1.find(60)->second == "sixty");
|
||||
assert(c1.find(70)->second == "seventy");
|
||||
assert(c1.find(80)->second == "eighty");
|
||||
assert(c1.hash_function() == Hash(2));
|
||||
assert(c1.key_eq() == Compare(2));
|
||||
assert(c1.get_allocator() == Alloc());
|
||||
assert(std::distance(c1.begin(), c1.end()) == c1.size());
|
||||
assert(std::distance(c1.cbegin(), c1.cend()) == c1.size());
|
||||
assert(c1.max_load_factor() == 2);
|
||||
|
||||
assert(c2.bucket_count() >= 7);
|
||||
assert(c2.size() == 6);
|
||||
assert(c2.find(1)->second == "one");
|
||||
assert(next(c2.find(1))->second == "four");
|
||||
assert(c2.find(2)->second == "two");
|
||||
assert(next(c2.find(2))->second == "four");
|
||||
assert(c2.find(3)->second == "three");
|
||||
assert(c2.find(4)->second == "four");
|
||||
assert(c2.hash_function() == Hash(1));
|
||||
assert(c2.key_eq() == Compare(1));
|
||||
assert(c2.get_allocator() == Alloc());
|
||||
assert(std::distance(c2.begin(), c2.end()) == c2.size());
|
||||
assert(std::distance(c2.cbegin(), c2.cend()) == c2.size());
|
||||
assert(c2.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -31,6 +31,8 @@
|
||||
#include <unordered_map>
|
||||
#include <type_traits>
|
||||
|
||||
#include "../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
@ -48,4 +50,22 @@ int main()
|
||||
static_assert((std::is_same<C::size_type, std::size_t>::value), "");
|
||||
static_assert((std::is_same<C::difference_type, std::ptrdiff_t>::value), "");
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<char, short, std::hash<char>, std::equal_to<char>,
|
||||
min_allocator<std::pair<const char, short>>> C;
|
||||
static_assert((std::is_same<C::key_type, char>::value), "");
|
||||
static_assert((std::is_same<C::mapped_type, short>::value), "");
|
||||
static_assert((std::is_same<C::hasher, std::hash<C::key_type> >::value), "");
|
||||
static_assert((std::is_same<C::key_equal, std::equal_to<C::key_type> >::value), "");
|
||||
static_assert((std::is_same<C::allocator_type, min_allocator<C::value_type> >::value), "");
|
||||
static_assert((std::is_same<C::value_type, std::pair<const C::key_type, C::mapped_type> >::value), "");
|
||||
static_assert((std::is_same<C::reference, C::value_type&>::value), "");
|
||||
static_assert((std::is_same<C::const_reference, const C::value_type&>::value), "");
|
||||
static_assert((std::is_same<C::pointer, min_pointer<C::value_type>>::value), "");
|
||||
static_assert((std::is_same<C::const_pointer, min_pointer<const C::value_type>>::value), "");
|
||||
static_assert((std::is_same<C::size_type, std::size_t>::value), "");
|
||||
static_assert((std::is_same<C::difference_type, std::ptrdiff_t>::value), "");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(min_allocator<std::pair<const NotConstructible, NotConstructible> >{});
|
||||
assert(c.bucket_count() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -144,4 +145,65 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(a, a + 2,
|
||||
7,
|
||||
test_hash<std::hash<int> >(2),
|
||||
test_compare<std::equal_to<int> >(3),
|
||||
A()
|
||||
);
|
||||
c = c0;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
C::const_iterator i = c.cbegin();
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
++i;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A());
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -83,5 +84,63 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c = {
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
c = {
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -222,5 +223,72 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef min_allocator<std::pair<const int, std::string> > A;
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(a, a + 2,
|
||||
7,
|
||||
test_hash<std::hash<int> >(2),
|
||||
test_compare<std::equal_to<int> >(3),
|
||||
A()
|
||||
);
|
||||
c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -134,4 +135,59 @@ int main()
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = c0;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
C::const_iterator i = c.cbegin();
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
++i;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -79,4 +80,59 @@ int main()
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c(c0, min_allocator<std::pair<const int, std::string> >());
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
C::const_iterator i = c.cbegin();
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
++i;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
++i;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(!c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c;
|
||||
assert(c.bucket_count() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -80,5 +81,60 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c = {
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -82,5 +83,62 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -83,5 +84,63 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -85,5 +86,64 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -86,5 +87,65 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
C c({
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
},
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -126,5 +127,106 @@ int main()
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 0);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const int, std::string> >()));
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
C c = std::move(c0);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -157,5 +158,71 @@ int main()
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::pair<int, std::string> P;
|
||||
typedef min_allocator<std::pair<const int, std::string>> A;
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
A
|
||||
> C;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c0(a, a + sizeof(a)/sizeof(a[0]),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
A()
|
||||
);
|
||||
C c(std::move(c0), A());
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
|
||||
assert(c0.empty());
|
||||
}
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -84,4 +85,61 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])));
|
||||
assert(c.bucket_count() >= 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -86,4 +87,63 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
10
|
||||
);
|
||||
assert(c.bucket_count() == 11);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -88,4 +89,64 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >());
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -89,4 +90,65 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9)
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -91,4 +92,66 @@ int main()
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<int, std::string,
|
||||
test_hash<std::hash<int> >,
|
||||
test_compare<std::equal_to<int> >,
|
||||
min_allocator<std::pair<const int, std::string> >
|
||||
> C;
|
||||
typedef std::pair<int, std::string> P;
|
||||
P a[] =
|
||||
{
|
||||
P(1, "one"),
|
||||
P(2, "two"),
|
||||
P(3, "three"),
|
||||
P(4, "four"),
|
||||
P(1, "four"),
|
||||
P(2, "four"),
|
||||
};
|
||||
C c(input_iterator<P*>(a), input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
|
||||
7,
|
||||
test_hash<std::hash<int> >(8),
|
||||
test_compare<std::equal_to<int> >(9),
|
||||
min_allocator<std::pair<const int, std::string> >()
|
||||
);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.size() == 6);
|
||||
typedef std::pair<C::const_iterator, C::const_iterator> Eq;
|
||||
Eq eq = c.equal_range(1);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
C::const_iterator i = eq.first;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "one");
|
||||
++i;
|
||||
assert(i->first == 1);
|
||||
assert(i->second == "four");
|
||||
eq = c.equal_range(2);
|
||||
assert(std::distance(eq.first, eq.second) == 2);
|
||||
i = eq.first;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "two");
|
||||
++i;
|
||||
assert(i->first == 2);
|
||||
assert(i->second == "four");
|
||||
|
||||
eq = c.equal_range(3);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 3);
|
||||
assert(i->second == "three");
|
||||
eq = c.equal_range(4);
|
||||
assert(std::distance(eq.first, eq.second) == 1);
|
||||
i = eq.first;
|
||||
assert(i->first == 4);
|
||||
assert(i->second == "four");
|
||||
assert(std::distance(c.begin(), c.end()) == c.size());
|
||||
assert(std::distance(c.cbegin(), c.cend()) == c.size());
|
||||
assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
|
||||
assert(c.max_load_factor() == 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c = 7;
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "../../../test_compare.h"
|
||||
#include "../../../test_hash.h"
|
||||
#include "../../../test_allocator.h"
|
||||
#include "../../../min_allocator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -44,4 +45,25 @@ int main()
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#if __cplusplus >= 201103L
|
||||
{
|
||||
typedef std::unordered_multimap<NotConstructible, NotConstructible,
|
||||
test_hash<std::hash<NotConstructible> >,
|
||||
test_compare<std::equal_to<NotConstructible> >,
|
||||
min_allocator<std::pair<const NotConstructible,
|
||||
NotConstructible> >
|
||||
> C;
|
||||
C c(7);
|
||||
assert(c.bucket_count() == 7);
|
||||
assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
|
||||
assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
|
||||
assert(c.get_allocator() ==
|
||||
(min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
|
||||
assert(c.size() == 0);
|
||||
assert(c.empty());
|
||||
assert(std::distance(c.begin(), c.end()) == 0);
|
||||
assert(c.load_factor() == 0);
|
||||
assert(c.max_load_factor() == 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user