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 {
|
pub trait Hand {
|
||||||
/** Given two instances of a Hand (`self` and `other`), verify if `self`
|
/** Given two instances of a Hand (`self` and `other`), verify if `self`
|
||||||
footstools `other`. */
|
footstools `other`.
|
||||||
|
*/
|
||||||
fn footstool(&self, other: &Self) -> Footstool;
|
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 {
|
mod tests {
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ use crate::modes::single::Single;
|
|||||||
use crate::modes::{Footstool, Hand};
|
use crate::modes::{Footstool, Hand};
|
||||||
|
|
||||||
impl Hand for Pair {
|
impl Hand for Pair {
|
||||||
|
fn is_proper(&self) -> bool {
|
||||||
|
matches!(self.0, Card::PlayingCard(_))
|
||||||
|
}
|
||||||
|
|
||||||
fn footstool(&self, other: &Self) -> Footstool {
|
fn footstool(&self, other: &Self) -> Footstool {
|
||||||
// A pair footstools the other <=> the highest cards of both footstool
|
// A pair footstools the other <=> the highest cards of both footstool
|
||||||
// each other => we can rely on the footstool implementation of Single
|
// each other => we can rely on the footstool implementation of Single
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ impl Single {
|
|||||||
use crate::modes::{Footstool, Hand};
|
use crate::modes::{Footstool, Hand};
|
||||||
|
|
||||||
impl Hand for Single {
|
impl Hand for Single {
|
||||||
|
fn is_proper(&self) -> bool {
|
||||||
|
// Always true as Jokers are not allowed
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
fn footstool(&self, other: &Self) -> Footstool {
|
fn footstool(&self, other: &Self) -> Footstool {
|
||||||
let self_abs = self.0.deck_abs();
|
let self_abs = self.0.deck_abs();
|
||||||
let other_abs = other.0.deck_abs();
|
let other_abs = other.0.deck_abs();
|
||||||
|
|||||||
Reference in New Issue
Block a user