1use crate::Frequency;
7
8#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
11#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
12pub struct Scale<T = f32> {
13 pub root: Frequency<T>,
14}
15
16#[cfg(test)]
17mod tests {
18 use super::Scale;
19 use crate::freq::Frequency;
20
21 const A4: Frequency<f64> = Frequency(440.0);
22 const C4: Frequency<f64> = Frequency(261.6255653005986);
23
24 #[test]
25 fn test_freq_converter() {
26 let n: isize = -9; let scale = Scale::from_freq(A4); assert! { (scale.get_freq_of_class(n) - C4).abs() < 1e-5 }
30 assert_eq! { scale.classify(C4), Some(n) }
31 }
32}