
While working on #122661, some of these started triggering our "unnecessary parens" lints due to a change in the `assert!` desugaring. A cursory search identified a few more. Some of these have been carried from before 1.0, were a bulk rename from the previous name of `assert!` left them in that state. I went and removed as many of these unnecessary parens as possible in order to have fewer annoyances in the future if we make the lint smarter.
107 lines
2.7 KiB
Rust
107 lines
2.7 KiB
Rust
//@ run-pass
|
|
#![allow(dead_code)]
|
|
#![allow(non_camel_case_types)]
|
|
|
|
use std::cmp;
|
|
|
|
#[derive(Copy, Clone, Debug)]
|
|
enum cat_type { tuxedo, tabby, tortoiseshell }
|
|
|
|
impl cmp::PartialEq for cat_type {
|
|
fn eq(&self, other: &cat_type) -> bool {
|
|
((*self) as usize) == ((*other) as usize)
|
|
}
|
|
fn ne(&self, other: &cat_type) -> bool { !(*self).eq(other) }
|
|
}
|
|
|
|
// Very silly -- this just returns the value of the name field
|
|
// for any isize value that's less than the meows field
|
|
|
|
// ok: T should be in scope when resolving the trait ref for map
|
|
struct cat<T> {
|
|
// Yes, you can have negative meows
|
|
meows : isize,
|
|
|
|
how_hungry : isize,
|
|
name : T,
|
|
}
|
|
|
|
impl<T> cat<T> {
|
|
pub fn speak(&mut self) { self.meow(); }
|
|
|
|
pub fn eat(&mut self) -> bool {
|
|
if self.how_hungry > 0 {
|
|
println!("OM NOM NOM");
|
|
self.how_hungry -= 2;
|
|
return true;
|
|
} else {
|
|
println!("Not hungry!");
|
|
return false;
|
|
}
|
|
}
|
|
fn len(&self) -> usize { self.meows as usize }
|
|
fn is_empty(&self) -> bool { self.meows == 0 }
|
|
fn clear(&mut self) {}
|
|
fn contains_key(&self, k: &isize) -> bool { *k <= self.meows }
|
|
|
|
fn find(&self, k: &isize) -> Option<&T> {
|
|
if *k <= self.meows {
|
|
Some(&self.name)
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
fn insert(&mut self, k: isize, _: T) -> bool {
|
|
self.meows += k;
|
|
true
|
|
}
|
|
|
|
fn find_mut(&mut self, _k: &isize) -> Option<&mut T> { panic!() }
|
|
|
|
fn remove(&mut self, k: &isize) -> bool {
|
|
if self.find(k).is_some() {
|
|
self.meows -= *k; true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
|
|
fn pop(&mut self, _k: &isize) -> Option<T> { panic!() }
|
|
|
|
fn swap(&mut self, _k: isize, _v: T) -> Option<T> { panic!() }
|
|
}
|
|
|
|
impl<T> cat<T> {
|
|
pub fn get(&self, k: &isize) -> &T {
|
|
match self.find(k) {
|
|
Some(v) => { v }
|
|
None => { panic!("epic fail"); }
|
|
}
|
|
}
|
|
|
|
pub fn new(in_x: isize, in_y: isize, in_name: T) -> cat<T> {
|
|
cat{meows: in_x, how_hungry: in_y, name: in_name }
|
|
}
|
|
}
|
|
|
|
impl<T> cat<T> {
|
|
fn meow(&mut self) {
|
|
self.meows += 1;
|
|
println!("Meow {}", self.meows);
|
|
if self.meows % 5 == 0 {
|
|
self.how_hungry += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn main() {
|
|
let mut nyan: cat<String> = cat::new(0, 2, "nyan".to_string());
|
|
for _ in 1_usize..5 { nyan.speak(); }
|
|
assert_eq!(*nyan.find(&1).unwrap(), "nyan".to_string());
|
|
assert_eq!(nyan.find(&10), None);
|
|
let mut spotty: cat<cat_type> = cat::new(2, 57, cat_type::tuxedo);
|
|
for _ in 0_usize..6 { spotty.speak(); }
|
|
assert_eq!(spotty.len(), 8);
|
|
assert!(spotty.contains_key(&2));
|
|
assert_eq!(spotty.get(&3), &cat_type::tuxedo);
|
|
}
|