summaryrefslogtreecommitdiffstats
path: root/third_party/rust/bytes-0.4.12/tests/test_chain.rs
blob: 2789e7c0602de137ca2bb9074ba2a13a36575d42 (plain)
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
extern crate bytes;
extern crate iovec;

use bytes::{Buf, BufMut, Bytes, BytesMut};
use bytes::buf::Chain;
use iovec::IoVec;
use std::io::Cursor;

#[test]
fn collect_two_bufs() {
    let a = Cursor::new(Bytes::from(&b"hello"[..]));
    let b = Cursor::new(Bytes::from(&b"world"[..]));

    let res: Vec<u8> = a.chain(b).collect();
    assert_eq!(res, &b"helloworld"[..]);
}

#[test]
fn writing_chained() {
    let mut a = BytesMut::with_capacity(64);
    let mut b = BytesMut::with_capacity(64);

    {
        let mut buf = Chain::new(&mut a, &mut b);

        for i in 0..128 {
            buf.put(i as u8);
        }
    }

    assert_eq!(64, a.len());
    assert_eq!(64, b.len());

    for i in 0..64 {
        let expect = i as u8;
        assert_eq!(expect, a[i]);
        assert_eq!(expect + 64, b[i]);
    }
}

#[test]
fn iterating_two_bufs() {
    let a = Cursor::new(Bytes::from(&b"hello"[..]));
    let b = Cursor::new(Bytes::from(&b"world"[..]));

    let res: Vec<u8> = a.chain(b).iter().collect();
    assert_eq!(res, &b"helloworld"[..]);
}

#[test]
fn vectored_read() {
    let a = Cursor::new(Bytes::from(&b"hello"[..]));
    let b = Cursor::new(Bytes::from(&b"world"[..]));

    let mut buf = a.chain(b);

    {
        let b1: &[u8] = &mut [0];
        let b2: &[u8] = &mut [0];
        let b3: &[u8] = &mut [0];
        let b4: &[u8] = &mut [0];
        let mut iovecs: [&IoVec; 4] =
            [b1.into(), b2.into(), b3.into(), b4.into()];

        assert_eq!(2, buf.bytes_vec(&mut iovecs));
        assert_eq!(iovecs[0][..], b"hello"[..]);
        assert_eq!(iovecs[1][..], b"world"[..]);
        assert_eq!(iovecs[2][..], b"\0"[..]);
        assert_eq!(iovecs[3][..], b"\0"[..]);
    }

    buf.advance(2);

    {
        let b1: &[u8] = &mut [0];
        let b2: &[u8] = &mut [0];
        let b3: &[u8] = &mut [0];
        let b4: &[u8] = &mut [0];
        let mut iovecs: [&IoVec; 4] =
            [b1.into(), b2.into(), b3.into(), b4.into()];

        assert_eq!(2, buf.bytes_vec(&mut iovecs));
        assert_eq!(iovecs[0][..], b"llo"[..]);
        assert_eq!(iovecs[1][..], b"world"[..]);
        assert_eq!(iovecs[2][..], b"\0"[..]);
        assert_eq!(iovecs[3][..], b"\0"[..]);
    }

    buf.advance(3);

    {
        let b1: &[u8] = &mut [0];
        let b2: &[u8] = &mut [0];
        let b3: &[u8] = &mut [0];
        let b4: &[u8] = &mut [0];
        let mut iovecs: [&IoVec; 4] =
            [b1.into(), b2.into(), b3.into(), b4.into()];

        assert_eq!(1, buf.bytes_vec(&mut iovecs));
        assert_eq!(iovecs[0][..], b"world"[..]);
        assert_eq!(iovecs[1][..], b"\0"[..]);
        assert_eq!(iovecs[2][..], b"\0"[..]);
        assert_eq!(iovecs[3][..], b"\0"[..]);
    }

    buf.advance(3);

    {
        let b1: &[u8] = &mut [0];
        let b2: &[u8] = &mut [0];
        let b3: &[u8] = &mut [0];
        let b4: &[u8] = &mut [0];
        let mut iovecs: [&IoVec; 4] =
            [b1.into(), b2.into(), b3.into(), b4.into()];

        assert_eq!(1, buf.bytes_vec(&mut iovecs));
        assert_eq!(iovecs[0][..], b"ld"[..]);
        assert_eq!(iovecs[1][..], b"\0"[..]);
        assert_eq!(iovecs[2][..], b"\0"[..]);
        assert_eq!(iovecs[3][..], b"\0"[..]);
    }
}