minmax-cli 0.1.0-beta.7

programs computing min and max argument values
use std::cmp::Ordering;

use super::index_of_;

pub const fn cmp_min() -> fn(&f64, &f64) -> Ordering {
   |a, b| a.partial_cmp(b).unwrap()
}

pub fn index_of_min(numbers: &[f64]) -> usize {
   index_of_(numbers, cmp_min())
}
#[test]
fn test_last_neg() {
   let numbers = vec![3344.0, 554.0, 56.0, 7.0, -4.0];
   assert_eq!(index_of_min(&numbers), 4);
}

#[test]
fn test_basic_min() {
   let numbers = vec![4.5, 2.0, 3.3];
   assert_eq!(index_of_min(&numbers), 1);
}

#[test]
fn test_with_nan() {
   let numbers = vec![f64::NAN, 5.5, 1.0, f64::NAN];
   assert_eq!(index_of_min(&numbers), 2);
}

#[test]
#[should_panic]
fn test_all_nan() {
   let numbers = vec![f64::NAN, f64::NAN];
   index_of_min(&numbers);
}

#[test]
fn test_negative_numbers() {
   let numbers = vec![2.0, -5.0, 0.0];
   assert_eq!(index_of_min(&numbers), 1);
}

#[test]
fn test_single_element() {
   let numbers = vec![42.0];
   assert_eq!(index_of_min(&numbers), 0);
}

#[test]
#[should_panic]
fn test_empty() {
   let numbers = vec![];
   index_of_min(&numbers);
}