#include "test.hpp"
void validity_example_test() {
circular_buffer<int> cb(3);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it = cb.begin();
BOOST_TEST(*it == 1);
cb.push_back(4);
BOOST_TEST(*it == 4);
}
void validity_insert_test() {
int array[] = { 1, 2, 3 };
circular_buffer<int> cb(4, array, array + 3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.insert(cb.begin() + 1, 4);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 4);
BOOST_TEST(*it3 == 2);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 4);
BOOST_TEST(cb[2] == 2);
BOOST_TEST(cb[3] == 3);
circular_buffer<int>::iterator it4 = it1 + 3;
cb.insert(cb.begin() + 1, 5);
BOOST_TEST(*it1 == 3);
BOOST_TEST(*it2 == 5);
BOOST_TEST(*it3 == 4);
BOOST_TEST(*it4 == 2);
BOOST_TEST(cb[0] == 5);
BOOST_TEST(cb[1] == 4);
BOOST_TEST(cb[2] == 2);
BOOST_TEST(cb[3] == 3);
}
void validity_insert_n_test() {
circular_buffer<int> cb(5);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.insert(cb.begin() + 1, 2, 4);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 4);
BOOST_TEST(*it3 == 4);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 4);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 2);
BOOST_TEST(cb[4] == 3);
circular_buffer<int>::iterator it4 = it1 + 3;
circular_buffer<int>::iterator it5 = it1 + 4;
cb.insert(cb.begin() + 1, 2, 5);
BOOST_TEST(*it1 == 3);
BOOST_TEST(*it2 == 5);
BOOST_TEST(*it3 == 4);
BOOST_TEST(*it4 == 4);
BOOST_TEST(*it5 == 2);
BOOST_TEST(cb[0] == 5);
BOOST_TEST(cb[1] == 4);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 2);
BOOST_TEST(cb[4] == 3);
}
void validity_insert_range_test() {
vector<int> v1;
v1.push_back(4);
v1.push_back(5);
vector<int> v2;
v2.push_back(6);
v2.push_back(7);
circular_buffer<int> cb1(5);
cb1.push_back(1);
cb1.push_back(2);
cb1.push_back(3);
circular_buffer<int>::iterator it11 = cb1.begin();
circular_buffer<int>::iterator it12 = cb1.begin() + 1;
circular_buffer<int>::iterator it13 = cb1.begin() + 2;
cb1.insert(cb1.begin() + 1, v1.begin(), v1.end());
BOOST_TEST(*it11 == 1);
BOOST_TEST(*it12 == 4);
BOOST_TEST(*it13 == 5);
BOOST_TEST(cb1[0] == 1);
BOOST_TEST(cb1[1] == 4);
BOOST_TEST(cb1[2] == 5);
BOOST_TEST(cb1[3] == 2);
BOOST_TEST(cb1[4] == 3);
circular_buffer<int>::iterator it14 = it11 + 3;
circular_buffer<int>::iterator it15 = it11 + 4;
cb1.insert(cb1.begin() + 1, v2.begin(), v2.end());
BOOST_TEST(*it11 == 3);
BOOST_TEST(*it12 == 7);
BOOST_TEST(*it13 == 4);
BOOST_TEST(*it14 == 5);
BOOST_TEST(*it15 == 2);
BOOST_TEST(cb1[0] == 7);
BOOST_TEST(cb1[1] == 4);
BOOST_TEST(cb1[2] == 5);
BOOST_TEST(cb1[3] == 2);
BOOST_TEST(cb1[4] == 3);
circular_buffer<int> cb2(5);
cb2.push_back(1);
cb2.push_back(2);
cb2.push_back(3);
circular_buffer<int>::iterator it21 = cb2.begin();
circular_buffer<int>::iterator it22 = cb2.begin() + 1;
circular_buffer<int>::iterator it23 = cb2.begin() + 2;
cb2.insert(cb2.begin() + 1, MyInputIterator(v1.begin()), MyInputIterator(v1.end()));
BOOST_TEST(*it21 == 1);
BOOST_TEST(*it22 == 4);
BOOST_TEST(*it23 == 5);
BOOST_TEST(cb2[0] == 1);
BOOST_TEST(cb2[1] == 4);
BOOST_TEST(cb2[2] == 5);
BOOST_TEST(cb2[3] == 2);
BOOST_TEST(cb2[4] == 3);
circular_buffer<int>::iterator it24 = it21 + 3;
circular_buffer<int>::iterator it25 = it21 + 4;
cb2.insert(cb2.begin() + 1, MyInputIterator(v2.begin()), MyInputIterator(v2.end()));
BOOST_TEST(*it21 == 2);
BOOST_TEST(*it22 == 3);
BOOST_TEST(*it23 == 7);
BOOST_TEST(*it24 == 4);
BOOST_TEST(*it25 == 5);
BOOST_TEST(cb2[0] == 7);
BOOST_TEST(cb2[1] == 4);
BOOST_TEST(cb2[2] == 5);
BOOST_TEST(cb2[3] == 2);
BOOST_TEST(cb2[4] == 3);
}
void validity_rinsert_test() {
int array[] = { 1, 2, 3 };
circular_buffer<int> cb(4, array, array + 3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.rinsert(cb.begin() + 2, 4);
BOOST_TEST(*it1 == 2);
BOOST_TEST(*it2 == 4);
BOOST_TEST(*it3 == 3);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 3);
circular_buffer<int>::iterator it4 = it1 - 1;
cb.rinsert(cb.begin() + 2, 5);
BOOST_TEST(*it1 == 5);
BOOST_TEST(*it2 == 4);
BOOST_TEST(*it3 == 1);
BOOST_TEST(*it4 == 2);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 5);
BOOST_TEST(cb[3] == 4);
}
void validity_rinsert_n_test() {
circular_buffer<int> cb(5);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.rinsert(cb.begin() + 2, 2, 4);
BOOST_TEST(*it1 == 4);
BOOST_TEST(*it2 == 4);
BOOST_TEST(*it3 == 3);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 4);
BOOST_TEST(cb[4] == 3);
circular_buffer<int>::iterator it4 = it1 - 2;
circular_buffer<int>::iterator it5 = it1 - 1;
cb.rinsert(cb.begin() + 4, 2, 5);
BOOST_TEST(*it1 == 4);
BOOST_TEST(*it2 == 5);
BOOST_TEST(*it3 == 1);
BOOST_TEST(*it4 == 2);
BOOST_TEST(*it5 == 4);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 4);
BOOST_TEST(cb[4] == 5);
}
void validity_rinsert_range_test() {
vector<int> v1;
v1.push_back(4);
v1.push_back(5);
vector<int> v2;
v2.push_back(6);
v2.push_back(7);
circular_buffer<int> cb1(5);
cb1.push_back(1);
cb1.push_back(2);
cb1.push_back(3);
circular_buffer<int>::iterator it11 = cb1.begin();
circular_buffer<int>::iterator it12 = cb1.begin() + 1;
circular_buffer<int>::iterator it13 = cb1.begin() + 2;
cb1.rinsert(cb1.begin() + 2, v1.begin(), v1.end());
BOOST_TEST(*it11 == 4);
BOOST_TEST(*it12 == 5);
BOOST_TEST(*it13 == 3);
BOOST_TEST(cb1[0] == 1);
BOOST_TEST(cb1[1] == 2);
BOOST_TEST(cb1[2] == 4);
BOOST_TEST(cb1[3] == 5);
BOOST_TEST(cb1[4] == 3);
circular_buffer<int>::iterator it14 = it11 - 2;
circular_buffer<int>::iterator it15 = it11 - 1;
cb1.rinsert(cb1.begin() + 4, v2.begin(), v2.end());
BOOST_TEST(*it11 == 5);
BOOST_TEST(*it12 == 6);
BOOST_TEST(*it13 == 1);
BOOST_TEST(*it14 == 2);
BOOST_TEST(*it15 == 4);
BOOST_TEST(cb1[0] == 1);
BOOST_TEST(cb1[1] == 2);
BOOST_TEST(cb1[2] == 4);
BOOST_TEST(cb1[3] == 5);
BOOST_TEST(cb1[4] == 6);
circular_buffer<int> cb2(5);
cb2.push_back(1);
cb2.push_back(2);
cb2.push_back(3);
circular_buffer<int>::iterator it21 = cb2.begin();
circular_buffer<int>::iterator it22 = cb2.begin() + 1;
circular_buffer<int>::iterator it23 = cb2.begin() + 2;
cb2.rinsert(cb2.begin() + 2, MyInputIterator(v1.begin()), MyInputIterator(v1.end()));
BOOST_TEST(*it21 == 4);
BOOST_TEST(*it22 == 5);
BOOST_TEST(*it23 == 3);
BOOST_TEST(cb2[0] == 1);
BOOST_TEST(cb2[1] == 2);
BOOST_TEST(cb2[2] == 4);
BOOST_TEST(cb2[3] == 5);
BOOST_TEST(cb2[4] == 3);
circular_buffer<int>::iterator it24 = it21 - 2;
circular_buffer<int>::iterator it25 = it21 - 1;
cb2.rinsert(cb2.begin() + 4, MyInputIterator(v2.begin()), MyInputIterator(v2.end()));
BOOST_TEST(*it21 == 5);
BOOST_TEST(*it22 == 6);
BOOST_TEST(*it23 == 1);
BOOST_TEST(*it24 == 2);
BOOST_TEST(*it25 == 4);
BOOST_TEST(cb2[0] == 1);
BOOST_TEST(cb2[1] == 2);
BOOST_TEST(cb2[2] == 4);
BOOST_TEST(cb2[3] == 5);
BOOST_TEST(cb2[4] == 6);
}
void validity_erase_test() {
circular_buffer<int> cb(5);
cb.push_back(-1);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
cb.push_back(4);
cb.push_back(5);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
circular_buffer<int>::iterator it4 = cb.begin() + 3;
cb.erase(cb.begin() + 1);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 3);
BOOST_TEST(*it3 == 4);
BOOST_TEST(*it4 == 5);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 3);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 5);
}
void validity_erase_range_test() {
circular_buffer<int> cb(6);
cb.push_back(-2);
cb.push_back(-1);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
cb.push_back(4);
cb.push_back(5);
cb.push_back(6);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
circular_buffer<int>::iterator it4 = cb.begin() + 3;
cb.erase(cb.begin() + 2, cb.begin() + 4);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 2);
BOOST_TEST(*it3 == 5);
BOOST_TEST(*it4 == 6);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 5);
BOOST_TEST(cb[3] == 6);
}
void validity_rerase_test() {
circular_buffer<int> cb(5);
cb.push_back(-1);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
cb.push_back(4);
cb.push_back(5);
circular_buffer<int>::iterator it1 = cb.begin() + 1;
circular_buffer<int>::iterator it2 = cb.begin() + 2;
circular_buffer<int>::iterator it3 = cb.begin() + 3;
circular_buffer<int>::iterator it4 = cb.begin() + 4;
cb.rerase(cb.begin() + 1);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 3);
BOOST_TEST(*it3 == 4);
BOOST_TEST(*it4 == 5);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 3);
BOOST_TEST(cb[2] == 4);
BOOST_TEST(cb[3] == 5);
}
void validity_rerase_range_test() {
circular_buffer<int> cb(6);
cb.push_back(-2);
cb.push_back(-1);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
cb.push_back(4);
cb.push_back(5);
cb.push_back(6);
circular_buffer<int>::iterator it1 = cb.begin() + 2;
circular_buffer<int>::iterator it2 = cb.begin() + 3;
circular_buffer<int>::iterator it3 = cb.begin() + 4;
circular_buffer<int>::iterator it4 = cb.begin() + 5;
cb.rerase(cb.begin() + 2, cb.begin() + 4);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 2);
BOOST_TEST(*it3 == 5);
BOOST_TEST(*it4 == 6);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 5);
BOOST_TEST(cb[3] == 6);
}
void validity_linearize_test() {
circular_buffer<int> cb(3);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.linearize();
BOOST_TEST(*it1 == 2);
BOOST_TEST(*it2 == 3);
BOOST_TEST(*it3 == 1);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
BOOST_TEST(cb[2] == 3);
}
void validity_swap_test() {
circular_buffer<int> cb1(3);
cb1.push_back(0);
cb1.push_back(1);
cb1.push_back(2);
cb1.push_back(3);
circular_buffer<int>::iterator it11 = cb1.begin();
circular_buffer<int>::iterator it12 = cb1.begin() + 1;
circular_buffer<int>::iterator it13 = cb1.begin() + 2;
circular_buffer<int> cb2(5);
cb2.push_back(4);
cb2.push_back(5);
cb2.push_back(6);
circular_buffer<int>::iterator it21 = cb2.begin();
circular_buffer<int>::iterator it22 = cb2.begin() + 1;
circular_buffer<int>::iterator it23 = cb2.begin() + 2;
cb1.swap(cb2);
BOOST_TEST(*it11 == 1);
BOOST_TEST(*it12 == 2);
BOOST_TEST(*it13 == 3);
BOOST_TEST(*it21 == 4);
BOOST_TEST(*it22 == 5);
BOOST_TEST(*it23 == 6);
BOOST_TEST(cb1[0] == 4);
BOOST_TEST(cb1[1] == 5);
BOOST_TEST(cb1[2] == 6);
BOOST_TEST(cb2[0] == 1);
BOOST_TEST(cb2[1] == 2);
BOOST_TEST(cb2[2] == 3);
}
void validity_push_back_test() {
circular_buffer<int> cb(3);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.push_back(4);
BOOST_TEST(*it1 == 4);
BOOST_TEST(*it2 == 2);
BOOST_TEST(*it3 == 3);
BOOST_TEST(cb[0] == 2);
BOOST_TEST(cb[1] == 3);
BOOST_TEST(cb[2] == 4);
}
void validity_push_front_test() {
circular_buffer<int> cb(3);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
circular_buffer<int>::iterator it3 = cb.begin() + 2;
cb.push_front(4);
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 2);
BOOST_TEST(*it3 == 4);
BOOST_TEST(cb[0] == 4);
BOOST_TEST(cb[1] == 1);
BOOST_TEST(cb[2] == 2);
}
void validity_pop_back_test() {
circular_buffer<int> cb(3);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin();
circular_buffer<int>::iterator it2 = cb.begin() + 1;
cb.pop_back();
BOOST_TEST(*it1 == 1);
BOOST_TEST(*it2 == 2);
BOOST_TEST(cb[0] == 1);
BOOST_TEST(cb[1] == 2);
}
void validity_pop_front_test() {
circular_buffer<int> cb(3);
cb.push_back(0);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
circular_buffer<int>::iterator it1 = cb.begin() + 1;
circular_buffer<int>::iterator it2 = cb.begin() + 2;
cb.pop_front();
BOOST_TEST(*it1 == 2);
BOOST_TEST(*it2 == 3);
BOOST_TEST(cb[0] == 2);
BOOST_TEST(cb[1] == 3);
}
int main()
{
validity_example_test();
validity_insert_test();
validity_insert_n_test();
validity_insert_range_test();
validity_rinsert_test();
validity_rinsert_n_test();
validity_rinsert_range_test();
validity_erase_test();
validity_erase_range_test();
validity_rerase_test();
validity_rerase_range_test();
validity_linearize_test();
validity_swap_test();
validity_push_back_test();
validity_push_front_test();
validity_pop_back_test();
validity_pop_front_test();
return boost::report_errors();
}