mod tester;
use raikan::game;
#[test]
fn initial_game() {
let mut tester1 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut tester2 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let game = game::Game::new(&mut players, false, 234);
assert_eq!(game.state, game::GameState::Early());
assert_eq!(game.status.score, 0);
assert_eq!(game.status.max_score, 25);
}
#[test]
fn discard_on_8_clues() {
let mut tester1 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut tester2 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let mut game = game::Game::new(&mut players, false, 234);
assert_eq!(game.run(&mut players), 0);
assert_eq!(game.state, game::GameState::Invalid());
assert_eq!(game.status.max_score, 25); }
#[test]
fn striked_game() {
let mut tester1 = tester::InstructedPlayer::with_default(game::Move::Play(0));
let mut tester2 = tester::InstructedPlayer::with_default(game::Move::Play(0));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let mut game = game::Game::new(&mut players, false, 1238);
game.run(&mut players);
assert_ne!(game.status.score, 25); assert_eq!(game.state, game::GameState::Lost());
}
#[test]
fn too_many_clues() {
let mut tester1 =
tester::InstructedPlayer::with_default(game::Move::Clue(1, game::Clue::Rank(1)));
let mut tester2 =
tester::InstructedPlayer::with_default(game::Move::Clue(1, game::Clue::Rank(1)));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let mut game = game::Game::new(&mut players, false, 32);
assert_eq!(game.run(&mut players), 0);
assert_eq!(game.status.score, 0);
assert_eq!(game.status.max_score, 25);
assert_eq!(game.state, game::GameState::Invalid());
}
#[test]
fn unknown_clued_player() {
let mut tester1 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
tester1.add(game::Move::Clue(2, game::Clue::Rank(1)));
let mut tester2 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let mut game = game::Game::new(&mut players, false, 42);
assert_eq!(game.run(&mut players), 0);
assert_eq!(game.status.score, 0);
assert_eq!(game.status.max_score, 25);
assert_eq!(game.state, game::GameState::Invalid());
}
#[test]
fn clued_self() {
let mut tester1 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
tester1.add(game::Move::Clue(0, game::Clue::Rank(1)));
let mut tester2 = tester::InstructedPlayer::with_default(game::Move::Discard(0));
let mut players: Vec<&mut dyn game::PlayerStrategy> = Vec::new();
players.push(&mut tester1);
players.push(&mut tester2);
let mut game = game::Game::new(&mut players, false, 23409);
assert_eq!(game.run(&mut players), 0);
assert_eq!(game.status.score, 0);
assert_eq!(game.status.max_score, 25);
assert_eq!(game.state, game::GameState::Invalid());
}