1use log::{log, Level};
4
5pub fn log_progress(level: Level, done: usize, prev: usize, total: usize, step: usize, depth: usize) {
8 if log_step_crossed(done, prev, total, step) {
9 log!(level, "{}...{done}/{total} ({}%)", " ".repeat(depth), 100 * done / total);
10 }
11}
12
13pub fn log_step_crossed(done: usize, prev: usize, total: usize, step: usize) -> bool {
16 total > step && (done / step > prev / step || done == total)
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 #[test]
24 fn step_crossing() {
25 assert!(!log_step_crossed(10, 9, 10, 10));
27
28 assert!( log_step_crossed(10, 9, 100, 10));
30 assert!(!log_step_crossed(11, 10, 100, 10));
31
32 assert!(log_step_crossed(22, 18, 100, 10));
34
35 assert!(log_step_crossed(100, 99, 100, 10));
37 assert!(log_step_crossed( 95, 94, 95, 10));
38 }
39}