open_pql/functions/
flushing_board.rs

1use super::*;
2
3#[pqlfn(arg, rtn, eval)]
4pub fn flushing_board(street: PQLStreet, board: Board) -> PQLBoolean {
5    let c64: Card64 = (board, street).into();
6
7    for s in Suit::ARR_ALL {
8        if c64.count_by_suit(s) >= 3 {
9            return true;
10        }
11    }
12
13    false
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19    use crate::*;
20
21    fn f(s: &str, st: PQLStreet) -> bool {
22        flushing_board(st, board!(s))
23    }
24
25    #[test]
26    fn test_flushing_board() {
27        assert!(f("2s 3s 4s 5h 6d", PQLStreet::Flop));
28        assert!(f("2s 3s 4s 5h 6d", PQLStreet::Turn));
29        assert!(f("2s 3s 4s 5h 6d", PQLStreet::River));
30        assert!(!f("2s 3s 4h 5h 6d", PQLStreet::Flop));
31        assert!(!f("2s 3s 4h 5h 6d", PQLStreet::Turn));
32        assert!(!f("2s 3s 4h 5h 6d", PQLStreet::River));
33
34        assert!(f("2s 3s 4h 5s 6d", PQLStreet::Turn));
35        assert!(f("2s 3s 4h 5s 6d", PQLStreet::River));
36        assert!(!f("2s 3s 4h 5h 6d", PQLStreet::Turn));
37        assert!(!f("2s 3s 4h 5h 6d", PQLStreet::River));
38
39        assert!(f("2s 3h 4d 5s 6s", PQLStreet::River));
40        assert!(!f("2s 3h 4d 5s 6h", PQLStreet::River));
41    }
42}