summaryrefslogtreecommitdiff
path: root/exercises/enums/enums3.rs
diff options
context:
space:
mode:
authorThomas Holloway <nyxtom@gmail.com>2019-10-28 22:49:49 -0500
committerThomas Holloway <nyxtom@gmail.com>2019-10-28 22:49:49 -0500
commitdc15032112fc485226a573a18139e5ce928b1755 (patch)
tree9a54577ded6adb2dc67df6b9f6e0980008cf817e /exercises/enums/enums3.rs
parent2191ef7eee2f0d7bb006d2174ba5bdd4057fd3c4 (diff)
feat: Add enums exercises
Diffstat (limited to 'exercises/enums/enums3.rs')
-rw-r--r--exercises/enums/enums3.rs63
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);
+ }
+
+}