entracte_lib/scheduler/
break_stats.rs1use serde::Serialize;
2
3#[derive(Debug, Clone, Default, Serialize)]
9pub struct BreakStats {
10 pub taken: u32,
11 pub skipped: u32,
12 pub postponed: u32,
13}
14
15impl BreakStats {
16 pub fn intensity(&self) -> f32 {
20 let total = self.taken + self.skipped;
21 if total == 0 {
22 return 0.0;
23 }
24 (self.skipped as f32 / total as f32).clamp(0.0, 1.0)
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn break_stats_intensity() {
34 let mut s = BreakStats::default();
35 assert_eq!(s.intensity(), 0.0);
36 s.taken = 4;
37 s.skipped = 1;
38 let i = s.intensity();
39 assert!((i - 0.2).abs() < 0.001);
40 s.skipped = 10;
41 s.taken = 0;
42 assert_eq!(s.intensity(), 1.0);
43 }
44}