rusty_chromaprint/
quantize.rs

1#[derive(Debug, Clone, Copy)]
2pub struct Quantizer {
3    t0: f64,
4    t1: f64,
5    t2: f64,
6}
7
8impl Quantizer {
9    pub const fn new(t0: f64, t1: f64, t2: f64) -> Self {
10        // assert!(t0 <= t1 && t1 <= t2);
11        Self { t0, t1, t2 }
12    }
13
14    pub fn quantize(&self, val: f64) -> u32 {
15        if val < self.t1 {
16            if val < self.t0 {
17                0
18            } else {
19                1
20            }
21        } else if val < self.t2 {
22            2
23        } else {
24            3
25        }
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use crate::quantize::Quantizer;
32
33    #[test]
34    fn quantization() {
35        let q = Quantizer::new(0.0, 0.1, 0.3);
36        assert_eq!(0, q.quantize(-0.1));
37        assert_eq!(1, q.quantize(0.0));
38        assert_eq!(1, q.quantize(0.03));
39        assert_eq!(2, q.quantize(0.1));
40        assert_eq!(2, q.quantize(0.13));
41        assert_eq!(3, q.quantize(0.3));
42        assert_eq!(3, q.quantize(0.33));
43        assert_eq!(3, q.quantize(1000.0));
44    }
45}