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 #include "test.hpp" 10 11 int MyInteger::ms_exception_trigger = 0; 12 int InstanceCounter::ms_count = 0; 13 erase_begin_test()14void erase_begin_test() { 15 16 circular_buffer<int> cb1(5); 17 cb1.push_back(1); 18 cb1.push_back(2); 19 cb1.push_back(3); 20 cb1.push_back(4); 21 cb1.push_back(5); 22 cb1.push_back(6); 23 24 circular_buffer<int>::pointer p = &cb1[0]; 25 26 cb1.erase_begin(2); 27 28 BOOST_TEST(cb1.size() == 3); 29 BOOST_TEST(cb1[0] == 4); 30 BOOST_TEST(cb1[1] == 5); 31 BOOST_TEST(cb1[2] == 6); 32 33 cb1.erase_begin(3); 34 BOOST_TEST(cb1.empty()); 35 BOOST_TEST(*p == 2); 36 BOOST_TEST(*(p + 1) == 3); 37 BOOST_TEST(*(p + 2) == 4); 38 39 cb1.push_back(10); 40 cb1.push_back(11); 41 cb1.push_back(12); 42 43 BOOST_TEST(cb1.size() == 3); 44 BOOST_TEST(cb1[0] == 10); 45 BOOST_TEST(cb1[1] == 11); 46 BOOST_TEST(cb1[2] == 12); 47 48 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 49 50 BOOST_TEST(cb2.size() == 5); 51 BOOST_TEST(InstanceCounter::count() == 5); 52 53 cb2.erase_begin(2); 54 55 BOOST_TEST(cb2.size() == 3); 56 BOOST_TEST(InstanceCounter::count() == 3); 57 58 circular_buffer<MyInteger> cb3(5); 59 cb3.push_back(1); 60 cb3.push_back(2); 61 cb3.push_back(3); 62 cb3.push_back(4); 63 cb3.push_back(5); 64 cb3.push_back(6); 65 cb3.erase_begin(2); 66 67 BOOST_TEST(cb3.size() == 3); 68 BOOST_TEST(cb3[0] == 4); 69 BOOST_TEST(cb3[1] == 5); 70 BOOST_TEST(cb3[2] == 6); 71 } 72 erase_end_test()73void erase_end_test() { 74 75 circular_buffer<int> cb1(5); 76 cb1.push_back(1); 77 cb1.push_back(2); 78 cb1.push_back(3); 79 cb1.push_back(4); 80 cb1.push_back(5); 81 cb1.push_back(6); 82 83 circular_buffer<int>::pointer p = &cb1[3]; 84 85 cb1.erase_end(2); 86 87 BOOST_TEST(cb1.size() == 3); 88 BOOST_TEST(cb1[0] == 2); 89 BOOST_TEST(cb1[1] == 3); 90 BOOST_TEST(cb1[2] ==4); 91 92 cb1.erase_end(3); 93 BOOST_TEST(cb1.empty()); 94 BOOST_TEST(*p == 5); 95 BOOST_TEST(*(p - 1) == 4); 96 BOOST_TEST(*(p - 2) == 3); 97 98 cb1.push_back(10); 99 cb1.push_back(11); 100 cb1.push_back(12); 101 102 BOOST_TEST(cb1.size() == 3); 103 BOOST_TEST(cb1[0] == 10); 104 BOOST_TEST(cb1[1] == 11); 105 BOOST_TEST(cb1[2] == 12); 106 107 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 108 109 BOOST_TEST(cb2.size() == 5); 110 BOOST_TEST(InstanceCounter::count() == 5); 111 112 cb2.erase_end(2); 113 114 BOOST_TEST(cb2.size() == 3); 115 BOOST_TEST(InstanceCounter::count() == 3); 116 117 circular_buffer<MyInteger> cb3(5); 118 cb3.push_back(1); 119 cb3.push_back(2); 120 cb3.push_back(3); 121 cb3.push_back(4); 122 cb3.push_back(5); 123 cb3.push_back(6); 124 cb3.erase_end(2); 125 126 BOOST_TEST(cb3.size() == 3); 127 BOOST_TEST(cb3[0] == 2); 128 BOOST_TEST(cb3[1] == 3); 129 BOOST_TEST(cb3[2] == 4); 130 } 131 clear_test()132void clear_test() { 133 134 circular_buffer<int> cb1(5); 135 cb1.push_back(1); 136 cb1.push_back(2); 137 cb1.push_back(3); 138 cb1.push_back(4); 139 cb1.push_back(5); 140 cb1.push_back(6); 141 142 circular_buffer<int>::pointer p = &cb1[0]; 143 144 cb1.clear(); 145 146 BOOST_TEST(cb1.empty()); 147 BOOST_TEST(*p == 2); 148 BOOST_TEST(*(p + 1) == 3); 149 BOOST_TEST(*(p + 2) == 4); 150 BOOST_TEST(*(p + 3) == 5); 151 BOOST_TEST(*(p - 1) == 6); 152 153 circular_buffer<InstanceCounter> cb2(5, InstanceCounter()); 154 155 BOOST_TEST(cb2.size() == 5); 156 BOOST_TEST(InstanceCounter::count() == 5); 157 158 cb2.clear(); 159 160 BOOST_TEST(cb2.empty()); 161 BOOST_TEST(InstanceCounter::count() == 0); 162 163 circular_buffer<MyInteger> cb3(5); 164 cb3.push_back(1); 165 cb3.push_back(2); 166 cb3.push_back(3); 167 cb3.push_back(4); 168 cb3.push_back(5); 169 cb3.push_back(6); 170 cb3.clear(); 171 172 BOOST_TEST(cb3.empty()); 173 } 174 175 // test main main()176int main() 177 { 178 erase_begin_test(); 179 erase_end_test(); 180 clear_test(); 181 return boost::report_errors(); 182 } 183