File: test_binary_buffer.cpp

package info (click to toggle)
libstxxl 1.4.1-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 45,101; ansic: 4,071; perl: 610; sh: 555; xml: 174; makefile: 18
file content (90 lines) | stat: -rw-r--r-- 2,307 bytes parent folder | download | duplicates (4)
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
/***************************************************************************
 *  tests/common/test_binary_buffer.cpp
 *
 *  Part of the STXXL. See http://stxxl.sourceforge.net
 *
 *  Copyright (C) 2014 Timo Bingmann <tb@panthema.net>
 *
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or copy at
 *  http://www.boost.org/LICENSE_1_0.txt)
 **************************************************************************/

#include <stxxl/bits/common/binary_buffer.h>
#include <stxxl/bits/verbose.h>

void test1()
{
//! [serialize]
    // construct a binary blob
    stxxl::binary_buffer bb;
    {
        bb.put<unsigned int>(1);
        bb.put_string("test");

        bb.put_varint(42);
        bb.put_varint(12345678);

        // add a sub block
        stxxl::binary_buffer sub;
        sub.put_string("sub block");
        sub.put_varint(6 * 9);

        bb.put_string(sub);
    }
//! [serialize]

    // read binary block and verify content

    stxxl::binary_buffer_ref bbr = bb;

    const unsigned char bb_data[] = {
        // bb.put<unsigned int>(1)
        0x01, 0x00, 0x00, 0x00,
        // bb.put_string("test")
        0x04, 0x74, 0x65, 0x73, 0x74,
        // bb.put_varint(42);
        0x2a,
        // bb.put_varint(12345678);
        0xce, 0xc2, 0xf1, 0x05,
        // begin sub block (length)
        0x0b,
        // sub.put_string("sub block");
        0x09, 0x73, 0x75, 0x62, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
        // sub.put_varint(6 * 9);
        0x36,
    };

    stxxl::binary_buffer_ref bb_verify(bb_data, sizeof(bb_data));

    if (bbr != bb_verify)
        std::cout << bbr.str();

    STXXL_CHECK(bbr == bb_verify);

//! [deserialize]
    // read binary block using binary_reader

    stxxl::binary_reader br(bb);

    STXXL_CHECK(br.get<unsigned int>() == 1);
    STXXL_CHECK(br.get_string() == "test");
    STXXL_CHECK(br.get_varint() == 42);
    STXXL_CHECK(br.get_varint() == 12345678);

    {
        stxxl::binary_reader sub_br = br.get_binary_buffer_ref();
        STXXL_CHECK(sub_br.get_string() == "sub block");
        STXXL_CHECK(sub_br.get_varint() == 6 * 9);
        STXXL_CHECK(sub_br.empty());
    }

    STXXL_CHECK(br.empty());
//! [deserialize]
}

int main(int, char**)
{
    test1();
    return 0;
}