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