open_pql/functions/
board_suit_count.rs1use 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}