1#[derive(Debug, Default, Clone, Copy)]
3pub struct DayAheadSchedule;
4
5impl DayAheadSchedule {
6 pub fn flat_target(forecast: &[f32]) -> Vec<f32> {
8 if forecast.is_empty() {
9 return Vec::new();
10 }
11
12 let sum: f32 = forecast.iter().sum();
13 let avg = sum / forecast.len() as f32;
14 vec![avg; forecast.len()]
15 }
16}
17
18#[cfg(test)]
19mod tests {
20 use super::DayAheadSchedule;
21
22 #[test]
23 fn flat_target_matches_length() {
24 let forecast = vec![1.0, 2.0, 3.0, 4.0];
25 let schedule = DayAheadSchedule::flat_target(&forecast);
26 assert_eq!(schedule.len(), forecast.len());
27 }
28
29 #[test]
30 fn flat_target_is_average() {
31 let forecast = vec![1.0, 2.0, 3.0];
32 let schedule = DayAheadSchedule::flat_target(&forecast);
33 assert_eq!(schedule, vec![2.0, 2.0, 2.0]);
34 }
35}