open_pql/functions/
nth_rank.rs

1use super::*;
2
3#[pqlfn(arg, rtn, eval)]
4pub fn nth_rank(n: PQLCardCount, ranks: PQLRankSet) -> Option<PQLRank> {
5    ranks.nth_rank(n.to_le_bytes()[0])
6}
7
8#[cfg(test)]
9mod tests {
10    use super::*;
11    use crate::*;
12
13    #[quickcheck]
14    fn test_nth_rank(cs: Vec<Card>) {
15        const N: usize = 8;
16        let cs = cs.into_iter().take(N);
17        let rs = cs.map(|c| c.rank).collect::<Vec<_>>();
18
19        let ranks = Rank16::from(rs.as_ref() as &[Rank]);
20        let mut sorted = rs;
21
22        sorted.sort();
23        sorted.dedup();
24        sorted.reverse();
25
26        for (i, r) in sorted.into_iter().enumerate() {
27            assert_eq!(Some(r), nth_rank((i + 1).try_into().unwrap(), ranks));
28        }
29    }
30}