use async_trait::async_trait; use crate::{bot::BiddingBot, bridge_engine::{BiddingStatePlayerView, Bid}}; struct AlwaysPassBiddingBot {} #[async_trait] impl BiddingBot for AlwaysPassBiddingBot { async fn bid(&self, _bidding: &BiddingStatePlayerView) -> Bid { Bid::Pass } } #[cfg(test)] mod tests { use super::*; use log::info; use rand::random; use crate::bridge_engine::{BiddingState, Bidding, BiddingStatePlayerView}; #[tokio::test] async fn always_passing_bot_passes() { crate::tests::test_setup(); let dealer = random(); let player_position = random(); let bidding_state = BiddingState { dealer, deal: random(), bidding: Bidding::new(dealer), }; let player_view = BiddingStatePlayerView::from_bidding_state(&bidding_state, player_position); info!("Bidding state: {bidding_state:#?}"); assert_eq!(Bid::Pass, (AlwaysPassBiddingBot {}).bid(&player_view).await); } }