Default initialization for vector-like containers

Complexity guarantees for associative container constructors and ordered input ranges
Added benchmark for associative containers
Fixes #9166

[SVN r85964]
This commit is contained in:
Ion Gaztañaga
2013-09-26 18:05:25 +00:00
parent 59b2793df7
commit 14f092ab00
39 changed files with 1450 additions and 242 deletions

View File

@@ -611,6 +611,53 @@ void test_sv_elem(T const& t)
v.emplace_back(N/2, t);
}
bool default_init_test()//Test for default initialization
{
typedef static_vector<int, 100> di_vector_t;
const std::size_t Capacity = 100;
{
di_vector_t v;
int *p = v.data();
for(std::size_t i = 0; i != Capacity; ++i, ++p){
*p = static_cast<int>(i);
}
//Destroy the vector, p stilll pointing to the storage
v.~di_vector_t();
di_vector_t &rv = *::new(&v)di_vector_t(Capacity, default_init);
di_vector_t::iterator it = rv.begin();
for(std::size_t i = 0; i != Capacity; ++i, ++it){
if(*it != static_cast<int>(i))
return false;
}
v.~di_vector_t();
}
{
di_vector_t v;
int *p = v.data();
for(std::size_t i = 0; i != Capacity; ++i, ++p){
*p = static_cast<int>(i+100);
}
v.resize(Capacity, default_init);
di_vector_t::iterator it = v.begin();
for(std::size_t i = 0; i != Capacity; ++i, ++it){
if(*it != static_cast<int>(i+100))
return false;
}
}
return true;
}
int main(int, char* [])
{
using boost::container::test::movable_and_copyable_int;
@@ -727,6 +774,9 @@ int main(int, char* [])
BOOST_TEST(counting_value::count() == 0);
test_sv_elem<shptr_value, 10>(shptr_value(50));
test_sv_elem<movable_and_copyable_int, 10>(movable_and_copyable_int(50));
BOOST_TEST(default_init_test() == true);
return boost::report_errors();
}