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::convert::TryFrom;
#[derive(Debug)]
pub struct NewStatsCalculator<'a> {
data: &'a mut Vec<i32>,
pub struct NewStatsCalculator {
data: Vec<i32>,
length: u32,
total: i32,
}
impl<'a> NewStatsCalculator<'a> {
pub fn from_vec(initial_data: &'a mut Vec<i32>) -> Self {
impl NewStatsCalculator {
pub fn from_vec(initial_data: &[i32]) -> Self {
let initial_data = initial_data.to_vec();
let mut instance = NewStatsCalculator {
data: initial_data,
length: 0,
@@ -65,14 +65,26 @@ impl<'a> NewStatsCalculator<'a> {
}
}
// pub fn get_mode(&self) -> HashMap<&mut i32, i32> {
// let mut mode = HashMap::new();
// for ref i in self.data {
// let count = mode.entry(i).or_insert(0);
// *count += 1;
// }
// mode
// }
pub fn get_mode(&self) -> Option<(i32, i32)> {
let mut mode: HashMap<i32, i32> = HashMap::new();
for i in &self.data {
let count = mode.entry(*i).or_insert(0);
*count += 1;
}
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)]
@@ -81,38 +93,52 @@ mod test {
#[test]
fn test_get_length() {
let mut data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data);
let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&data);
test.get_length();
assert_eq!(test.length, 6);
}
#[test]
fn test_get_total() {
let mut data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data);
let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&data);
test.get_length();
assert_eq!(test.total, 21);
}
#[test]
fn test_get_mean() {
let mut data = vec![1, 2, 3, 4, 5, 6];
let test = NewStatsCalculator::from_vec(&mut data);
let data = vec![1, 2, 3, 4, 5, 6];
let test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_mean(), 3.5);
}
#[test]
fn test_get_median_even() {
let mut data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&mut data);
let data = vec![1, 2, 3, 4, 5, 6];
let mut test = NewStatsCalculator::from_vec(&data);
assert_eq!(test.get_median(), 3.5);
}
#[test]
fn test_get_median_odd() {
let mut data = vec![1, 2, 3, 4, 5, 6, 7];
let mut test = NewStatsCalculator::from_vec(&mut data);
let data = vec![1, 2, 3, 4, 5, 6, 7];
let mut test = NewStatsCalculator::from_vec(&data);
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)
}
}