open_pql/functions/
overpair.rs

1use super::*;
2
3#[pqlfn]
4pub fn overpair(hand: &Hand, street: PQLStreet, board: Board) -> PQLBoolean {
5    max_rank(duplicated_hand_ranks(hand, street))
6        .is_some_and(|r| r > max_rank_of_board(street, board))
7}
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12
13    #[quickcheck]
14    fn test_overpair(hbg: HandBoardGame) -> TestResult {
15        let HandBoardGame {
16            hand,
17            board,
18            street,
19            ..
20        } = hbg;
21
22        let pocket_rank =
23            max_rank(duplicated_hand_ranks(hand.as_ref(), street));
24        let board_rank = max_rank(board_ranks(street, board)).unwrap();
25
26        TestResult::from_bool(pocket_rank.map_or_else(
27            || !overpair(hand.as_ref(), street, board),
28            |r| (r > board_rank) == overpair(hand.as_ref(), street, board),
29        ))
30    }
31}