use super::SnapshotField;
pub fn max_by_counter_value(fields: &[(&str, SnapshotField<'_>)]) -> Option<usize> {
fields
.iter()
.enumerate()
.filter_map(|(i, (_, f))| Some((i, f.as_u64().ok()?)))
.max_by_key(|(_, v)| *v)
.map(|(i, _)| i)
}
pub fn max_by_sum_u64(rows: &[(&str, Vec<SnapshotField<'_>>)]) -> Option<usize> {
rows.iter()
.enumerate()
.filter_map(|(i, (_, fields))| {
let mut sum: u64 = 0;
for f in fields {
let v = f.as_u64().ok()?;
sum = sum.saturating_add(v);
}
Some((i, sum))
})
.max_by_key(|(_, s)| *s)
.map(|(i, _)| i)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::monitor::btf_render::RenderedValue;
fn u64_field(value: u64) -> RenderedValue {
RenderedValue::Uint { bits: 64, value }
}
fn struct_field() -> RenderedValue {
RenderedValue::Struct {
type_name: Some("opaque".into()),
members: vec![],
}
}
#[test]
fn max_by_counter_value_picks_largest_u64() {
let a = u64_field(10);
let b = u64_field(100);
let c = u64_field(5);
let fields = vec![
("alpha.bss", SnapshotField::Value(&a)),
("beta.bss", SnapshotField::Value(&b)),
("gamma.bss", SnapshotField::Value(&c)),
];
assert_eq!(max_by_counter_value(&fields), Some(1));
}
#[test]
fn max_by_counter_value_skips_non_u64_picks_max_from_remainder() {
let a = u64_field(10);
let s = struct_field();
let c = u64_field(100);
let fields = vec![
("alpha.bss", SnapshotField::Value(&a)),
("beta.bss", SnapshotField::Value(&s)),
("gamma.bss", SnapshotField::Value(&c)),
];
assert_eq!(
max_by_counter_value(&fields),
Some(2),
"Struct candidate drops out via as_u64 error; max of \
{{alpha=10, gamma=100}} is gamma at index 2",
);
}
#[test]
fn max_by_counter_value_returns_none_when_all_candidates_non_u64() {
let s1 = struct_field();
let s2 = struct_field();
let fields = vec![
("alpha.bss", SnapshotField::Value(&s1)),
("beta.bss", SnapshotField::Value(&s2)),
];
assert_eq!(
max_by_counter_value(&fields),
None,
"every candidate fails as_u64 — picker returns None so \
live_var_via surfaces ProjectionFailed naming the picker",
);
}
#[test]
fn max_by_counter_value_tie_picks_last() {
let a = u64_field(50);
let b = u64_field(50);
let c = u64_field(50);
let fields = vec![
("alpha.bss", SnapshotField::Value(&a)),
("beta.bss", SnapshotField::Value(&b)),
("gamma.bss", SnapshotField::Value(&c)),
];
assert_eq!(
max_by_counter_value(&fields),
Some(2),
"Iterator::max_by_key returns the LAST element of an \
equal-maximum group; picker tie-break is deterministic \
across runs but lands on the last tied index, not the \
first",
);
}
#[test]
fn max_by_counter_value_empty_input_returns_none() {
let fields: Vec<(&str, SnapshotField<'_>)> = vec![];
assert_eq!(max_by_counter_value(&fields), None);
}
#[test]
fn max_by_sum_u64_picks_largest_summed_row() {
let a1 = u64_field(10);
let a2 = u64_field(20);
let b1 = u64_field(5);
let b2 = u64_field(5);
let c1 = u64_field(30);
let c2 = u64_field(40);
let rows = vec![
(
"alpha.bss",
vec![SnapshotField::Value(&a1), SnapshotField::Value(&a2)],
),
(
"beta.bss",
vec![SnapshotField::Value(&b1), SnapshotField::Value(&b2)],
),
(
"gamma.bss",
vec![SnapshotField::Value(&c1), SnapshotField::Value(&c2)],
),
];
assert_eq!(
max_by_sum_u64(&rows),
Some(2),
"row 2 sum = 70, beats row 0 (30) and row 1 (10)",
);
}
#[test]
fn max_by_sum_u64_tie_picks_last() {
let v = u64_field(10);
let rows = vec![
(
"a",
vec![SnapshotField::Value(&v), SnapshotField::Value(&v)],
),
(
"b",
vec![SnapshotField::Value(&v), SnapshotField::Value(&v)],
),
(
"c",
vec![SnapshotField::Value(&v), SnapshotField::Value(&v)],
),
];
assert_eq!(
max_by_sum_u64(&rows),
Some(2),
"Iterator::max_by_key returns the LAST tied element; \
matches max_by_counter_value semantic for caller \
consistency",
);
}
#[test]
fn max_by_sum_u64_drops_rows_with_any_non_u64_field() {
let u = u64_field(10);
let s = struct_field();
let big = u64_field(1000);
let rows = vec![
(
"alpha",
vec![SnapshotField::Value(&u), SnapshotField::Value(&s)],
),
(
"beta",
vec![SnapshotField::Value(&u), SnapshotField::Value(&big)],
),
(
"gamma",
vec![SnapshotField::Value(&s), SnapshotField::Value(&big)],
),
];
assert_eq!(
max_by_sum_u64(&rows),
Some(1),
"only row 1 survives the any-non-u64-eligibility filter; \
picker is NOT partial-summing (Struct + u64 doesn't fall \
back to summing the u64 alone)",
);
}
#[test]
fn max_by_sum_u64_all_rows_have_non_u64_field_returns_none() {
let u = u64_field(10);
let s = struct_field();
let rows = vec![
(
"alpha",
vec![SnapshotField::Value(&u), SnapshotField::Value(&s)],
),
(
"beta",
vec![SnapshotField::Value(&s), SnapshotField::Value(&u)],
),
];
assert_eq!(
max_by_sum_u64(&rows),
None,
"every row has at least one non-u64 field; downstream \
live_vars_via surfaces ProjectionFailed",
);
}
#[test]
fn max_by_sum_u64_empty_rows_returns_none() {
let rows: Vec<(&str, Vec<SnapshotField<'_>>)> = vec![];
assert_eq!(max_by_sum_u64(&rows), None);
}
#[test]
fn max_by_sum_u64_saturates_on_overflow() {
let big = u64_field(u64::MAX);
let one = u64_field(1);
let rows = vec![
(
"alpha",
vec![SnapshotField::Value(&big), SnapshotField::Value(&one)],
),
(
"beta",
vec![SnapshotField::Value(&one), SnapshotField::Value(&one)],
),
];
assert_eq!(max_by_sum_u64(&rows), Some(0));
}
}