コード例 #1
0
int main()
{
    {
        // Test default constructor
        CircularBuffer buf;
        std::cout << buf.size() << "\n";
    }

    {
        // Test constructor taking 1 arg: size of buffer
        CircularBuffer buf(32);
        std::cout << buf.size() << "\n";
    }

    {
        // Test constructor taking std::vector
        std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        CircularBuffer buf(v);
        std::cout << buf.size() << "\n";
    }

    {
        // Test copy constructor
        std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        CircularBuffer buf(v);
        CircularBuffer buf2(buf);
        std::cout << buf.size() << ", " << buf2.size() << "\n";
    }

    {
        // Test move constructor
        std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        CircularBuffer buf(v);
        CircularBuffer buf2(std::move(buf));
        std::cout << buf.size() << ", " << buf2.size() << "\n";
    }

    {
        // Test copy assignment
        std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        CircularBuffer buf(v);
        CircularBuffer buf2(3);
        std::cout << buf.size() << ", " << buf2.size() << " -> ";
        buf2 = buf;
        std::cout << buf.size() << ", " << buf2.size() << "\n";
    }

    {
        // Test move assignment
        std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        CircularBuffer buf(v);
        CircularBuffer buf2(3);
        std::cout << buf.size() << ", " << buf2.size() << " -> ";
        buf2 = std::move(buf);
        std::cout << buf.size() << ", " << buf2.size() << "\n";
    }

    {
        // Test indexing
        CircularBuffer buf(10);
        buf[0] = buf[2] = buf[4] = buf[6] = buf[8] = 1;
        buf[1] = buf[3] = buf[5] = buf[7] = buf[9] = 2;
        std::cout << buf.at(1) << " " << buf[6] << "\n";
        std::cout << buf.at(32) << " " << buf[127] << "\n";
    }

    {
        // Test indexing const object
        const CircularBuffer buf({1, 2, 3, 4, 5});
        std::cout << buf.at(1) << " " << buf[8] << "\n";
    }

    {
        // Test size (already used above)
        CircularBuffer buf(3);
        if (buf.size() != 3)
            std::cout << "Incorrect size!\n";
        else
            std::cout << "Correct size!\n";
    }

    {
        // Test clear
        CircularBuffer buf(5);
        std::cout << buf.size() << " -> ";
        buf.clear();
        std::cout << buf.size() << "\n";
    }

    {
        // Test swap
        CircularBuffer buf({1, 2, 3, 4, 5});
        CircularBuffer buf2({6, 7, 8, 9, 0});
        std::cout << buf[0] << " " << buf[4] << " : " << buf2[0] << " "
                  << buf2[4] << " -> ";
        buf.swap(buf2);
        std::cout << buf[0] << " " << buf[4] << " : " << buf2[0] << " "
                  << buf2[4] << "\n";
    }

    {
        // Test insert
        CircularBuffer buf;
        buf.insert(0, 1);
        buf.insert(0, 2);
        buf.insert(0, 3);
        std::cout << buf.size() << " " << buf[2] << "\n";
        buf.insert(200, 4);
        std::cout << buf.size() << " " << buf[2] << "\n";
    }

    {
        // Test move-insert
        CircularBuffer buf;
        int x = 3;
        buf.insert(0, std::move(x));
        int y = 2;
        buf.insert(0, std::move(y));
        std::cout << buf[0] << " " << buf[1] << " " << buf[2] << "\n";
    }

    {
        // Test erase
        CircularBuffer buf({1, 2, 3, 4});
        std::cout << buf[0] << " " << buf.size() << " -> ";
        buf.erase(0);
        std::cout << buf[0] << " " << buf.size() << "\n";
    }

    return 0;
}