Skip to main content

diskann_disk/build/chunking/checkpoint/
progress.rs

1/*
2 * Copyright (c) Microsoft Corporation.
3 * Licensed under the MIT license.
4 */
5
6#[derive(Debug, Clone)]
7pub enum Progress {
8    Completed,
9    Processed(usize /* items processed */),
10}
11
12impl Progress {
13    pub fn map(self, f: impl Fn(usize) -> usize) -> Progress {
14        match self {
15            Progress::Completed => Progress::Completed,
16            Progress::Processed(progress) => Progress::Processed(f(progress)),
17        }
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_progress_map_processed() {
27        let progress = Progress::Processed(10);
28        let mapped = progress.map(|n| n * 2);
29        match mapped {
30            Progress::Processed(n) => assert_eq!(n, 20),
31            _ => panic!("Expected Processed variant"),
32        }
33    }
34
35    #[test]
36    fn test_progress_map_completed() {
37        let progress = Progress::Completed;
38        let mapped = progress.map(|n| n * 2);
39        match mapped {
40            Progress::Completed => {}
41            _ => panic!("Expected Completed variant"),
42        }
43    }
44}