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}