| //@ run-pass | 
 | #![allow(dead_code)] | 
 | #![allow(non_camel_case_types)] | 
 |  | 
 | struct cat { | 
 |     meows : usize, | 
 |  | 
 |     how_hungry : isize, | 
 |     name : String, | 
 | } | 
 |  | 
 | impl cat { | 
 |     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; | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | impl cat { | 
 |     fn meow(&mut self) { | 
 |         println!("Meow"); | 
 |         self.meows += 1_usize; | 
 |         if self.meows % 5_usize == 0_usize { | 
 |             self.how_hungry += 1; | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | fn cat(in_x : usize, in_y : isize, in_name: String) -> cat { | 
 |     cat { | 
 |         meows: in_x, | 
 |         how_hungry: in_y, | 
 |         name: in_name | 
 |     } | 
 | } | 
 |  | 
 | pub fn main() { | 
 |   let mut nyan = cat(0_usize, 2, "nyan".to_string()); | 
 |   nyan.eat(); | 
 |   assert!(!nyan.eat()); | 
 |   for _ in 1_usize..10_usize { nyan.speak(); }; | 
 |   assert!(nyan.eat()); | 
 | } |