diff options
| author | Thomas Holloway <nyxtom@gmail.com> | 2019-10-28 22:49:49 -0500 |
|---|---|---|
| committer | Thomas Holloway <nyxtom@gmail.com> | 2019-10-28 22:49:49 -0500 |
| commit | dc15032112fc485226a573a18139e5ce928b1755 (patch) | |
| tree | 9a54577ded6adb2dc67df6b9f6e0980008cf817e /exercises/enums/enums3.rs | |
| parent | 2191ef7eee2f0d7bb006d2174ba5bdd4057fd3c4 (diff) | |
feat: Add enums exercises
Diffstat (limited to 'exercises/enums/enums3.rs')
| -rw-r--r-- | exercises/enums/enums3.rs | 63 |
1 files changed, 63 insertions, 0 deletions
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); + } + +} |
