#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); } }