1 // Special tests for erase_begin, erase_end and clear methods. 2 3 // Copyright (c) 2009 Jan Gaspar 4 5 // Use, modification, and distribution is subject to the Boost Software 6 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 9 #define BOOST_CB_DISABLE_DEBUG 10 11 #include "test.hpp" 12 13 int MyInteger::ms_exception_trigger = 0; 14 int InstanceCounter::ms_count = 0; 15 erase_begin_test()16void erase_begin_test() { 17 18 circular_buffer<int> cb1(5); 19 cb1.push_back(1); 20 cb1.push_back(2); 21 cb1.push_back(3); 22 cb1.push_back(4); 23 cb1.push_back(5); 24 cb1.push_back(6); 25 26 circular_buffer<int>::pointer p = &cb1[0]; 27 28 cb1.erase_begin(2); 29 30 BOOST_CHECK(cb1.size() == 3); 31 BOOST_CHECK(cb1[0] == 4); 32 BOOST_CHECK(cb1[1] == 5); 33 BOOST_CHECK(cb1[2] == 6); 34 35 cb1.erase_begin(3); 36 BOOST_CHECK(cb1.empty()); 37 BOOST_CHECK(*p == 2); 38 BOOST_CHECK(*(p + 1) == 3); 39 BOOST_CHECK(*(p + 2) == 4); 40 41 cb1.push_back(10); 42 cb1.push_back(11); 43 cb1.push_back(12); 44 45 BOOST_CHECK(cb1.size() == 3); 46 BOOST_CHECK(cb1[0] == 10); 47 BOOST_CHECK(cb1[1] == 11); 48 BOOST_CHECK(cb1[2] == 12); 49 50 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 51 52 BOOST_CHECK(cb2.size() == 5); 53 BOOST_CHECK(InstanceCounter::count() == 5); 54 55 cb2.erase_begin(2); 56 57 BOOST_CHECK(cb2.size() == 3); 58 BOOST_CHECK(InstanceCounter::count() == 3); 59 60 circular_buffer<MyInteger> cb3(5); 61 cb3.push_back(1); 62 cb3.push_back(2); 63 cb3.push_back(3); 64 cb3.push_back(4); 65 cb3.push_back(5); 66 cb3.push_back(6); 67 cb3.erase_begin(2); 68 69 BOOST_CHECK(cb3.size() == 3); 70 BOOST_CHECK(cb3[0] == 4); 71 BOOST_CHECK(cb3[1] == 5); 72 BOOST_CHECK(cb3[2] == 6); 73 } 74 erase_end_test()75void erase_end_test() { 76 77 circular_buffer<int> cb1(5); 78 cb1.push_back(1); 79 cb1.push_back(2); 80 cb1.push_back(3); 81 cb1.push_back(4); 82 cb1.push_back(5); 83 cb1.push_back(6); 84 85 circular_buffer<int>::pointer p = &cb1[3]; 86 87 cb1.erase_end(2); 88 89 BOOST_CHECK(cb1.size() == 3); 90 BOOST_CHECK(cb1[0] == 2); 91 BOOST_CHECK(cb1[1] == 3); 92 BOOST_CHECK(cb1[2] ==4); 93 94 cb1.erase_end(3); 95 BOOST_CHECK(cb1.empty()); 96 BOOST_CHECK(*p == 5); 97 BOOST_CHECK(*(p - 1) == 4); 98 BOOST_CHECK(*(p - 2) == 3); 99 100 cb1.push_back(10); 101 cb1.push_back(11); 102 cb1.push_back(12); 103 104 BOOST_CHECK(cb1.size() == 3); 105 BOOST_CHECK(cb1[0] == 10); 106 BOOST_CHECK(cb1[1] == 11); 107 BOOST_CHECK(cb1[2] == 12); 108 109 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 110 111 BOOST_CHECK(cb2.size() == 5); 112 BOOST_CHECK(InstanceCounter::count() == 5); 113 114 cb2.erase_end(2); 115 116 BOOST_CHECK(cb2.size() == 3); 117 BOOST_CHECK(InstanceCounter::count() == 3); 118 119 circular_buffer<MyInteger> cb3(5); 120 cb3.push_back(1); 121 cb3.push_back(2); 122 cb3.push_back(3); 123 cb3.push_back(4); 124 cb3.push_back(5); 125 cb3.push_back(6); 126 cb3.erase_end(2); 127 128 BOOST_CHECK(cb3.size() == 3); 129 BOOST_CHECK(cb3[0] == 2); 130 BOOST_CHECK(cb3[1] == 3); 131 BOOST_CHECK(cb3[2] == 4); 132 } 133 clear_test()134void clear_test() { 135 136 circular_buffer<int> cb1(5); 137 cb1.push_back(1); 138 cb1.push_back(2); 139 cb1.push_back(3); 140 cb1.push_back(4); 141 cb1.push_back(5); 142 cb1.push_back(6); 143 144 circular_buffer<int>::pointer p = &cb1[0]; 145 146 cb1.clear(); 147 148 BOOST_CHECK(cb1.empty()); 149 BOOST_CHECK(*p == 2); 150 BOOST_CHECK(*(p + 1) == 3); 151 BOOST_CHECK(*(p + 2) == 4); 152 BOOST_CHECK(*(p + 3) == 5); 153 BOOST_CHECK(*(p - 1) == 6); 154 155 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 156 157 BOOST_CHECK(cb2.size() == 5); 158 BOOST_CHECK(InstanceCounter::count() == 5); 159 160 cb2.clear(); 161 162 BOOST_CHECK(cb2.empty()); 163 BOOST_CHECK(InstanceCounter::count() == 0); 164 165 circular_buffer<MyInteger> cb3(5); 166 cb3.push_back(1); 167 cb3.push_back(2); 168 cb3.push_back(3); 169 cb3.push_back(4); 170 cb3.push_back(5); 171 cb3.push_back(6); 172 cb3.clear(); 173 174 BOOST_CHECK(cb3.empty()); 175 } 176 177 // test main init_unit_test_suite(int,char * [])178test_suite* init_unit_test_suite(int /*argc*/, char* /*argv*/[]) { 179 180 test_suite* tests = BOOST_TEST_SUITE("Unit tests for erase_begin/end and clear methods of the circular_buffer."); 181 182 tests->add(BOOST_TEST_CASE(&erase_begin_test)); 183 tests->add(BOOST_TEST_CASE(&erase_end_test)); 184 tests->add(BOOST_TEST_CASE(&clear_test)); 185 186 return tests; 187 } 188