]> git.scottworley.com Git - pluta-lesnura/commitdiff
Hands
authorScott Worley <scottworley@scottworley.com>
Mon, 17 Jul 2023 05:46:07 +0000 (22:46 -0700)
committerScott Worley <scottworley@scottworley.com>
Mon, 17 Jul 2023 15:52:31 +0000 (08:52 -0700)
src/lib.rs

index 4496f80bdb898a5448f6184821a4ad1bc937836b..e2604dca8c6664a02741e38999aeb6de42e29efc 100644 (file)
@@ -115,6 +115,27 @@ impl Library {
     }
 }
 
+#[cfg(test)]
+#[derive(Default)]
+struct Hand {
+    cards: Vec<Card>,
+}
+#[cfg(test)]
+impl Hand {
+    fn add(&mut self, card: Card) {
+        self.cards.push(card);
+    }
+    fn remove(&mut self, card: Card) -> Result<(), &'static str> {
+        let i = self
+            .cards
+            .iter()
+            .position(|&e| e == card)
+            .ok_or("That card is not in your hand")?;
+        self.cards.swap_remove(i);
+        Ok(())
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -161,4 +182,14 @@ mod tests {
         assert_eq!(lib.draw(&mut dis), Some(Card(8)));
         assert_eq!(lib.draw(&mut dis), None);
     }
+
+    #[test]
+    fn test_hand() {
+        let mut h = Hand::default();
+        assert!(h.remove(Card(4)).is_err());
+        h.add(Card(4));
+        assert!(h.remove(Card(3)).is_err());
+        assert!(h.remove(Card(4)).is_ok());
+        assert!(h.remove(Card(4)).is_err());
+    }
 }