// Special tests for erase_begin, erase_end and clear methods. // Copyright (c) 2009 Jan Gaspar // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include "test.hpp" int MyInteger::ms_exception_trigger = 0; int InstanceCounter::ms_count = 0; void erase_begin_test() { circular_buffer cb1(5); cb1.push_back(1); cb1.push_back(2); cb1.push_back(3); cb1.push_back(4); cb1.push_back(5); cb1.push_back(6); circular_buffer::pointer p = &cb1[0]; cb1.erase_begin(2); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb1[0] == 4); BOOST_CHECK(cb1[1] == 5); BOOST_CHECK(cb1[2] == 6); cb1.erase_begin(3); BOOST_CHECK(cb1.empty()); BOOST_CHECK(*p == 2); BOOST_CHECK(*(p + 1) == 3); BOOST_CHECK(*(p + 2) == 4); cb1.push_back(10); cb1.push_back(11); cb1.push_back(12); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb1[0] == 10); BOOST_CHECK(cb1[1] == 11); BOOST_CHECK(cb1[2] == 12); circular_buffer cb2(5, InstanceCounter()); BOOST_CHECK(cb2.size() == 5); BOOST_CHECK(InstanceCounter::count() == 5); cb2.erase_begin(2); BOOST_CHECK(cb2.size() == 3); BOOST_CHECK(InstanceCounter::count() == 3); circular_buffer cb3(5); cb3.push_back(1); cb3.push_back(2); cb3.push_back(3); cb3.push_back(4); cb3.push_back(5); cb3.push_back(6); cb3.erase_begin(2); BOOST_CHECK(cb3.size() == 3); BOOST_CHECK(cb3[0] == 4); BOOST_CHECK(cb3[1] == 5); BOOST_CHECK(cb3[2] == 6); } void erase_end_test() { circular_buffer cb1(5); cb1.push_back(1); cb1.push_back(2); cb1.push_back(3); cb1.push_back(4); cb1.push_back(5); cb1.push_back(6); circular_buffer::pointer p = &cb1[3]; cb1.erase_end(2); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb1[0] == 2); BOOST_CHECK(cb1[1] == 3); BOOST_CHECK(cb1[2] ==4); cb1.erase_end(3); BOOST_CHECK(cb1.empty()); BOOST_CHECK(*p == 5); BOOST_CHECK(*(p - 1) == 4); BOOST_CHECK(*(p - 2) == 3); cb1.push_back(10); cb1.push_back(11); cb1.push_back(12); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb1[0] == 10); BOOST_CHECK(cb1[1] == 11); BOOST_CHECK(cb1[2] == 12); circular_buffer cb2(5, InstanceCounter()); BOOST_CHECK(cb2.size() == 5); BOOST_CHECK(InstanceCounter::count() == 5); cb2.erase_end(2); BOOST_CHECK(cb2.size() == 3); BOOST_CHECK(InstanceCounter::count() == 3); circular_buffer cb3(5); cb3.push_back(1); cb3.push_back(2); cb3.push_back(3); cb3.push_back(4); cb3.push_back(5); cb3.push_back(6); cb3.erase_end(2); BOOST_CHECK(cb3.size() == 3); BOOST_CHECK(cb3[0] == 2); BOOST_CHECK(cb3[1] == 3); BOOST_CHECK(cb3[2] == 4); } void clear_test() { circular_buffer cb1(5); cb1.push_back(1); cb1.push_back(2); cb1.push_back(3); cb1.push_back(4); cb1.push_back(5); cb1.push_back(6); circular_buffer::pointer p = &cb1[0]; cb1.clear(); BOOST_CHECK(cb1.empty()); BOOST_CHECK(*p == 2); BOOST_CHECK(*(p + 1) == 3); BOOST_CHECK(*(p + 2) == 4); BOOST_CHECK(*(p + 3) == 5); BOOST_CHECK(*(p - 1) == 6); circular_buffer cb2(5, InstanceCounter()); BOOST_CHECK(cb2.size() == 5); BOOST_CHECK(InstanceCounter::count() == 5); cb2.clear(); BOOST_CHECK(cb2.empty()); BOOST_CHECK(InstanceCounter::count() == 0); circular_buffer cb3(5); cb3.push_back(1); cb3.push_back(2); cb3.push_back(3); cb3.push_back(4); cb3.push_back(5); cb3.push_back(6); cb3.clear(); BOOST_CHECK(cb3.empty()); } // test main test_suite* init_unit_test_suite(int /*argc*/, char* /*argv*/[]) { test_suite* tests = BOOST_TEST_SUITE("Unit tests for erase_begin/end and clear methods of the circular_buffer."); tests->add(BOOST_TEST_CASE(&erase_begin_test)); tests->add(BOOST_TEST_CASE(&erase_end_test)); tests->add(BOOST_TEST_CASE(&clear_test)); return tests; }