summaryrefslogtreecommitdiff
path: root/modules/core/tests/array_buffer.cpp
blob: 97854245c0eea9704c6b12d42cc920dc4082b88c (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "../c++/test/suite.hpp"
#include "../c++/buffer.hpp"

namespace {
void do_array_consistency_checks(const saw::array_buffer& buff){
		SAW_EXPECT(buff.write_segment_length() == buff.write_composite_length(), "Unexpected segmented write size.");
		SAW_EXPECT(buff.read_segment_length() == buff.read_composite_length(), "Unexpected segmented read size.");
}

SAW_TEST("Array Buffer Construct") {
		using namespace saw;

		uint64_t size = 1024u;
		array_buffer buff{size};

		SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
		SAW_EXPECT(buff.write_position() == 0u, "Unexpected write position");
		SAW_EXPECT(buff.write_composite_length() == size, "Unexpected write size.");
		SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected read size.");
		do_array_consistency_checks(buff);
}

SAW_TEST("Array Buffer Write Advance") {
		using namespace saw;

		uint64_t size = 1024u;
		array_buffer buff{size};

		uint64_t advance = 256u;
		buff.write_advance(advance);

		SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
		SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
		SAW_EXPECT(buff.read_composite_length() == advance, "Unexpected Read composite length.");
		SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
		do_array_consistency_checks(buff);

		buff.write_advance(size-advance);
		SAW_EXPECT(buff.write_position() == (size), "Unexpected write position");
		SAW_EXPECT(buff.write_composite_length() == 0u, "Unexpected Write composite length.");
		do_array_consistency_checks(buff);
}

SAW_TEST("Array Buffer Write Require Length") {
		using namespace saw;

		uint64_t size = 1024u;
		array_buffer buff{size};
		
		error err = buff.write_require_length(2u*size);
		
		SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
		SAW_EXPECT(buff.write_position() == 0u, "Unexpected write position");
		SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected Read composite length.");
		SAW_EXPECT(buff.write_composite_length() == 2u*size, std::string{"Unexpected Write composite length. Size "} + std::to_string(buff.write_composite_length()));
		do_array_consistency_checks(buff);
}

SAW_TEST("Array Buffer Write and Read Advance") {
		using namespace saw;

		uint64_t size = 1024u;
		array_buffer buff{size};

		uint64_t advance = 256u;
		buff.write_advance(advance);
		
		uint64_t read_advance = 128u;
		buff.read_advance(read_advance);

		SAW_EXPECT(buff.read_position() == read_advance, "Unexpected read position");
		SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
		SAW_EXPECT(buff.read_composite_length() == advance-read_advance, "Unexpected Read composite length.");
		SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
		do_array_consistency_checks(buff);

		buff.read_advance(read_advance);
		
		SAW_EXPECT(buff.read_position() == advance, "Unexpected read position");
		SAW_EXPECT(buff.write_position() == advance, "Unexpected write position");
		SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected Read composite length.");
		SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
		do_array_consistency_checks(buff);
}
}