123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #include <library/cpp/testing/unittest/registar.h>
- #include <util/system/datetime.h>
- #include "string.h"
- #include "vector.h"
- #include "buffer.h"
- Y_UNIT_TEST_SUITE(TBufferTest) {
- Y_UNIT_TEST(TestEraseBack) {
- TBuffer buf;
- buf.Append("1234567", 7);
- buf.Reserve(1000);
- buf.Resize(6);
- buf.EraseBack(2);
- UNIT_ASSERT_EQUAL(TString(buf.data(), buf.size()), "1234");
- }
- Y_UNIT_TEST(TestAppend) {
- const char data[] = "1234567890qwertyuiop";
- TBuffer buf(13);
- TString str;
- for (size_t i = 0; i < 10; ++i) {
- for (size_t j = 0; j < sizeof(data) - 1; ++j) {
- buf.Append(data, j);
- buf.Append('q');
- str.append(data, j);
- str.append('q');
- }
- }
- UNIT_ASSERT_EQUAL(TString(buf.data(), buf.size()), str);
- }
- Y_UNIT_TEST(TestReset) {
- char content[] = "some text";
- TBuffer buf;
- buf.Append(content, sizeof(content));
- buf.Clear();
- UNIT_ASSERT(buf.Capacity() != 0);
- buf.Append(content, sizeof(content));
- buf.Reset();
- UNIT_ASSERT_EQUAL(buf.Capacity(), 0);
- }
- Y_UNIT_TEST(TestResize) {
- char content[] = "some text";
- TBuffer buf;
- buf.Resize(10);
- UNIT_ASSERT_VALUES_EQUAL(buf.size(), 10u);
- buf.Resize(0);
- UNIT_ASSERT_VALUES_EQUAL(buf.size(), 0u);
- buf.Resize(9);
- memcpy(buf.data(), content, 9);
- UNIT_ASSERT_VALUES_EQUAL(TString(buf.data(), buf.size()), "some text");
- buf.Resize(4);
- UNIT_ASSERT_VALUES_EQUAL(TString(buf.data(), buf.size()), "some");
- }
- Y_UNIT_TEST(TestReserve) {
- TBuffer buf;
- UNIT_ASSERT_EQUAL(buf.Capacity(), 0);
- buf.Reserve(4);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 4);
- buf.Reserve(6);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 8);
- buf.Reserve(32);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 32);
- buf.Reserve(33);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 64);
- buf.Reserve(64);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 64);
- buf.Resize(128);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 128);
- buf.Append('a');
- UNIT_ASSERT_EQUAL(buf.Capacity(), 256);
- TString tmp1 = "abcdef";
- buf.Append(tmp1.data(), tmp1.size());
- UNIT_ASSERT_EQUAL(buf.Capacity(), 256);
- TString tmp2 = "30498290sfokdsflj2308w";
- buf.Resize(1020);
- buf.Append(tmp2.data(), tmp2.size());
- UNIT_ASSERT_EQUAL(buf.Capacity(), 2048);
- }
- Y_UNIT_TEST(TestShrinkToFit) {
- TBuffer buf;
- TString content = "some text";
- buf.Append(content.data(), content.size());
- UNIT_ASSERT_EQUAL(buf.Size(), 9);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 16);
- buf.ShrinkToFit();
- UNIT_ASSERT_EQUAL(buf.Size(), 9);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 9);
- UNIT_ASSERT_EQUAL(TString(buf.data(), buf.size()), content);
- const size_t MB = 1024 * 1024;
- buf.Resize(MB);
- UNIT_ASSERT_EQUAL(buf.Capacity(), MB);
- buf.ShrinkToFit();
- UNIT_ASSERT_EQUAL(buf.Capacity(), MB);
- buf.Resize(MB + 100);
- UNIT_ASSERT_EQUAL(buf.Capacity(), 2 * MB);
- buf.ShrinkToFit();
- UNIT_ASSERT_EQUAL(buf.Capacity(), MB + 100);
- }
- #if 0
- Y_UNIT_TEST(TestAlignUp) {
- char content[] = "some text";
- TBuffer buf;
- buf.Append(content, sizeof(content));
- buf.AlignUp(4, '!');
- UNIT_ASSERT(buf.Size() % 4 == 0);
- UNIT_ASSERT_VALUES_EQUAL(TString(~buf, +buf), "some text!!!");
- char addContent[] = "1234";
- buf.Append(addContent, sizeof(addContent));
- buf.AlignUp(4, 'X');
- UNIT_ASSERT(buf.Size() % 4 == 0);
- UNIT_ASSERT_VALUES_EQUAL(TString(~buf, +buf), "some text!!!1234");
- }
- #endif
- #if 0
- Y_UNIT_TEST(TestSpeed) {
- const char data[] = "1234567890qwertyuiop";
- const size_t c = 100000;
- ui64 t1 = 0;
- ui64 t2 = 0;
- {
- TBuffer buf;
- t1 = MicroSeconds();
- for (size_t i = 0; i < c; ++i) {
- buf.Append(data, sizeof(data));
- }
- t1 = MicroSeconds() - t1;
- }
- {
- TVector<char> buf;
- t2 = MicroSeconds();
- for (size_t i = 0; i < c; ++i) {
- buf.insert(buf.end(), data, data + sizeof(data));
- }
- t2 = MicroSeconds() - t2;
- }
- UNIT_ASSERT(t1 < t2);
- }
- #endif
- Y_UNIT_TEST(TestFillAndChop) {
- TBuffer buf;
- buf.Append("Some ", 5);
- buf.Fill('!', 5);
- buf.Append(" text.", 6);
- UNIT_ASSERT_VALUES_EQUAL(TString(buf.data(), buf.size()), "Some !!!!! text.");
- buf.Chop(5, 6);
- UNIT_ASSERT_VALUES_EQUAL(TString(buf.data(), buf.size()), "Some text.");
- }
- Y_UNIT_TEST(TestComparison) {
- TBuffer buf1("abcd", 4);
- TBuffer buf2("abcde", 5);
- TBuffer empty;
- UNIT_ASSERT(empty == empty);
- UNIT_ASSERT(!(empty != empty));
- UNIT_ASSERT(buf1 != buf2);
- UNIT_ASSERT(buf1 == buf1);
- buf2.EraseBack(1);
- UNIT_ASSERT(buf2 == buf1);
- }
- } // Y_UNIT_TEST_SUITE(TBufferTest)
|