shadow_crypt_core/
progress.rs1use std::sync::Mutex;
2
3pub struct ProgressCounter {
4 current: Mutex<u64>,
5 total: u64,
6}
7impl ProgressCounter {
8 pub fn new(total: u64) -> Self {
9 Self {
10 current: Mutex::new(0),
11 total,
12 }
13 }
14
15 pub fn increment(&self) {
16 let mut current = self.current.lock().unwrap_or_else(|e| e.into_inner());
17 *current += 1;
18 }
19 pub fn get_current(&self) -> u64 {
20 let current = self.current.lock().unwrap_or_else(|e| e.into_inner());
21 *current
22 }
23 pub fn get_total(&self) -> u64 {
24 self.total
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_new() {
34 let counter = ProgressCounter::new(100);
35 assert_eq!(counter.get_current(), 0);
36 assert_eq!(counter.get_total(), 100);
37 }
38
39 #[test]
40 fn test_increment() {
41 let counter = ProgressCounter::new(10);
42 assert_eq!(counter.get_current(), 0);
43 counter.increment();
44 assert_eq!(counter.get_current(), 1);
45 counter.increment();
46 assert_eq!(counter.get_current(), 2);
47 }
48
49 #[test]
50 fn test_get_current_and_total() {
51 let counter = ProgressCounter::new(50);
52 assert_eq!(counter.get_current(), 0);
53 assert_eq!(counter.get_total(), 50);
54 counter.increment();
55 assert_eq!(counter.get_current(), 1);
56 assert_eq!(counter.get_total(), 50);
57 }
58}