]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/read_zero_byte_vec.rs
Merge commit 'd7b5cbf065b88830ca519adcb73fad4c0d24b1c7' into clippyup
[rust.git] / src / tools / clippy / tests / ui / read_zero_byte_vec.rs
1 #![warn(clippy::read_zero_byte_vec)]
2 #![allow(clippy::unused_io_amount)]
3 use std::fs::File;
4 use std::io;
5 use std::io::prelude::*;
6
7 extern crate futures;
8 use futures::io::{AsyncRead, AsyncReadExt};
9 use tokio::io::{AsyncRead as TokioAsyncRead, AsyncReadExt as _, AsyncWrite as TokioAsyncWrite, AsyncWriteExt as _};
10
11 fn test() -> io::Result<()> {
12     let cap = 1000;
13     let mut f = File::open("foo.txt").unwrap();
14
15     // should lint
16     let mut data = Vec::with_capacity(20);
17     f.read_exact(&mut data).unwrap();
18
19     // should lint
20     let mut data2 = Vec::with_capacity(cap);
21     f.read_exact(&mut data2)?;
22
23     // should lint
24     let mut data3 = Vec::new();
25     f.read_exact(&mut data3)?;
26
27     // should lint
28     let mut data4 = vec![];
29     let _ = f.read(&mut data4)?;
30
31     // should lint
32     let _ = {
33         let mut data5 = Vec::new();
34         f.read(&mut data5)
35     };
36
37     // should lint
38     let _ = {
39         let mut data6: Vec<u8> = Default::default();
40         f.read(&mut data6)
41     };
42
43     // should not lint
44     let mut buf = [0u8; 100];
45     f.read(&mut buf)?;
46
47     // should not lint
48     let mut empty = vec![];
49     let mut data7 = vec![];
50     f.read(&mut empty);
51
52     // should not lint
53     f.read(&mut data7);
54
55     // should not lint
56     let mut data8 = Vec::new();
57     data8.resize(100, 0);
58     f.read_exact(&mut data8)?;
59
60     // should not lint
61     let mut data9 = vec![1, 2, 3];
62     f.read_exact(&mut data9)?;
63
64     Ok(())
65 }
66
67 async fn test_futures<R: AsyncRead + Unpin>(r: &mut R) {
68     // should lint
69     let mut data = Vec::new();
70     r.read(&mut data).await.unwrap();
71
72     // should lint
73     let mut data2 = Vec::new();
74     r.read_exact(&mut data2).await.unwrap();
75 }
76
77 async fn test_tokio<R: TokioAsyncRead + Unpin>(r: &mut R) {
78     // should lint
79     let mut data = Vec::new();
80     r.read(&mut data).await.unwrap();
81
82     // should lint
83     let mut data2 = Vec::new();
84     r.read_exact(&mut data2).await.unwrap();
85 }
86
87 fn main() {}