aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/packers/ut/region_packer_ut.cpp
blob: 0da6a8b773c5acd34ebcacccfe9eea944758e66b (plain) (blame)
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
#include "region_packer.h" 
#include <library/cpp/testing/unittest/registar.h>
 
template <typename TValue> 
void TestPacker() { 
    TValue values[] = {1, 2, 3, 42}; 
    TString buffer;
 
    TRegionPacker<TValue> p; 
 
    using TValues = TArrayRef<TValue>;
    TValues valueRegion = TValues(values, Y_ARRAY_SIZE(values));
    size_t sz = p.MeasureLeaf(valueRegion); 
    UNIT_ASSERT_VALUES_EQUAL(sz, 1 + sizeof(values)); 
 
    buffer.resize(sz); 
    p.PackLeaf(buffer.begin(), valueRegion, sz); 
    UNIT_ASSERT_VALUES_EQUAL(buffer[0], 4); 
 
    p.UnpackLeaf(buffer.data(), valueRegion);
    UNIT_ASSERT_EQUAL(valueRegion.data(), (const TValue*)(buffer.begin() + 1));
    UNIT_ASSERT_EQUAL(valueRegion.size(), Y_ARRAY_SIZE(values));
    UNIT_ASSERT_EQUAL(0, memcmp(values, valueRegion.data(), sizeof(values)));
} 
 
Y_UNIT_TEST_SUITE(RegionPacker) {
    Y_UNIT_TEST(Test0) {
        TestPacker<char>(); 
        TestPacker<signed char>(); 
        TestPacker<unsigned char>(); 
        TestPacker<i8>(); 
        TestPacker<ui8>(); 
        TestPacker<i16>(); 
        TestPacker<ui16>(); 
        TestPacker<i32>(); 
        TestPacker<ui32>(); 
        TestPacker<i64>(); 
        TestPacker<ui64>(); 
    } 
}