| //@ build-pass |
| #![allow(unused_must_use)] |
| #![allow(dead_code)] |
| #![allow(unused_mut)] |
| #![allow(non_camel_case_types)] |
| |
| // Map representation |
| |
| use std::fmt; |
| use std::io::prelude::*; |
| use square::{bot, wall, rock, lambda, closed_lift, open_lift, earth, empty}; |
| |
| enum square { |
| bot, |
| wall, |
| rock, |
| lambda, |
| closed_lift, |
| open_lift, |
| earth, |
| empty |
| } |
| |
| impl fmt::Debug for square { |
| fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| write!(f, "{}", match *self { |
| bot => { "R".to_string() } |
| wall => { "#".to_string() } |
| rock => { "*".to_string() } |
| lambda => { "\\".to_string() } |
| closed_lift => { "L".to_string() } |
| open_lift => { "O".to_string() } |
| earth => { ".".to_string() } |
| empty => { " ".to_string() } |
| }) |
| } |
| } |
| |
| fn square_from_char(c: char) -> square { |
| match c { |
| 'R' => { bot } |
| '#' => { wall } |
| '*' => { rock } |
| '\\' => { lambda } |
| 'L' => { closed_lift } |
| 'O' => { open_lift } |
| '.' => { earth } |
| ' ' => { empty } |
| _ => { |
| println!("invalid square: {}", c); |
| panic!() |
| } |
| } |
| } |
| |
| fn read_board_grid<rdr:'static + Read>(mut input: rdr) |
| -> Vec<Vec<square>> { |
| let mut input: &mut dyn Read = &mut input; |
| let mut grid = Vec::new(); |
| let mut line = [0; 10]; |
| input.read(&mut line); |
| let mut row = Vec::new(); |
| for c in &line { |
| row.push(square_from_char(*c as char)) |
| } |
| grid.push(row); |
| let width = grid[0].len(); |
| for row in &grid { assert_eq!(row.len(), width) } |
| grid |
| } |
| |
| mod test { |
| #[test] |
| pub fn trivial_to_string() { |
| assert_eq!(lambda.to_string(), "\\") |
| } |
| } |
| |
| pub fn main() {} |