From d9cc67d3d13f1ea45221e14f247a8f2dbaf01398 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Fri, 3 Apr 2026 02:22:49 +0100 Subject: [PATCH] modes:single:tests: refactor --- src/modes/single.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/modes/single.rs b/src/modes/single.rs index 63e9edb..5151f5a 100644 --- a/src/modes/single.rs +++ b/src/modes/single.rs @@ -46,6 +46,8 @@ impl Display for Single { #[cfg(test)] mod tests { + use std::convert::identity; + use super::*; use crate::{ card::{make_decks, PlayingCard, Rank, Suit}, @@ -58,13 +60,8 @@ mod tests { assert!(Single::new(Card::make_joker()).is_none()); let deck = make_decks(1); - let singles: Vec> = - deck.iter().map(|&c| Single::new(c)).collect(); - let valid_singles: Vec = singles - .iter() - .filter(|x| !x.is_none()) - .map(|x| x.unwrap()) - .collect(); + let singles = deck.iter().map(|&c| Single::new(c)).filter_map(identity); + let valid_singles = singles.collect::>(); // TEST: Only two cards in a single deck aren't valid singles. assert!(valid_singles.len() == deck.len() - 2); @@ -75,10 +72,11 @@ mod tests { #[test] fn footstool() { - let deck = make_decks(1); - let deck = &deck[2..]; // skip the jokers - let singles: Vec = - deck.iter().map(|&c| Single::new(c).unwrap()).collect(); + // Make a deck with no jokers. + let singles = PlayingCard::iter_deck(0) + .map(Card::PlayingCard) + .filter_map(Single::new) + .collect::>(); singles.windows(3).for_each(|single_slice| { let (s1, s2, s3) = @@ -103,16 +101,14 @@ mod tests { }); for single in &singles { - let footstool_results: Vec<(Footstool, Footstool)> = singles + let footstool_results = singles .iter() .map(|&other_single| { // TEST: All footstool results are non-reflexive. test_non_reflexivity(single, &other_single) }) - .collect(); - - let footstool_results: Vec = - footstool_results.iter().map(|x| x.0).collect(); + .map(|x| x.0) + .collect::>(); // TEST: A single is only full-footstooled by itself. let full_footstools = footstool_results