Skip to main content

lgp/utils/
float_ops.rs

1pub fn argmax<I: Iterator<Item = f64>>(iter: I) -> Option<usize> {
2    let mut current_max = None;
3    let mut max_index = None;
4
5    for (index, item) in iter.enumerate() {
6        if Some(item) > current_max {
7            current_max = Some(item);
8            max_index = Some(index);
9        }
10    }
11
12    max_index
13}
14
15#[cfg(test)]
16mod tests {
17    use super::argmax;
18
19    #[test]
20    fn given_iterator_of_floats_when_argmax_then_max_index_is_returned() {
21        let values = [0., 1., 2.];
22        let argmax = argmax(values.iter().copied());
23
24        assert_eq!(argmax, Some(2));
25    }
26}