open_pql/functions/
has_second_board_rank.rs1use super::*;
2#[pqlfn(arg, rtn, eval)]
5pub fn has_second_board_rank(
6 hand: &Hand,
7 street: PQLStreet,
8 board: Board,
9) -> PQLBoolean {
10 let mut board: Rank16 = board_ranks(street, board);
11
12 let top_rank = board.max_rank().unwrap();
13
14 board.unset(top_rank);
15
16 match board.max_rank() {
17 Some(second_rank) => {
18 for c in hand {
19 if c.rank == second_rank {
20 return true;
21 }
22 }
23
24 false
25 }
26 None => false,
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33 use crate::*;
34
35 #[quickcheck]
36 fn test_has_second_board_rank(hbg: HandBoardGame) -> TestResult {
37 let HandBoardGame {
38 hand,
39 board,
40 street,
41 ..
42 } = hbg;
43
44 let second = nth_rank(2, board_ranks(street, board));
45 let has_second = hand.iter().any(|c| Some(c.rank) == second);
46
47 TestResult::from_bool(
48 has_second == has_second_board_rank(hand.as_ref(), street, board),
49 )
50 }
51
52 #[test]
53 fn test_has_second_board_rank_none() {
54 let board = board!("AsAhAcAdKs");
55 let hand = cards!("2s2h");
56
57 assert!(!has_second_board_rank(&hand, PQLStreet::Flop, board,));
58 }
59}