⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.ipp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 IPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -