LWG#2156 loosened the requirements on unordered containers 'rehash' calls. Add tests to make sure we meet these requirements. Since we met the stricter ones, no code change needed to meet the looser ones.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@253223 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -21,6 +21,12 @@
|
|||||||
|
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
|
template <class C>
|
||||||
|
void rehash_postcondition(const C& c, size_t n)
|
||||||
|
{
|
||||||
|
assert(c.bucket_count() >= c.size() / c.max_load_factor() && c.bucket_count() >= n);
|
||||||
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
void test(const C& c)
|
void test(const C& c)
|
||||||
{
|
{
|
||||||
@@ -49,13 +55,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 5);
|
assert(c.bucket_count() >= 5);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 5);
|
assert(c.bucket_count() == 5);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
@@ -77,13 +86,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 5);
|
assert(c.bucket_count() >= 5);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 5);
|
assert(c.bucket_count() == 5);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
|
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
|
template <class C>
|
||||||
|
void rehash_postcondition(const C& c, size_t n)
|
||||||
|
{
|
||||||
|
assert(c.bucket_count() >= c.size() / c.max_load_factor() && c.bucket_count() >= n);
|
||||||
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
void test(const C& c)
|
void test(const C& c)
|
||||||
{
|
{
|
||||||
@@ -77,13 +83,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 7);
|
assert(c.bucket_count() >= 7);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 7);
|
assert(c.bucket_count() == 7);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
@@ -105,13 +114,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 7);
|
assert(c.bucket_count() >= 7);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 7);
|
assert(c.bucket_count() == 7);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,12 @@
|
|||||||
|
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
|
template <class C>
|
||||||
|
void rehash_postcondition(const C& c, size_t n)
|
||||||
|
{
|
||||||
|
assert(c.bucket_count() >= c.size() / c.max_load_factor() && c.bucket_count() >= n);
|
||||||
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
void test(const C& c)
|
void test(const C& c)
|
||||||
{
|
{
|
||||||
@@ -48,13 +54,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 7);
|
assert(c.bucket_count() >= 7);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 7);
|
assert(c.bucket_count() == 7);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
@@ -76,13 +85,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 7);
|
assert(c.bucket_count() >= 7);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 7);
|
assert(c.bucket_count() == 7);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,12 @@
|
|||||||
|
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
|
template <class C>
|
||||||
|
void rehash_postcondition(const C& c, size_t n)
|
||||||
|
{
|
||||||
|
assert(c.bucket_count() >= c.size() / c.max_load_factor() && c.bucket_count() >= n);
|
||||||
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
void test(const C& c)
|
void test(const C& c)
|
||||||
{
|
{
|
||||||
@@ -48,13 +54,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 5);
|
assert(c.bucket_count() >= 5);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 5);
|
assert(c.bucket_count() == 5);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
@@ -76,13 +85,16 @@ int main()
|
|||||||
test(c);
|
test(c);
|
||||||
assert(c.bucket_count() >= 5);
|
assert(c.bucket_count() >= 5);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 5);
|
assert(c.bucket_count() == 5);
|
||||||
test(c);
|
test(c);
|
||||||
c.max_load_factor(2);
|
c.max_load_factor(2);
|
||||||
c.rehash(3);
|
c.rehash(3);
|
||||||
|
rehash_postcondition(c, 3);
|
||||||
assert(c.bucket_count() == 3);
|
assert(c.bucket_count() == 3);
|
||||||
test(c);
|
test(c);
|
||||||
c.rehash(31);
|
c.rehash(31);
|
||||||
|
rehash_postcondition(c, 31);
|
||||||
assert(c.bucket_count() == 31);
|
assert(c.bucket_count() == 31);
|
||||||
test(c);
|
test(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2119">2119</a></td><td>Missing <tt>hash</tt> specializations for extended integer types</td><td>Kona</td><td></td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2119">2119</a></td><td>Missing <tt>hash</tt> specializations for extended integer types</td><td>Kona</td><td></td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2127">2127</a></td><td>Move-construction with <tt>raw_storage_iterator</tt></td><td>Kona</td><td>Complete</td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2127">2127</a></td><td>Move-construction with <tt>raw_storage_iterator</tt></td><td>Kona</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2133">2133</a></td><td>Attitude to overloaded comma for iterators</td><td>Kona</td><td>Complete</td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2133">2133</a></td><td>Attitude to overloaded comma for iterators</td><td>Kona</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2156">2156</a></td><td>Unordered containers' <tt>reserve(n)</tt> reserves for <tt>n-1</tt> elements</td><td>Kona</td><td></td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2156">2156</a></td><td>Unordered containers' <tt>reserve(n)</tt> reserves for <tt>n-1</tt> elements</td><td>Kona</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2218">2218</a></td><td>Unclear how containers use <tt>allocator_traits::construct()</tt></td><td>Kona</td><td></td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2218">2218</a></td><td>Unclear how containers use <tt>allocator_traits::construct()</tt></td><td>Kona</td><td></td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2219">2219</a></td><td><tt><i>INVOKE</i></tt>-ing a pointer to member with a <tt>reference_wrapper</tt> as the object expression</td><td>Kona</td><td></td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2219">2219</a></td><td><tt><i>INVOKE</i></tt>-ing a pointer to member with a <tt>reference_wrapper</tt> as the object expression</td><td>Kona</td><td></td></tr>
|
||||||
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2224">2224</a></td><td>Ambiguous status of access to non-live objects</td><td>Kona</td><td>Complete</td></tr>
|
<tr><td><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2224">2224</a></td><td>Ambiguous status of access to non-live objects</td><td>Kona</td><td>Complete</td></tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user