File: test_buffer.cpp

package info (click to toggle)
protozero 1.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,548 kB
  • sloc: cpp: 20,364; sh: 18; makefile: 14
file content (50 lines) | stat: -rw-r--r-- 1,586 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

#include <buffer.hpp>

#include <algorithm>
#include <array>
#include <stdexcept>
#include <type_traits>

TEMPLATE_TEST_CASE("Use various buffer types", "", buffer_test_string, buffer_test_vector, buffer_test_array, buffer_test_external) {
    TestType tt;
    auto* buffer = &tt.buffer();

    using bc = protozero::buffer_customization<typename TestType::type>;

    REQUIRE(bc::size(buffer) == 0);

    bc::append(buffer, "abc def ghi", 11);
    REQUIRE(bc::size(buffer) == 11);

    bc::append_zeros(buffer, 3);
    REQUIRE(bc::size(buffer) == 14);

    bc::resize(buffer, 11);
    REQUIRE(bc::size(buffer) == 11);

    bc::append(buffer, " jkl", 4);
    REQUIRE(bc::size(buffer) == 15);

    bc::erase_range(buffer, 4, 8);
    REQUIRE(bc::size(buffer) == 11);
    REQUIRE(std::equal(bc::at_pos(buffer, 0),
                       bc::at_pos(buffer, bc::size(buffer)),
                       "abc ghi jkl"));

    buffer->push_back(' ');
    buffer->push_back('x');
    buffer->push_back('y');
    REQUIRE(bc::size(buffer) == 14);
    REQUIRE(std::equal(bc::at_pos(buffer, 0),
                       bc::at_pos(buffer, bc::size(buffer)),
                       "abc ghi jkl xy"));

    REQUIRE(std::equal(buffer->cbegin(), buffer->cend(), "abc ghi jkl xy"));
}

TEST_CASE("fixed_size_buffer_adaptor has limited size") {
    std::array<char, 5> data = {{0}};
    protozero::fixed_size_buffer_adaptor fsba{&*data.begin(), data.size()};
    REQUIRE_THROWS_AS(protozero::buffer_customization<protozero::fixed_size_buffer_adaptor>::append(&fsba, "0123456789", 10), std::length_error);
}