openpql_prelude/card/
rank_idx.rs1use super::{Display, Hash, Idx, Rank};
2
3#[derive(
7 Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd, Hash, Display, Default,
8)]
9pub struct RankIdx(pub(crate) Idx);
10
11impl RankIdx {
12 pub const fn to_rank(self) -> Option<Rank> {
13 match self.0 {
14 0 => Some(Rank::R2),
15 1 => Some(Rank::R3),
16 2 => Some(Rank::R4),
17 3 => Some(Rank::R5),
18 4 => Some(Rank::R6),
19 5 => Some(Rank::R7),
20 6 => Some(Rank::R8),
21 7 => Some(Rank::R9),
22 8 => Some(Rank::RT),
23 9 => Some(Rank::RJ),
24 10 => Some(Rank::RQ),
25 11 => Some(Rank::RK),
26 12 => Some(Rank::RA),
27 _ => None,
28 }
29 }
30}
31
32impl From<Rank> for RankIdx {
33 fn from(rank: Rank) -> Self {
34 Self(rank as Idx)
35 }
36}
37
38#[cfg(test)]
39#[cfg_attr(coverage_nightly, coverage(off))]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn test_from_rank() {
45 assert_eq!(RankIdx::from(Rank::R2).0, 0);
46 assert_eq!(RankIdx::from(Rank::R3).0, 1);
47 assert_eq!(RankIdx::from(Rank::R4).0, 2);
48 assert_eq!(RankIdx::from(Rank::R5).0, 3);
49 assert_eq!(RankIdx::from(Rank::R6).0, 4);
50 assert_eq!(RankIdx::from(Rank::R7).0, 5);
51 assert_eq!(RankIdx::from(Rank::R8).0, 6);
52 assert_eq!(RankIdx::from(Rank::R9).0, 7);
53 assert_eq!(RankIdx::from(Rank::RT).0, 8);
54 assert_eq!(RankIdx::from(Rank::RJ).0, 9);
55 assert_eq!(RankIdx::from(Rank::RQ).0, 10);
56 assert_eq!(RankIdx::from(Rank::RK).0, 11);
57 assert_eq!(RankIdx::from(Rank::RA).0, 12);
58 }
59
60 #[test]
61 fn test_to_rank() {
62 assert_eq!(RankIdx(0).to_rank(), Some(Rank::R2));
63 assert_eq!(RankIdx(1).to_rank(), Some(Rank::R3));
64 assert_eq!(RankIdx(2).to_rank(), Some(Rank::R4));
65 assert_eq!(RankIdx(3).to_rank(), Some(Rank::R5));
66 assert_eq!(RankIdx(4).to_rank(), Some(Rank::R6));
67 assert_eq!(RankIdx(5).to_rank(), Some(Rank::R7));
68 assert_eq!(RankIdx(6).to_rank(), Some(Rank::R8));
69 assert_eq!(RankIdx(7).to_rank(), Some(Rank::R9));
70 assert_eq!(RankIdx(8).to_rank(), Some(Rank::RT));
71 assert_eq!(RankIdx(9).to_rank(), Some(Rank::RJ));
72 assert_eq!(RankIdx(10).to_rank(), Some(Rank::RQ));
73 assert_eq!(RankIdx(11).to_rank(), Some(Rank::RK));
74 assert_eq!(RankIdx(12).to_rank(), Some(Rank::RA));
75
76 assert!(RankIdx(13).to_rank().is_none());
77 assert!(RankIdx(-1).to_rank().is_none());
78 }
79}