rusty_chromaprint/
quantize.rs1#[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 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}