rust/tests/ui/let_unit.rs
Joonas Koivunen 171f7b4eb7 tests/ui/let_unit: fix comment and example code
The previous version would had deadlocked as the Sender remained alive
and iterator would had never became complete. Just in case someone
decided to run it.
2017-08-18 17:29:05 +03:00

50 lines
1 KiB
Rust

#![feature(plugin)]
#![plugin(clippy)]
#![warn(let_unit_value)]
#![allow(unused_variables)]
macro_rules! let_and_return {
($n:expr) => {{
let ret = $n;
}}
}
fn main() {
let _x = println!("x");
let _y = 1; // this is fine
let _z = ((), 1); // this as well
if true {
let _a = ();
}
consume_units_with_for_loop(); // should be fine as well
let_and_return!(()) // should be fine
}
// Related to issue #1964
fn consume_units_with_for_loop() {
// `for_let_unit` lint should not be triggered by consuming them using for loop.
let v = vec![(), (), ()];
let mut count = 0;
for _ in v {
count += 1;
}
assert_eq!(count, 3);
// Same for consuming from some other Iterator<Item = ()>.
let (tx, rx) = ::std::sync::mpsc::channel();
tx.send(()).unwrap();
drop(tx);
count = 0;
for _ in rx.iter() {
count += 1;
}
assert_eq!(count, 1);
}
#[derive(Copy, Clone)]
pub struct ContainsUnit(()); // should be fine