vpp_sim/sim/
schedule.rs

1/// Day-ahead schedule generation utilities.
2#[derive(Debug, Default, Clone, Copy)]
3pub struct DayAheadSchedule;
4
5impl DayAheadSchedule {
6    /// Generate a flat target schedule equal to the average of the forecast.
7    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}