bool test_assign_with_expand_bwd() { typedef typename VectorWithExpandBwdAllocator::value_type value_type; typedef typename boost::remove_volatile<value_type>::type non_volatile_value_type; typedef std::vector<non_volatile_value_type> Vect; const int MemorySize = 200; const int Offset[] = { 50, 50, 50}; const int InitialSize[] = { 25, 25, 25}; const int AssignSize[] = { 40, 60, 80}; const int Iterations = sizeof(AssignSize)/sizeof(int); for(int iteration = 0; iteration <Iterations; ++iteration) { value_type *memory = new value_type[MemorySize]; try { //Create initial data 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; } //Create data to assign std::vector<non_volatile_value_type> data_to_assign; data_to_assign.resize(AssignSize[iteration]); for(int i = 0; i < AssignSize[iteration]; ++i){ data_to_assign[i] = -i; } //Insert initial data to the vector to test expand_bwd_test_allocator<value_type> alloc (&memory[0], MemorySize, Offset[iteration]); VectorWithExpandBwdAllocator vector(alloc); vector.insert( vector.begin() , initial_data.begin(), initial_data.end()); //Assign data vector.assign(data_to_assign.begin(), data_to_assign.end()); initial_data.assign(data_to_assign.begin(), data_to_assign.end()); //Now check that values are equal if(!CheckEqualVector(vector, initial_data)){ std::cout << "test_assign_with_expand_bwd::CheckEqualVector failed." << std::endl << " Class: " << typeid(VectorWithExpandBwdAllocator).name() << std::endl << " Iteration: " << iteration << std::endl; return false; } } catch(...){ delete [](const_cast<typename boost::remove_volatile<value_type>::type*>(memory)); throw; } delete [](const_cast<typename boost::remove_volatile<value_type>::type*>(memory)); } return true; }
bool test_insert_with_expand_bwd() { typedef typename VectorWithExpandBwdAllocator::value_type value_type; typedef typename boost::remove_volatile<value_type>::type non_volatile_value_type; typedef std::vector<non_volatile_value_type> Vect; const int MemorySize = 1000; //Distance old and new buffer const int Offset[] = { 350, 250, 150, 150, 150, 50, 50, 50 }; //Insert position const int Position[] = { 100, 100, 100, 100, 100, 100, 100, 100 }; //Initial vector size const int InitialSize[] = { 200, 200, 200, 200, 200, 200, 200, 200 }; //Size of the data to insert const int InsertSize[] = { 100, 100, 100, 200, 300, 25, 100, 200 }; //Number of tests const int Iterations = sizeof(InsertSize)/sizeof(int); for(int iteration = 0; iteration < Iterations; ++iteration) { value_type *memory = new value_type[MemorySize]; try { 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; } 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 (&memory[0], MemorySize, Offset[iteration]); 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()); initial_data.insert(initial_data.begin() + Position[iteration] , data_to_insert.begin(), data_to_insert.end()); //Now check that values are equal if(!CheckEqualVector(vector, initial_data)){ std::cout << "test_assign_with_expand_bwd::CheckEqualVector failed." << std::endl << " Class: " << typeid(VectorWithExpandBwdAllocator).name() << std::endl << " Iteration: " << iteration << std::endl; return false; } } catch(...){ delete [](const_cast<non_volatile_value_type*>(memory)); throw; } delete [](const_cast<non_volatile_value_type*>(memory)); } return true; }