modes:mod:tests: test_footstool revert to basic pattern

My previous impl was based on some testing for different Pair
footstool implementations.  However, I've decided to fix it to this
set of patterns:
1) any half footstool must come from a more dominant hand.
2) full footstools are symmetric and require both hands to be
   equivalent
This commit is contained in:
2026-04-05 02:54:38 +01:00
committed by oreodave
parent dce4279af2
commit fa4d8efb78

View File

@@ -25,33 +25,32 @@ pub trait Hand: Ord {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::fmt::Display; use std::fmt::{Debug, Display};
use super::*; use super::*;
/** Given two hands, assert that applying a footstool both ways fits a /** Given two hands, assert that applying a footstool both ways fits a
recognised pattern. Return the results of the two footstool checks (x on y, recognised basic pattern for footstools (in a generic sense). Return the
y on x). results of the two footstool checks (x on y, y on x).
Obviously may panic.
*/ */
pub fn test_footstool<T>(x: &T, y: &T) -> (Footstool, Footstool) pub fn test_footstool<T>(x: &T, y: &T) -> (Footstool, Footstool)
where where
T: Hand + Copy + Display, T: Hand + Copy + Display + Debug,
{ {
let res1 = x.footstool(y); let res1 = x.footstool(y);
let res2 = y.footstool(x); let res2 = y.footstool(x);
assert!( assert!(
match (res1, res2) { match (res1, res2) {
// Default patterns we'd expect (Footstool::None, Footstool::None) => true,
(Footstool::Half, Footstool::None) (Footstool::Half, Footstool::None) => x > y,
| (Footstool::None, Footstool::Half) (Footstool::None, Footstool::Half) => y > x,
| (Footstool::None, Footstool::None)
=> true,
// Patterns that require an exact examination to be certain
(Footstool::Full, Footstool::Full) => x == y, (Footstool::Full, Footstool::Full) => x == y,
_ => true, _ => false,
}, },
"Expected footstool on {}, {} ({:?}, {:?}) to match a recognised pattern", "Expected footstool on {}, {} ({:?}, {:?}) to match a recognised
pattern",
x, x,
y, y,
res1, res1,