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:
2026-04-02 21:09:15 +01:00
committed by oreodave
parent b76ad869ea
commit 27f9f79416
3 changed files with 18 additions and 1 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -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();