]>
git.proxmox.com Git - cargo.git/blob - vendor/flate2/src/zlib/mod.rs
7 use std
::io
::prelude
::*;
10 use rand
::{thread_rng, Rng}
;
12 use zlib
::{read, write}
;
17 let mut real
= Vec
::new();
18 let mut w
= write
::ZlibEncoder
::new(Vec
::new(), Compression
::default());
19 let v
= ::random_bytes().take(1024).collect
::<Vec
<_
>>();
21 let to_write
= &v
[..thread_rng().gen_range(0, v
.len())];
22 real
.extend(to_write
.iter().map(|x
| *x
));
23 w
.write_all(to_write
).unwrap();
25 let result
= w
.finish().unwrap();
26 let mut r
= read
::ZlibDecoder
::new(&result
[..]);
27 let mut ret
= Vec
::new();
28 r
.read_to_end(&mut ret
).unwrap();
34 let mut data
= Vec
::new();
35 write
::ZlibEncoder
::new(&mut data
, Compression
::default())
38 let mut r
= read
::ZlibDecoder
::new(&data
[..]);
39 let mut ret
= Vec
::new();
40 r
.read_to_end(&mut ret
).unwrap();
41 assert
!(ret
== b
"foo");
46 let mut real
= Vec
::new();
47 let mut w
= write
::ZlibEncoder
::new(Vec
::new(), Compression
::default());
48 let v
= ::random_bytes().take(1024).collect
::<Vec
<_
>>();
50 let to_write
= &v
[..thread_rng().gen_range(0, v
.len())];
51 real
.extend(to_write
.iter().map(|x
| *x
));
52 w
.write_all(to_write
).unwrap();
54 let mut result
= w
.finish().unwrap();
56 let result_len
= result
.len();
59 result
.extend(v
.iter().map(|x
| *x
));
62 let mut r
= read
::ZlibDecoder
::new(&result
[..]);
63 let mut ret
= Vec
::new();
64 r
.read_to_end(&mut ret
).unwrap();
66 assert_eq
!(r
.total_in(), result_len
as u64);
71 let v
= ::random_bytes().take(1024 * 1024).collect
::<Vec
<_
>>();
72 let mut r
= read
::ZlibDecoder
::new(read
::ZlibEncoder
::new(&v
[..], Compression
::default()));
73 let mut ret
= Vec
::new();
74 r
.read_to_end(&mut ret
).unwrap();
80 let v
= ::random_bytes().take(1024 * 1024).collect
::<Vec
<_
>>();
82 write
::ZlibEncoder
::new(write
::ZlibDecoder
::new(Vec
::new()), Compression
::default());
83 w
.write_all(&v
).unwrap();
84 let w
= w
.finish().unwrap().finish().unwrap();
90 let v
= ::random_bytes().take(1024 * 1024).collect
::<Vec
<_
>>();
91 let mut w
= write
::ZlibEncoder
::new(Vec
::new(), Compression
::default());
92 w
.write_all(&v
).unwrap();
93 let data
= w
.finish().unwrap();
96 let (mut a
, mut b
, mut c
) = (Vec
::new(), Vec
::new(), Vec
::new());
97 let mut r
= read
::ZlibDecoder
::new(&data
[..]);
98 r
.read_to_end(&mut a
).unwrap();
100 r
.read_to_end(&mut b
).unwrap();
102 let mut r
= read
::ZlibDecoder
::new(&data
[..]);
103 r
.read_to_end(&mut c
).unwrap();
104 assert
!(a
== b
&& b
== c
&& c
== v
);
108 let mut w
= write
::ZlibDecoder
::new(Vec
::new());
109 w
.write_all(&data
).unwrap();
110 let a
= w
.reset(Vec
::new()).unwrap();
111 w
.write_all(&data
).unwrap();
112 let b
= w
.finish().unwrap();
114 let mut w
= write
::ZlibDecoder
::new(Vec
::new());
115 w
.write_all(&data
).unwrap();
116 let c
= w
.finish().unwrap();
117 assert
!(a
== b
&& b
== c
&& c
== v
);
123 // regress tests: previously caused a panic on drop
124 let mut out
: Vec
<u8> = Vec
::new();
125 let data
: Vec
<u8> = (0..255).cycle().take(1024).collect();
126 let mut w
= write
::ZlibDecoder
::new(&mut out
);
127 match w
.write_all(&data
[..]) {
128 Ok(_
) => panic
!("Expected an error to be returned!"),
129 Err(e
) => assert_eq
!(e
.kind(), io
::ErrorKind
::InvalidInput
),
135 ::quickcheck
::quickcheck(test
as fn(_
) -> _
);
137 fn test(v
: Vec
<u8>) -> bool
{
139 read
::ZlibDecoder
::new(read
::ZlibEncoder
::new(&v
[..], Compression
::default()));
140 let mut v2
= Vec
::new();
141 r
.read_to_end(&mut v2
).unwrap();
148 ::quickcheck
::quickcheck(test
as fn(_
) -> _
);
150 fn test(v
: Vec
<u8>) -> bool
{
151 let mut w
= write
::ZlibEncoder
::new(
152 write
::ZlibDecoder
::new(Vec
::new()),
153 Compression
::default(),
155 w
.write_all(&v
).unwrap();
156 v
== w
.finish().unwrap().finish().unwrap()