open_pql/functions/
board_suit_count.rs

1use super::*;
2
3#[pqlfn(arg, rtn, eval)]
4pub fn board_suit_count(street: PQLStreet, board: Board) -> PQLCardCount {
5    let c: Card64 = (board, street).into();
6    let s4: Suit4 = c.into();
7
8    s4.count()
9}
10
11#[cfg(test)]
12mod tests {
13    use itertools::Itertools;
14
15    use super::*;
16    use crate::*;
17
18    #[quickcheck]
19    fn test_board_suit_count(board: Board) -> TestResult {
20        fn uniq_count(v: &[Card]) -> u8 {
21            v.iter().map(|c| c.suit).unique().count().to_le_bytes()[0]
22        }
23
24        let cs = board.to_vec();
25
26        assert_eq!(
27            uniq_count(&cs[0..3]),
28            board_suit_count(PQLStreet::Flop, board)
29        );
30
31        assert_eq!(
32            uniq_count(&cs[0..4]),
33            board_suit_count(PQLStreet::Turn, board)
34        );
35
36        assert_eq!(
37            uniq_count(&cs[0..5]),
38            board_suit_count(PQLStreet::River, board)
39        );
40
41        TestResult::passed()
42    }
43}