Skip to main content

subtr_actor/stats/export/
pressure.rs

1use crate::*;
2
3use super::*;
4
5impl StatFieldProvider for PressureStats {
6    fn visit_stat_fields(&self, visitor: &mut dyn FnMut(ExportedStat)) {
7        visitor(ExportedStat::float(
8            "pressure",
9            "time",
10            StatUnit::Seconds,
11            self.tracked_time,
12        ));
13        for entry in &self.labeled_time.entries {
14            visitor(ExportedStat::float_labeled(
15                "pressure",
16                "time",
17                StatUnit::Seconds,
18                entry.labels.clone(),
19                entry.value,
20            ));
21        }
22        visitor(ExportedStat::float(
23            "pressure",
24            "team_zero_side_time",
25            StatUnit::Seconds,
26            self.team_zero_side_time,
27        ));
28        visitor(ExportedStat::float(
29            "pressure",
30            "team_one_side_time",
31            StatUnit::Seconds,
32            self.team_one_side_time,
33        ));
34        visitor(ExportedStat::float(
35            "pressure",
36            "neutral_time",
37            StatUnit::Seconds,
38            self.neutral_time,
39        ));
40        visitor(ExportedStat::float(
41            "pressure",
42            "team_zero_side_pct",
43            StatUnit::Percent,
44            self.team_zero_side_pct(),
45        ));
46        visitor(ExportedStat::float(
47            "pressure",
48            "team_one_side_pct",
49            StatUnit::Percent,
50            self.team_one_side_pct(),
51        ));
52        visitor(ExportedStat::float(
53            "pressure",
54            "neutral_pct",
55            StatUnit::Percent,
56            self.neutral_pct(),
57        ));
58    }
59}
60
61#[cfg(test)]
62mod tests {
63    use super::*;
64
65    #[test]
66    fn pressure_export_includes_labeled_time_stats() {
67        let mut stats = PressureStats {
68            tracked_time: 4.0,
69            ..Default::default()
70        };
71        stats
72            .labeled_time
73            .add([StatLabel::new("field_half", "team_zero_side")], 1.5);
74
75        let labeled_stats: Vec<_> = stats
76            .stat_fields()
77            .into_iter()
78            .filter(|stat| {
79                stat.descriptor.domain == "pressure"
80                    && stat.descriptor.name == "time"
81                    && stat.descriptor.variant == LABELED_STAT_VARIANT
82            })
83            .collect();
84
85        assert_eq!(labeled_stats.len(), 1);
86        assert_eq!(
87            labeled_stats[0].descriptor.labels,
88            vec![StatLabel::new("field_half", "team_zero_side")]
89        );
90        assert_eq!(labeled_stats[0].value, StatValue::Float(1.5));
91    }
92}