📄 common.ipp
字号:
// Common tests for the circular buffer and its adaptor.// Copyright (c) 2003-2008 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)void generic_test(CB_CONTAINER<MyInteger>& cb) { vector<int> v; v.push_back(11); v.push_back(12); v.push_back(13); v.push_back(14); v.push_back(15); v.push_back(16); v.push_back(17); if (cb.capacity() == 0) { cb.insert(cb.begin(), 1); cb.insert(cb.begin(), v.begin(), v.end()); cb.rinsert(cb.end(), 2); cb.rinsert(cb.end(), v.begin(), v.end()); cb.push_back(3); cb.push_front(4); cb.linearize(); BOOST_CHECK(cb.empty()); BOOST_CHECK(cb.full()); } else { cb.insert(cb.end(), 1); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[cb.size() - 1] == 1); size_t size = cb.size(); cb.rerase(cb.end() - 1, cb.end()); BOOST_CHECK(size == cb.size() + 1); cb.insert(cb.end(), v.begin(), v.end()); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[cb.size() - 1] == 17); size = cb.size(); cb.erase(cb.end() - 1, cb.end()); BOOST_CHECK(size == cb.size() + 1); size = cb.size(); cb.rinsert(cb.begin(), 2); BOOST_CHECK(size + 1 == cb.size()); BOOST_CHECK(cb[0] == 2); size = cb.size(); cb.erase(cb.begin()); BOOST_CHECK(size == cb.size() + 1); cb.rinsert(cb.begin(), v.begin(), v.end()); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[0] == 11); size = cb.size(); cb.pop_front(); BOOST_CHECK(size == cb.size() + 1); cb.push_back(3); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[cb.size() - 1] == 3); size = cb.size(); cb.pop_back(); BOOST_CHECK(size == cb.size() + 1); cb.push_front(4); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[0] == 4); cb.linearize(); BOOST_CHECK(!cb.empty()); BOOST_CHECK(cb[0] == 4); size = cb.size(); cb.rerase(cb.begin()); BOOST_CHECK(size == cb.size() + 1); }}void basic_test() { vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(6); v.push_back(7); CB_CONTAINER<MyInteger> cb1(3, v.begin(), v.end()); CB_CONTAINER<MyInteger> cb2(10, v.begin(), v.end()); CB_CONTAINER<MyInteger> cb3(7, v.begin(), v.end()); BOOST_CHECK(cb1.full()); BOOST_CHECK(cb1.capacity() == 3); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb1[0] == 5); BOOST_CHECK(cb1[2] == 7); BOOST_CHECK(!cb2.full()); BOOST_CHECK(cb2[2] == 3); BOOST_CHECK(cb3.full()); BOOST_CHECK(cb3[0] == 1); BOOST_CHECK(cb3[6] == 7); generic_test(cb1); generic_test(cb2); generic_test(cb3);}void constructor_and_element_access_test() { CB_CONTAINER<int> cb(5, 3); cb[1] = 10; BOOST_CHECK(cb.full()); BOOST_CHECK(cb[1] == 10); BOOST_CHECK(cb[4] == 3);}void size_test() { CB_CONTAINER<MyInteger> cb1(3); cb1.push_back(1); cb1.push_back(2); cb1.push_back(3); cb1.push_back(4); CB_CONTAINER<MyInteger> cb2(5); BOOST_CHECK(cb1.size() == 3); BOOST_CHECK(cb2.size() == 0); BOOST_CHECK(cb1.max_size() == cb2.max_size()); generic_test(cb1); generic_test(cb2);}void allocator_test() { CB_CONTAINER<MyInteger> cb1(10, 0); const CB_CONTAINER<MyInteger> cb2(10, 0); CB_CONTAINER<MyInteger>::allocator_type& alloc_ref = cb1.get_allocator(); CB_CONTAINER<MyInteger>::allocator_type alloc = cb2.get_allocator(); alloc_ref.max_size(); alloc.max_size(); generic_test(cb1);}void begin_and_end_test() { vector<int> v; v.push_back(11); v.push_back(12); v.push_back(13); CB_CONTAINER<MyInteger> cb1(10, v.begin(), v.end()); const CB_CONTAINER<MyInteger> cb2(10, v.begin(), v.end()); CB_CONTAINER<MyInteger> cb3(10); cb3.push_back(1); cb3.push_back(2); cb3.insert(cb3.begin(), 3); int i = 0; CB_CONTAINER<MyInteger>::const_iterator it = cb3.begin(); for (; it != cb3.end(); it++) { i += *it; } CB_CONTAINER<MyInteger> cb4(20); const CB_CONTAINER<MyInteger> cb5(20); BOOST_CHECK(*cb1.begin() == 11); BOOST_CHECK(*cb2.begin() == 11); BOOST_CHECK(i == 6); BOOST_CHECK(cb4.begin() == cb4.end()); BOOST_CHECK(cb5.begin() == cb5.end()); generic_test(cb1); generic_test(cb3); generic_test(cb4);}void rbegin_and_rend_test() { vector<int> v; v.push_back(11); v.push_back(12); v.push_back(13); CB_CONTAINER<MyInteger> cb1(10, v.begin(), v.end()); const CB_CONTAINER<MyInteger> cb2(10, v.begin(), v.end()); CB_CONTAINER<MyInteger> cb3(3); cb3.push_back(1); cb3.push_back(2); cb3.insert(cb3.begin(), 3); cb3.push_back(1); int i = 0; CB_CONTAINER<MyInteger>::reverse_iterator it = cb3.rbegin(); for (; it != cb3.rend(); it++) { i += *it; } CB_CONTAINER<MyInteger> cb4(20); const CB_CONTAINER<MyInteger> cb5(20); BOOST_CHECK(*cb1.rbegin() == 13); BOOST_CHECK(*cb2.rbegin() == 13); BOOST_CHECK(i == 4); BOOST_CHECK(cb4.rbegin() == cb4.rend()); BOOST_CHECK(cb5.rbegin() == cb5.rend()); generic_test(cb1); generic_test(cb3); generic_test(cb4);}void element_access_and_insert_test() { CB_CONTAINER<MyInteger> cb(3); cb.push_back(1); cb.push_back(2); cb.insert(cb.begin(), 3); cb.push_back(4); const CB_CONTAINER<MyInteger> ccb = cb; BOOST_CHECK(cb[0] == 1); BOOST_CHECK(cb[1] == 2); BOOST_CHECK(cb[2] == 4); BOOST_CHECK(ccb[2] == 4); generic_test(cb);}void at_test() {#if !defined(BOOST_NO_EXCEPTIONS) CB_CONTAINER<MyInteger> cb(3); cb.push_back(1); try { BOOST_CHECK(cb.at(0) == 1); } catch (out_of_range&) { BOOST_ERROR("An unexpected exception has been thrown!"); } BOOST_CHECK_THROW(cb.at(2), out_of_range); generic_test(cb);#endif // #if !defined(BOOST_NO_EXCEPTIONS)}void front_and_back_test() { CB_CONTAINER<MyInteger> cb(1); cb.push_back(2); cb.push_back(3); BOOST_CHECK(cb.front() == cb.back()); BOOST_CHECK(cb.back() == 3); generic_test(cb);}void linearize_test() { vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(6); v.push_back(7); v.push_back(8); v.push_back(9); v.push_back(10); v.push_back(11); v.push_back(12); CB_CONTAINER<MyInteger> cb1(10, v.begin(), v.begin() + 10); cb1.push_back(11); cb1.push_back(12); cb1.push_back(13); CB_CONTAINER<MyInteger> cb2(10, v.begin(), v.begin() + 10); cb2.push_back(11); cb2.push_back(12); cb2.push_back(13); cb2.push_back(14); cb2.push_back(15); cb2.push_back(16); cb2.push_back(17); CB_CONTAINER<MyInteger> cb3(10, v.begin(), v.begin() + 10); cb3.push_back(11); cb3.push_back(12); cb3.push_back(13); cb3.pop_front(); cb3.pop_front(); CB_CONTAINER<MyInteger> cb4(5); CB_CONTAINER<MyInteger> cb5(12, v.begin(), v.end()); cb5.push_back(13); cb5.push_back(14); cb5.push_back(15); cb5.pop_front(); cb5.pop_front(); cb5.pop_front(); cb5.pop_front(); cb5.pop_front(); cb5.pop_front(); CB_CONTAINER<MyInteger> cb6(6); cb6.push_back(-2); cb6.push_back(-1); cb6.push_back(0); cb6.push_back(1); cb6.push_back(2); cb6.push_back(3); cb6.push_back(4); cb6.push_back(5); cb6.push_back(6); cb6.pop_back(); CB_CONTAINER<MyInteger> cb7(6); cb7.push_back(0); cb7.push_back(1); cb7.push_back(2); cb7.push_back(3); cb7.push_back(4); BOOST_CHECK(!cb1.is_linearized()); BOOST_CHECK(*cb1.linearize() == 4); BOOST_CHECK(cb1.is_linearized()); BOOST_CHECK(cb1.linearize() == cb1.array_one().first); BOOST_CHECK(&cb1[0] < &cb1[1] && &cb1[1] < &cb1[2] && &cb1[2] < &cb1[3] && &cb1[3] < &cb1[4] && &cb1[4] < &cb1[5] && &cb1[5] < &cb1[6] && &cb1[6] < &cb1[7] && &cb1[7] < &cb1[8] && &cb1[8] < &cb1[9]); BOOST_CHECK(*(cb1.linearize() + 1) == 5); BOOST_CHECK(*(cb1.linearize() + 2) == 6); BOOST_CHECK(*(cb1.linearize() + 3) == 7); BOOST_CHECK(*(cb1.linearize() + 4) == 8); BOOST_CHECK(*(cb1.linearize() + 5) == 9); BOOST_CHECK(*(cb1.linearize() + 6) == 10); BOOST_CHECK(*(cb1.linearize() + 7) == 11); BOOST_CHECK(*(cb1.linearize() + 8) == 12); BOOST_CHECK(*(cb1.linearize() + 9) == 13); BOOST_CHECK(!cb2.is_linearized()); BOOST_CHECK(*cb2.linearize() == 8); BOOST_CHECK(cb2.is_linearized()); BOOST_CHECK(&cb2[0] < &cb2[1] && &cb2[1] < &cb2[2] && &cb2[2] < &cb2[3] && &cb2[3] < &cb2[4] && &cb2[4] < &cb2[5] && &cb2[5] < &cb2[6] && &cb2[6] < &cb2[7] && &cb2[7] < &cb2[8] && &cb2[8] < &cb2[9]); BOOST_CHECK(*(cb2.linearize() + 1) == 9); BOOST_CHECK(*(cb2.linearize() + 2) == 10); BOOST_CHECK(*(cb2.linearize() + 3) == 11); BOOST_CHECK(*(cb2.linearize() + 4) == 12); BOOST_CHECK(*(cb2.linearize() + 5) == 13); BOOST_CHECK(*(cb2.linearize() + 6) == 14); BOOST_CHECK(*(cb2.linearize() + 7) == 15); BOOST_CHECK(*(cb2.linearize() + 8) == 16); BOOST_CHECK(*(cb2.linearize() + 9) == 17); BOOST_CHECK(cb2.is_linearized()); BOOST_CHECK(*cb3.linearize() == 6); BOOST_CHECK(cb3.is_linearized()); BOOST_CHECK(&cb3[0] < &cb3[1] && &cb3[1] < &cb3[2] && &cb3[2] < &cb3[3] && &cb3[3] < &cb3[4] && &cb3[4] < &cb3[5] && &cb3[5] < &cb3[6] && &cb3[6] < &cb3[7]); BOOST_CHECK(*(cb3.linearize() + 1) == 7); BOOST_CHECK(*(cb3.linearize() + 2) == 8); BOOST_CHECK(*(cb3.linearize() + 3) == 9); BOOST_CHECK(*(cb3.linearize() + 4) == 10); BOOST_CHECK(*(cb3.linearize() + 5) == 11); BOOST_CHECK(*(cb3.linearize() + 6) == 12); BOOST_CHECK(*(cb3.linearize() + 7) == 13); BOOST_CHECK(cb4.linearize() == 0); BOOST_CHECK(cb4.is_linearized()); BOOST_CHECK(*cb5.linearize() == 10); BOOST_CHECK(cb5.is_linearized()); BOOST_CHECK(&cb5[0] < &cb5[1] && &cb5[1] < &cb5[2] && &cb5[2] < &cb5[3] && &cb5[3] < &cb5[4] && &cb5[4] < &cb5[5]); BOOST_CHECK(*(cb5.linearize() + 1) == 11); BOOST_CHECK(*(cb5.linearize() + 2) == 12); BOOST_CHECK(*(cb5.linearize() + 3) == 13); BOOST_CHECK(*(cb5.linearize() + 4) == 14); BOOST_CHECK(*(cb5.linearize() + 5) == 15); BOOST_CHECK(*cb6.linearize() == 1); BOOST_CHECK(cb6.is_linearized()); BOOST_CHECK(&cb6[0] < &cb6[1] && &cb6[1] < &cb6[2] && &cb6[2] < &cb6[3] && &cb6[3] < &cb6[4]); BOOST_CHECK(*(cb6.linearize() + 1) == 2); BOOST_CHECK(*(cb6.linearize() + 2) == 3); BOOST_CHECK(*(cb6.linearize() + 3) == 4); BOOST_CHECK(*(cb6.linearize() + 4) == 5); BOOST_CHECK(cb7.is_linearized()); generic_test(cb1); generic_test(cb2); generic_test(cb3); generic_test(cb4); generic_test(cb5); generic_test(cb6); generic_test(cb7);}void array_range_test() { CB_CONTAINER<MyInteger> cb(7); CB_CONTAINER<MyInteger>::array_range a1 = cb.array_one(); CB_CONTAINER<MyInteger>::array_range a2 = cb.array_two(); CB_CONTAINER<MyInteger>::const_array_range ca1 = cb.array_one(); CB_CONTAINER<MyInteger>::const_array_range ca2 = cb.array_two(); BOOST_CHECK(a1.second == 0); BOOST_CHECK(a2.second == 0); BOOST_CHECK(ca1.second == 0); BOOST_CHECK(ca2.second == 0); cb.push_back(1); cb.push_back(2); cb.push_back(3); a1 = cb.array_one(); a2 = cb.array_two(); ca1 = cb.array_one(); ca2 = cb.array_two(); BOOST_CHECK(a1.first[0] == 1); BOOST_CHECK(a1.first[2] == 3); BOOST_CHECK(ca1.first[0] == 1); BOOST_CHECK(ca1.first[2] == 3); BOOST_CHECK(a1.second == 3); BOOST_CHECK(a2.second == 0); BOOST_CHECK(ca1.second == 3); BOOST_CHECK(ca2.second == 0); cb.push_back(4); cb.push_back(5); cb.push_back(6); cb.push_back(7); cb.push_back(8); cb.push_back(9); cb.push_back(10); a1 = cb.array_one(); a2 = cb.array_two(); ca1 = cb.array_one(); ca2 = cb.array_two(); BOOST_CHECK(a1.first[0] == 4); BOOST_CHECK(a1.first[3] == 7); BOOST_CHECK(a2.first[0] == 8); BOOST_CHECK(a2.first[2] == 10); BOOST_CHECK(ca1.first[0] == 4); BOOST_CHECK(ca1.first[3] == 7); BOOST_CHECK(ca2.first[0] == 8); BOOST_CHECK(ca2.first[2] == 10); BOOST_CHECK(a1.second == 4); BOOST_CHECK(a2.second == 3); BOOST_CHECK(ca1.second == 4); BOOST_CHECK(ca2.second == 3); cb.pop_front(); cb.pop_back(); a1 = cb.array_one(); a2 = cb.array_two(); ca1 = cb.array_one(); ca2 = cb.array_two(); BOOST_CHECK(a1.first[0] == 5); BOOST_CHECK(a1.first[2] == 7); BOOST_CHECK(a2.first[0] == 8); BOOST_CHECK(a2.first[1] == 9); BOOST_CHECK(ca1.first[0] == 5); BOOST_CHECK(ca1.first[2] == 7);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -