oxihuman_core/
sparse_array.rs1#![allow(dead_code)]
2
3use std::collections::HashMap;
4
5#[allow(dead_code)]
6#[derive(Debug, Clone)]
7pub struct SparseArray<T> {
8 data: HashMap<usize, T>,
9}
10
11#[allow(dead_code)]
12pub fn new_sparse_array<T>() -> SparseArray<T> {
13 SparseArray {
14 data: HashMap::new(),
15 }
16}
17
18#[allow(dead_code)]
19pub fn sparse_set_val<T>(arr: &mut SparseArray<T>, idx: usize, val: T) {
20 arr.data.insert(idx, val);
21}
22
23#[allow(dead_code)]
24pub fn sparse_get<T>(arr: &SparseArray<T>, idx: usize) -> Option<&T> {
25 arr.data.get(&idx)
26}
27
28#[allow(dead_code)]
29pub fn sparse_has<T>(arr: &SparseArray<T>, idx: usize) -> bool {
30 arr.data.contains_key(&idx)
31}
32
33#[allow(dead_code)]
34pub fn sparse_remove<T>(arr: &mut SparseArray<T>, idx: usize) -> bool {
35 arr.data.remove(&idx).is_some()
36}
37
38#[allow(dead_code)]
39pub fn sparse_count<T>(arr: &SparseArray<T>) -> usize {
40 arr.data.len()
41}
42
43#[allow(dead_code)]
44pub fn sparse_keys<T>(arr: &SparseArray<T>) -> Vec<usize> {
45 let mut keys: Vec<usize> = arr.data.keys().copied().collect();
46 keys.sort();
47 keys
48}
49
50#[allow(dead_code)]
51pub fn sparse_clear<T>(arr: &mut SparseArray<T>) {
52 arr.data.clear();
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_new() {
61 let arr: SparseArray<i32> = new_sparse_array();
62 assert_eq!(sparse_count(&arr), 0);
63 }
64
65 #[test]
66 fn test_set_and_get() {
67 let mut arr = new_sparse_array();
68 sparse_set_val(&mut arr, 10, "hello");
69 assert_eq!(sparse_get(&arr, 10), Some(&"hello"));
70 }
71
72 #[test]
73 fn test_has() {
74 let mut arr = new_sparse_array();
75 sparse_set_val(&mut arr, 5, 42);
76 assert!(sparse_has(&arr, 5));
77 assert!(!sparse_has(&arr, 6));
78 }
79
80 #[test]
81 fn test_remove() {
82 let mut arr = new_sparse_array();
83 sparse_set_val(&mut arr, 0, 1);
84 assert!(sparse_remove(&mut arr, 0));
85 assert!(!sparse_remove(&mut arr, 0));
86 }
87
88 #[test]
89 fn test_count() {
90 let mut arr = new_sparse_array();
91 sparse_set_val(&mut arr, 100, 'a');
92 sparse_set_val(&mut arr, 200, 'b');
93 assert_eq!(sparse_count(&arr), 2);
94 }
95
96 #[test]
97 fn test_keys() {
98 let mut arr = new_sparse_array();
99 sparse_set_val(&mut arr, 30, 0);
100 sparse_set_val(&mut arr, 10, 0);
101 sparse_set_val(&mut arr, 20, 0);
102 assert_eq!(sparse_keys(&arr), vec![10, 20, 30]);
103 }
104
105 #[test]
106 fn test_clear() {
107 let mut arr = new_sparse_array();
108 sparse_set_val(&mut arr, 1, 1);
109 sparse_clear(&mut arr);
110 assert_eq!(sparse_count(&arr), 0);
111 }
112
113 #[test]
114 fn test_overwrite() {
115 let mut arr = new_sparse_array();
116 sparse_set_val(&mut arr, 0, 1);
117 sparse_set_val(&mut arr, 0, 2);
118 assert_eq!(sparse_get(&arr, 0), Some(&2));
119 }
120
121 #[test]
122 fn test_get_missing() {
123 let arr: SparseArray<i32> = new_sparse_array();
124 assert_eq!(sparse_get(&arr, 999), None);
125 }
126
127 #[test]
128 fn test_empty_keys() {
129 let arr: SparseArray<i32> = new_sparse_array();
130 assert!(sparse_keys(&arr).is_empty());
131 }
132}