Adding latest stats

This commit is contained in:
2020-11-24 11:26:26 +00:00
parent 77c383e92b
commit f14854a699

View File

@@ -1,16 +1,16 @@
use std::convert::TryFrom;
use ::std::collections::HashMap; use ::std::collections::HashMap;
use std::convert::TryFrom;
#[derive(Debug)] #[derive(Debug)]
pub struct NewStatsCalculator<'a> { pub struct NewStatsCalculator {
data: &'a mut Vec<i32>, data: Vec<i32>,
length: u32, length: u32,
total: i32, total: i32,
} }
impl<'a> NewStatsCalculator<'a> { impl NewStatsCalculator {
pub fn from_vec(initial_data: &'a mut Vec<i32>) -> Self { pub fn from_vec(initial_data: &[i32]) -> Self {
let initial_data = initial_data.to_vec();
let mut instance = NewStatsCalculator { let mut instance = NewStatsCalculator {
data: initial_data, data: initial_data,
length: 0, length: 0,
@@ -65,14 +65,26 @@ impl<'a> NewStatsCalculator<'a> {
} }
} }
// pub fn get_mode(&self) -> HashMap<&mut i32, i32> { pub fn get_mode(&self) -> Option<(i32, i32)> {
// let mut mode = HashMap::new(); let mut mode: HashMap<i32, i32> = HashMap::new();
// for ref i in self.data { for i in &self.data {
// let count = mode.entry(i).or_insert(0); let count = mode.entry(*i).or_insert(0);
// *count += 1; *count += 1;
// } }
// mode let mut mode_value: Option<(i32, i32)> = mode
// } .iter()
.max_by(|a, b| a.1.cmp(b.1))
.map(|(k, v)| (*k, *v));
if let Some((_, v)) = mode_value {
if v == 1 {
mode_value = None
}
}
// println!("{:?}", mode_value);
mode_value
}
} }
#[cfg(test)] #[cfg(test)]
@@ -81,38 +93,52 @@ mod test {
#[test] #[test]
fn test_get_length() { fn test_get_length() {
let mut data = vec![1, 2, 3, 4, 5, 6]; let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data); let mut test = NewStatsCalculator::from_vec(&data);
test.get_length(); test.get_length();
assert_eq!(test.length, 6); assert_eq!(test.length, 6);
} }
#[test] #[test]
fn test_get_total() { fn test_get_total() {
let mut data = vec![1, 2, 3, 4, 5, 6]; let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data); let mut test = NewStatsCalculator::from_vec(&data);
test.get_length(); test.get_length();
assert_eq!(test.total, 21); assert_eq!(test.total, 21);
} }
#[test] #[test]
fn test_get_mean() { fn test_get_mean() {
let mut data = vec![1, 2, 3, 4, 5, 6]; let data = vec![1, 2, 3, 4, 5, 6];
let test = NewStatsCalculator::from_vec(&mut data); let test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_mean(), 3.5); assert_eq!(test.get_mean(), 3.5);
} }
#[test] #[test]
fn test_get_median_even() { fn test_get_median_even() {
let mut data = vec![1, 2, 3, 4, 5, 6]; let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data); let mut test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_median(), 3.5); assert_eq!(test.get_median(), 3.5);
} }
#[test] #[test]
fn test_get_median_odd() { fn test_get_median_odd() {
let mut data = vec![1, 2, 3, 4, 5, 6, 7]; let data = vec![1, 2, 3, 4, 5, 6, 7];
let mut test = NewStatsCalculator::from_vec(&mut data); let mut test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_median(), 4.0); assert_eq!(test.get_median(), 4.0);
} }
#[test]
fn test_get_mode_with_mode() {
let data = vec![1, 2, 3, 4, 5, 6, 6];
let test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_mode(), Some((6, 2)))
}
#[test]
fn test_get_mode_without_mode() {
let data = vec![1, 2, 3, 4, 5, 6];
let test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_mode(), None)
}
} }