pub fn golden_sections(value: f32, divisions: usize) -> Vec<f32> {
const PHI: f32 = 1.618_034;
let mut sections = vec![value];
for _ in 0..divisions {
let last = *sections.last().unwrap();
sections.push(last / PHI);
}
sections
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_golden_sections() {
const PHI: f32 = 1.618_034;
let sections = golden_sections(100.0, 4);
assert_eq!(sections.len(), 5);
assert_eq!(sections[0], 100.0);
for i in 1..sections.len() {
let expected = sections[i - 1] / PHI;
assert!((sections[i] - expected).abs() < 0.01);
}
}
#[test]
fn test_golden_sections_zero_divisions() {
let sections = golden_sections(42.0, 0);
assert_eq!(sections.len(), 1);
assert_eq!(sections[0], 42.0);
}
#[test]
fn test_golden_sections_single() {
let sections = golden_sections(60.0, 1);
assert_eq!(sections.len(), 2);
assert_eq!(sections[0], 60.0);
let expected = 60.0 / 1.618_034f32;
assert!((sections[1] - expected).abs() < 0.01);
}
}