aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/data/databuffer/databuffer_test.cpp
blob: 84ba70685ea2f8a54c04165b646675737a2d501d (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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/size_literals.h>
#include <vespa/vespalib/data/databuffer.h>
#include <iostream>

using namespace vespalib;

class Test : public vespalib::TestApp {
private:
    void testBasic();
public:
    int Main() override {
        TEST_INIT("databuffer_test");

        testBasic();           TEST_FLUSH();

        TEST_DONE();
    }
};

TEST_APPHOOK(Test);

void
Test::testBasic()
{
    DataBuffer a(50);
    EXPECT_EQUAL(256u, a.getBufSize());
    EXPECT_EQUAL(a.getFreeLen(), a.getBufSize());
    a.ensureFree(1000);
    EXPECT_EQUAL(1_Ki, a.getBufSize());
    EXPECT_EQUAL(a.getFreeLen(), a.getBufSize());
    EXPECT_EQUAL(0u, a.getDeadLen());
    EXPECT_EQUAL(0u, a.getDataLen());
    EXPECT_EQUAL(a.getData(), a.getDead());
    EXPECT_EQUAL(a.getData(), a.getFree());
    EXPECT_EQUAL(a.getBufSize(), a.getFreeLen());
    a.assertValid();

    a.writeInt16(7);
    EXPECT_EQUAL(0u, a.getDeadLen());
    EXPECT_EQUAL(2u, a.getDataLen());
    EXPECT_EQUAL(a.getBufSize()-2, a.getFreeLen());
    EXPECT_EQUAL(a.getData(), a.getDead());
    EXPECT_EQUAL(a.getData()+2, a.getFree());
    a.clear();
    EXPECT_EQUAL(0u, a.getDeadLen());
    EXPECT_EQUAL(0u, a.getDataLen());
    EXPECT_EQUAL(a.getBufSize(), a.getFreeLen());

    a.writeInt8(0xaau);
    EXPECT_EQUAL(1u, a.getDataLen());    
    EXPECT_EQUAL(0xaau, a.peekInt8(0));
    EXPECT_EQUAL(1u, a.getDataLen());    
    EXPECT_EQUAL(0xaau, a.readInt8());
    EXPECT_EQUAL(0u, a.getDataLen());

    a.writeInt16(0xaabbu);
    EXPECT_EQUAL(2u, a.getDataLen());
    EXPECT_EQUAL(0xaabbu, a.peekInt16(0));
    EXPECT_EQUAL(2u, a.getDataLen());
    EXPECT_EQUAL(0xaabbu, a.readInt16());
    EXPECT_EQUAL(0u, a.getDataLen());
    a.writeInt16(0xaabbu);
    EXPECT_EQUAL(2u, a.getDataLen());
    EXPECT_EQUAL(0xbbaau, a.peekInt16Reverse(0));
    EXPECT_EQUAL(2u, a.getDataLen());
    EXPECT_EQUAL(0xbbaau, a.readInt16Reverse());
    EXPECT_EQUAL(0u, a.getDataLen());
    
    a.writeInt32(0xaabbccddu);
    EXPECT_EQUAL(4u, a.getDataLen());    
    EXPECT_EQUAL(0xaabbccddu, a.peekInt32(0));
    EXPECT_EQUAL(4u, a.getDataLen());    
    EXPECT_EQUAL(0xaabbccddu, a.readInt32());
    EXPECT_EQUAL(0u, a.getDataLen());
    a.writeInt32(0xaabbccddu);
    EXPECT_EQUAL(4u, a.getDataLen());    
    EXPECT_EQUAL(0xddccbbaau, a.peekInt32Reverse(0));
    EXPECT_EQUAL(4u, a.getDataLen());    
    EXPECT_EQUAL(0xddccbbaau, a.readInt32Reverse());
    EXPECT_EQUAL(0u, a.getDataLen());

    a.writeInt64(0xaabbccddeeff9988ul);
    EXPECT_EQUAL(8u, a.getDataLen());    
    EXPECT_EQUAL(0xaabbccddeeff9988ul, a.peekInt64(0));
    EXPECT_EQUAL(8u, a.getDataLen());    
    EXPECT_EQUAL(0xaabbccddeeff9988ul, a.readInt64());
    EXPECT_EQUAL(0u, a.getDataLen());
    a.writeInt64(0xaabbccddeeff9988ul);
    EXPECT_EQUAL(8u, a.getDataLen());
    EXPECT_EQUAL(0x8899ffeeddccbbaaul, a.peekInt64Reverse(0));
    EXPECT_EQUAL(8u, a.getDataLen());    
    EXPECT_EQUAL(0x8899ffeeddccbbaaul, a.readInt64Reverse());
    EXPECT_EQUAL(0u, a.getDataLen());

    a.writeFloat(8.9f);
    EXPECT_EQUAL(4u, a.getDataLen());    
    EXPECT_EQUAL(8.9f, a.readFloat());
    EXPECT_EQUAL(0u, a.getDataLen());

    a.writeDouble(8.9);
    EXPECT_EQUAL(8u, a.getDataLen());    
    EXPECT_EQUAL(8.9, a.readDouble());
    EXPECT_EQUAL(0u, a.getDataLen());

    const char *c = "abc";
    char b[3];
    a.writeBytes(c, 3);
    EXPECT_EQUAL(3u, a.getDataLen());
    EXPECT_EQUAL(0, memcmp(c, a.getData(), a.getDataLen()));
    a.peekBytes(b, 3, 0);
    EXPECT_EQUAL(3u, a.getDataLen());
    EXPECT_EQUAL(0, memcmp(c, b, sizeof(b)));
    a.readBytes(b, sizeof(b));
    EXPECT_EQUAL(0u, a.getDataLen());
    EXPECT_EQUAL(0, memcmp(c, b, sizeof(b)));

    a.writeInt64(67);
    EXPECT_EQUAL(8u, a.getDataLen());
    EXPECT_FALSE(a.shrink(1025));
    EXPECT_FALSE(a.shrink(7));
    EXPECT_TRUE(a.shrink(16));
    EXPECT_EQUAL(8u, a.getDataLen());
    EXPECT_EQUAL(16u, a.getBufSize());

    a.writeInt64(89);
    EXPECT_EQUAL(16u, a.getDataLen());
    EXPECT_EQUAL(16u, a.getBufSize());
    EXPECT_EQUAL(0u, a.getDeadLen());
    EXPECT_EQUAL(67u, a.readInt64());
    EXPECT_EQUAL(8u, a.getDataLen());
    EXPECT_EQUAL(8u, a.getDeadLen());
    EXPECT_EQUAL(16u, a.getBufSize());
    a.pack(16);
    EXPECT_EQUAL(8u, a.getDataLen());
    EXPECT_EQUAL(0u, a.getDeadLen());
    EXPECT_EQUAL(256u, a.getBufSize());
    EXPECT_EQUAL(89u, a.readInt64());
    EXPECT_EQUAL(0u, a.getDataLen());
    EXPECT_EQUAL(256u, a.getBufSize());
}