use crate::prelude::{
BasicCard, Decked, DeckedBase, FLUENT_KEY_BASE_NAME_FRENCH, FrenchBasicCard, Pip, Standard52,
};
use colored::Color;
use std::collections::HashMap;
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Tiny {}
impl Tiny {
pub const DECK_SIZE: usize = 4;
pub const DECK: [BasicCard; Self::DECK_SIZE] = [
FrenchBasicCard::ACE_SPADES,
FrenchBasicCard::KING_SPADES,
FrenchBasicCard::ACE_HEARTS,
FrenchBasicCard::KING_HEARTS,
];
}
impl DeckedBase for Tiny {
fn base_vec() -> Vec<BasicCard> {
Self::DECK.to_vec()
}
fn colors() -> HashMap<Pip, Color> {
Standard52::colors()
}
fn deck_name() -> String {
"Tiny".to_string()
}
fn fluent_deck_key() -> String {
FLUENT_KEY_BASE_NAME_FRENCH.to_string()
}
}
impl Decked<Self> for Tiny {}
#[allow(unused_macros)]
macro_rules! tiny {
(AS) => {
Card::<Tiny>::new(FrenchBasicCard::ACE_SPADES)
};
(KS) => {
Card::<Tiny>::new(FrenchBasicCard::KING_SPADES)
};
(AH) => {
Card::<Tiny>::new(FrenchBasicCard::ACE_HEARTS)
};
(KH) => {
Card::<Tiny>::new(FrenchBasicCard::KING_HEARTS)
};
(__) => {
Card::<Tiny>::default()
};
}
#[cfg(test)]
#[allow(non_snake_case, unused_imports)]
mod basic__card__tiny__tests {
use super::*;
use crate::prelude::*;
#[test]
fn test() {
let mut deck = Tiny::deck();
assert_eq!(deck.to_string(), "A♠ K♠ A♥ K♥");
assert_eq!(
deck.combos(2).to_string(),
"A♠ K♠, A♠ A♥, A♠ K♥, K♠ K♥, A♥ K♠, A♥ K♥"
);
assert_eq!(deck.draw_first().unwrap().to_string(), "A♠");
assert_eq!(deck.draw_last().unwrap().to_string(), "K♥");
assert_eq!(deck.len(), 2);
assert_eq!(deck.index(), "KS AH");
assert_eq!(deck.draw_first().unwrap(), tiny!(KS));
assert_eq!(deck.draw_last().unwrap(), tiny!(AH));
assert!(deck.draw_first().is_none());
assert!(deck.draw_last().is_none());
}
#[test]
fn validate() {
assert!(Tiny::validate());
}
}