Adding latest stats
This commit is contained in:
74
src/stats.rs
74
src/stats.rs
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user