1use std::collections::HashMap;
2
3pub fn sort_hashmap(input_hashmap: &HashMap<String, u64>) -> Result<Vec<(&String, &u64)>, String> {
5 let mut input_vec = Vec::from_iter(input_hashmap);
6 input_vec.sort_by(|(_, a), (_, b)| b.cmp(&a));
7 Ok(input_vec)
8}
9
10#[cfg(test)]
11mod tests {
12 use super::*;
13 use rstest::rstest;
14
15 #[rstest]
16 #[case(
17 vec![("AAA".to_string(), 1), ("ACA".to_string(), 2)],
18 vec![("ACA".to_string(), 2), ("AAA".to_string(), 1)]
19 )]
20 #[case(
21 vec![("TTT".to_string(), 4),("AAA".to_string(), 1), ("ACA".to_string(), 2)],
22 vec![("TTT".to_string(), 4),("ACA".to_string(), 2), ("AAA".to_string(), 1)]
23 )]
24 #[case(
25 vec![("TTT".to_string(), 2),("AAA".to_string(), 3), ("ACA".to_string(), 4)],
26 vec![("ACA".to_string(), 4),("AAA".to_string(), 3), ("TTT".to_string(), 2)]
27 )]
28 fn test_sort_hashmap(
29 #[case] input_array: Vec<(String, u64)>,
30 #[case] expected_array: Vec<(String, u64)>,
31 ) {
32 let input_hashmap: HashMap<String, u64> = HashMap::from_iter(input_array);
33 let sorted = sort_hashmap(&input_hashmap).unwrap();
34 let sorted_vec: Vec<(String, u64)> = sorted
35 .into_iter()
36 .map(|(k, v)| (k.clone(), v.clone()))
37 .collect();
38 assert_eq!(sorted_vec, expected_array);
39 }
40}