subtr_actor/stats/export/
pressure.rs1use 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}