From dc15032112fc485226a573a18139e5ce928b1755 Mon Sep 17 00:00:00 2001 From: Thomas Holloway Date: Mon, 28 Oct 2019 22:49:49 -0500 Subject: feat: Add enums exercises --- exercises/enums/enums3.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 exercises/enums/enums3.rs (limited to 'exercises/enums/enums3.rs') diff --git a/exercises/enums/enums3.rs b/exercises/enums/enums3.rs new file mode 100644 index 0000000..c5d81bf --- /dev/null +++ b/exercises/enums/enums3.rs @@ -0,0 +1,63 @@ +// enums3.rs +// Address all the TODOs to make the tests pass! + +enum Message { + // TODO: implement the message variant types based on their usage below +} + +struct Point { + x: u8, + y: u8 +} + +struct State { + color: (u8, u8, u8), + position: Point, + quit: bool +} + +impl State { + fn change_color(&mut self, color: (u8, u8, u8)) { + self.color = color; + } + + fn quit(&mut self) { + self.quit = true; + } + + fn echo(&self, s: String) { + println!("{}", s); + } + + fn move_position(&mut self, p: Point) { + self.position = p; + } + + fn process(&mut self, message: Message) { + // TODO: create a match expression to process the different message variants + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_match_message_call() { + let mut state = State{ + quit: false, + position: Point{ x: 0, y: 0 }, + color: (0, 0, 0) + }; + state.process(Message::ChangeColor(255, 0, 255)); + state.process(Message::Echo(String::from("hello world"))); + state.process(Message::Move{ x: 10, y: 15 }); + state.process(Message::Quit); + + assert_eq!(state.color, (255, 0, 255)); + assert_eq!(state.position.x, 10); + assert_eq!(state.position.y, 15); + assert_eq!(state.quit, true); + } + +} -- cgit v1.2.3