#include "buffer.h"
#include <library/cpp/testing/unittest/registar.h>
#include <util/generic/buffer.h>
#include <cstring>
#include "str.h"
Y_UNIT_TEST_SUITE(TBufferTest) {
Y_UNIT_TEST(Transfer) {
TBuffer buffer("razrazraz", 9);
TBufferInput input(buffer);
input.Skip(3);
TStringStream output;
TransferData(&input, &output);
UNIT_ASSERT_VALUES_EQUAL(output.Str(), "razraz");
}
Y_UNIT_TEST(ReadTo) {
TBuffer buffer("1234567890", 10);
TBufferInput input(buffer);
TString tmp;
UNIT_ASSERT_VALUES_EQUAL(input.ReadTo(tmp, '3'), 3);
UNIT_ASSERT_VALUES_EQUAL(tmp, "12");
UNIT_ASSERT_VALUES_EQUAL(input.ReadTo(tmp, 'z'), 7);
UNIT_ASSERT_VALUES_EQUAL(tmp, "4567890");
}
Y_UNIT_TEST(WriteViaNextAndUndo) {
TBuffer buffer;
TBufferOutput output(buffer);
TString str;
for (size_t i = 0; i < 10000; ++i) {
str.push_back('a' + (i % 20));
}
size_t written = 0;
void* ptr = nullptr;
while (written < str.size()) {
size_t bufferSize = output.Next(&ptr);
UNIT_ASSERT(ptr && bufferSize > 0);
size_t toWrite = Min(bufferSize, str.size() - written);
memcpy(ptr, str.begin() + written, toWrite);
written += toWrite;
if (toWrite < bufferSize) {
output.Undo(bufferSize - toWrite);
}
}
UNIT_ASSERT(0 == memcmp(buffer.data(), str.begin(), buffer.size()));
}
Y_UNIT_TEST(Write) {
TBuffer buffer;
TBufferOutput output(buffer);
output << "1"
<< "22"
<< "333"
<< "4444"
<< "55555";
UNIT_ASSERT(0 == memcmp(buffer.data(), "1"
"22"
"333"
"4444"
"55555",
buffer.size()));
}
Y_UNIT_TEST(WriteChars) {
TBuffer buffer;
TBufferOutput output(buffer);
output << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9' << '0';
UNIT_ASSERT(0 == memcmp(buffer.data(), "1234567890", buffer.size()));
}
}