mirror of
https://github.com/boostorg/container.git
synced 2025-08-02 14:04:26 +02:00
Added more tests for backwards expansion
This commit is contained in:
@@ -168,64 +168,66 @@ bool test_insert_with_expand_bwd()
|
|||||||
|
|
||||||
//Distance old and new buffer
|
//Distance old and new buffer
|
||||||
const int Offset[] =
|
const int Offset[] =
|
||||||
{ 350, 250, 150, 150,
|
{ 350, 300, 250, 200, 150, 100, 150, 100,
|
||||||
150, 50, 50, 50 };
|
150, 50, 50, 50 };
|
||||||
//Insert position
|
|
||||||
const int Position[] =
|
|
||||||
{ 100, 100, 100, 100,
|
|
||||||
100, 100, 100, 100 };
|
|
||||||
//Initial vector size
|
//Initial vector size
|
||||||
const int InitialSize[] =
|
const int InitialSize[] =
|
||||||
{ 200, 200, 200, 200,
|
{ 200, 200, 200, 200, 200, 200, 200, 200,
|
||||||
200, 200, 200, 200 };
|
200, 200, 200, 200 };
|
||||||
//Size of the data to insert
|
//Size of the data to insert
|
||||||
const int InsertSize[] =
|
const int InsertSize[] =
|
||||||
{ 100, 100, 100, 200,
|
{ 100, 100, 100, 100, 100, 100, 200, 200,
|
||||||
300, 25, 100, 200 };
|
300, 25, 100, 200 };
|
||||||
//Number of tests
|
//Number of tests
|
||||||
const int Iterations = sizeof(InsertSize)/sizeof(int);
|
const int Iterations = sizeof(InsertSize)/sizeof(int);
|
||||||
|
|
||||||
for(int iteration = 0; iteration < Iterations; ++iteration)
|
//Insert position
|
||||||
{
|
const int Position[] =
|
||||||
boost::movelib::unique_ptr<char[]> memptr =
|
{ 0, 100, 200 };
|
||||||
boost::movelib::make_unique_definit<char[]>(MemorySize*sizeof(value_type));
|
|
||||||
value_type *memory = (value_type*)memptr.get();
|
|
||||||
std::vector<non_volatile_value_type> initial_data;
|
|
||||||
initial_data.resize(InitialSize[iteration]);
|
|
||||||
for(int i = 0; i < InitialSize[iteration]; ++i){
|
|
||||||
initial_data[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!life_count<value_type>::check(InitialSize[iteration]))
|
for(int pos = 0; pos < sizeof(Position)/sizeof(Position[0]); ++pos){
|
||||||
return false;
|
for(int iteration = 0; iteration < Iterations; ++iteration)
|
||||||
Vect data_to_insert;
|
{
|
||||||
data_to_insert.resize(InsertSize[iteration]);
|
boost::movelib::unique_ptr<char[]> memptr =
|
||||||
for(int i = 0; i < InsertSize[iteration]; ++i){
|
boost::movelib::make_unique_definit<char[]>(MemorySize*sizeof(value_type));
|
||||||
data_to_insert[i] = -i;
|
value_type *memory = (value_type*)memptr.get();
|
||||||
}
|
std::vector<non_volatile_value_type> initial_data;
|
||||||
|
initial_data.resize(InitialSize[iteration]);
|
||||||
|
for(int i = 0; i < InitialSize[iteration]; ++i){
|
||||||
|
initial_data[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
if(!life_count<value_type>::check(InitialSize[iteration]+InsertSize[iteration]))
|
if(!life_count<value_type>::check(InitialSize[iteration]))
|
||||||
return false;
|
return false;
|
||||||
|
Vect data_to_insert;
|
||||||
|
data_to_insert.resize(InsertSize[iteration]);
|
||||||
|
for(int i = 0; i < InsertSize[iteration]; ++i){
|
||||||
|
data_to_insert[i] = -i;
|
||||||
|
}
|
||||||
|
|
||||||
expand_bwd_test_allocator<value_type> alloc
|
if(!life_count<value_type>::check(InitialSize[iteration]+InsertSize[iteration]))
|
||||||
(&memory[0], MemorySize, Offset[iteration]);
|
return false;
|
||||||
VectorWithExpandBwdAllocator vector(alloc);
|
|
||||||
vector.insert( vector.begin()
|
|
||||||
, initial_data.begin(), initial_data.end());
|
|
||||||
vector.insert( vector.begin() + Position[iteration]
|
|
||||||
, data_to_insert.begin(), data_to_insert.end());
|
|
||||||
|
|
||||||
if(!life_count<value_type>::check(InitialSize[iteration]*2+InsertSize[iteration]*2))
|
expand_bwd_test_allocator<value_type> alloc
|
||||||
return false;
|
(&memory[0], MemorySize, Offset[iteration]);
|
||||||
|
VectorWithExpandBwdAllocator vector(alloc);
|
||||||
|
vector.insert( vector.begin()
|
||||||
|
, initial_data.begin(), initial_data.end());
|
||||||
|
vector.insert( vector.begin() + Position[pos]
|
||||||
|
, data_to_insert.begin(), data_to_insert.end());
|
||||||
|
|
||||||
initial_data.insert(initial_data.begin() + Position[iteration]
|
if(!life_count<value_type>::check(InitialSize[iteration]*2+InsertSize[iteration]*2))
|
||||||
, data_to_insert.begin(), data_to_insert.end());
|
return false;
|
||||||
//Now check that values are equal
|
|
||||||
if(!CheckEqualVector(vector, initial_data)){
|
initial_data.insert(initial_data.begin() + Position[pos]
|
||||||
std::cout << "test_assign_with_expand_bwd::CheckEqualVector failed." << std::endl
|
, data_to_insert.begin(), data_to_insert.end());
|
||||||
<< " Class: " << typeid(VectorWithExpandBwdAllocator).name() << std::endl
|
//Now check that values are equal
|
||||||
<< " Iteration: " << iteration << std::endl;
|
if(!CheckEqualVector(vector, initial_data)){
|
||||||
return false;
|
std::cout << "test_assign_with_expand_bwd::CheckEqualVector failed." << std::endl
|
||||||
|
<< " Class: " << typeid(VectorWithExpandBwdAllocator).name() << std::endl
|
||||||
|
<< " Iteration: " << iteration << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user