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