modes:mod:Hand: is_proper and is_improper indicator functions
A "proper" hand is one that has no wild cards - an "improper" hand is one that does have at least one wild card. ~is_proper~ should be implemented for any Hand - ~is_improper~ falls out for free. Implemented for Single and Pair.
This commit is contained in:
@@ -10,8 +10,16 @@ pub enum Footstool {
|
||||
|
||||
pub trait Hand {
|
||||
/** Given two instances of a Hand (`self` and `other`), verify if `self`
|
||||
footstools `other`. */
|
||||
footstools `other`.
|
||||
*/
|
||||
fn footstool(&self, other: &Self) -> Footstool;
|
||||
|
||||
// Only need to implement is_proper.
|
||||
fn is_proper(&self) -> bool;
|
||||
|
||||
fn is_improper(&self) -> bool {
|
||||
!self.is_proper()
|
||||
}
|
||||
}
|
||||
|
||||
mod tests {
|
||||
|
||||
@@ -43,6 +43,10 @@ use crate::modes::single::Single;
|
||||
use crate::modes::{Footstool, Hand};
|
||||
|
||||
impl Hand for Pair {
|
||||
fn is_proper(&self) -> bool {
|
||||
matches!(self.0, Card::PlayingCard(_))
|
||||
}
|
||||
|
||||
fn footstool(&self, other: &Self) -> Footstool {
|
||||
// A pair footstools the other <=> the highest cards of both footstool
|
||||
// each other => we can rely on the footstool implementation of Single
|
||||
|
||||
@@ -18,6 +18,11 @@ impl Single {
|
||||
use crate::modes::{Footstool, Hand};
|
||||
|
||||
impl Hand for Single {
|
||||
fn is_proper(&self) -> bool {
|
||||
// Always true as Jokers are not allowed
|
||||
true
|
||||
}
|
||||
|
||||
fn footstool(&self, other: &Self) -> Footstool {
|
||||
let self_abs = self.0.deck_abs();
|
||||
let other_abs = other.0.deck_abs();
|
||||
|
||||
Reference in New Issue
Block a user