brydz_dd 0.1.0

Work in progress - implementation of double dummy solver for contract bridge
Documentation
use std::fmt::{Debug, Display, Formatter};

#[derive(Clone, Copy, PartialEq, Eq)]
pub enum ExploreOutput{
    MinusInfinity,
    Number(u8),
    Infinity
}


impl From<u8> for ExploreOutput{
    fn from(n: u8) -> Self {
        Self::Number(n)
    }
}


impl Debug for ExploreOutput{
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::MinusInfinity => write!(f, "MinusInfinity"),
            Self::Number(arg0) => write!(f, "{arg0:?}"),
            Self::Infinity => write!(f, "Infinity"),
        }
    }
}

impl Display for ExploreOutput{
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self{
            ExploreOutput::MinusInfinity => write!(f, "-∞"),
            ExploreOutput::Number(n) => write!(f, "{n}"),
            ExploreOutput::Infinity => write!(f, ""),
        }
    }
}

impl PartialOrd for ExploreOutput{
    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
        Some(self.cmp(other))
    }
}
impl Ord for ExploreOutput{
    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
        match self{
            ExploreOutput::MinusInfinity => match other {
                ExploreOutput::MinusInfinity => std::cmp::Ordering::Equal,
                _ => std::cmp::Ordering::Less,
            },
            ExploreOutput::Number(n) => match other {
                ExploreOutput::MinusInfinity => std::cmp::Ordering::Greater,
                ExploreOutput::Number(o) => n.cmp(o),
                ExploreOutput::Infinity => std::cmp::Ordering::Less,
            },
            ExploreOutput::Infinity => match other{
                ExploreOutput::Infinity => std::cmp::Ordering::Equal,
                _ => std::cmp::Ordering::Greater

            }

        }
    }
}