Skip to main content

dataloader_rs/sampler/
sequential.rs

1use crate::sampler::Sampler;
2
3/// Yields indices `0, 1, ..., N-1` in order every epoch.
4#[derive(Clone, Copy, Debug, Default)]
5pub struct SequentialSampler;
6
7impl Sampler for SequentialSampler {
8    fn indices(&mut self, dataset_len: usize) -> Vec<usize> {
9        (0..dataset_len).collect()
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use crate::sampler::{Sampler, SequentialSampler};
16
17    #[test]
18    fn sequential_returns_0_to_n() {
19        let mut s = SequentialSampler;
20        assert_eq!(s.indices(5), vec![0, 1, 2, 3, 4]);
21    }
22
23    #[test]
24    fn sequential_empty_dataset() {
25        let mut s = SequentialSampler;
26        assert_eq!(s.indices(0), Vec::<usize>::new());
27    }
28
29    #[test]
30    fn sequential_is_repeatable() {
31        let mut s = SequentialSampler;
32        assert_eq!(s.indices(3), s.indices(3));
33    }
34
35    #[test]
36    fn sequential_len_matches() {
37        let mut s = SequentialSampler;
38        let n = 100;
39        assert_eq!(s.indices(n).len(), n);
40    }
41}