From e1d395533bf495162664f52472f3f8a49283a3a4 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 28 Mar 2018 15:36:35 -0600 Subject: [PATCH] unit tests --- Chapter02/src/main.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Chapter02/src/main.rs b/Chapter02/src/main.rs index 23bde82..4464d9d 100644 --- a/Chapter02/src/main.rs +++ b/Chapter02/src/main.rs @@ -17,6 +17,12 @@ use termion::event::Key; use std::cmp; fn variable_summary(stdout: &mut raw::RawTerminal, vname: String, data: Vec) { + let (avg, dev) = variable_summary_stats(data); + variable_summary_print(stdout, vname, avg, dev); +} + +fn variable_summary_stats(data: Vec) -> (f64, f64) +{ //calculate statistics let N = data.len(); let sum = data.clone().into_iter() @@ -28,7 +34,11 @@ fn variable_summary(stdout: &mut raw::RawTerminal, vname: String, d .fold(0.0, |a, b| a+b) / (N as f64) ).sqrt(); + (avg, dev) +} +fn variable_summary_print(stdout: &mut raw::RawTerminal, vname: String, avg: f64, dev: f64) +{ //print formatted output write!(stdout, "Average of {:25}{:.6}\r\n", vname, avg); write!(stdout, "Standard deviation of {:14}{:.6}\r\n", vname, dev); @@ -225,3 +235,25 @@ fn main() stdout.flush().unwrap(); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn variable_stats() { + let test_data = vec![ + (vec![1.0, 2.0, 3.0, 4.0, 5.0], 3.0, 1.41), + (vec![1.0, 3.0, 5.0, 7.0, 9.0], 5.0, 2.83), + (vec![1.0, 9.0, 1.0, 9.0, 1.0], 4.2, 3.92), + (vec![1.0, 0.5, 0.7, 0.9, 0.6], 0.74, 0.19), + (vec![200.0, 3.0, 24.0, 92.0, 111.0], 86.0, 69.84), + ]; + for (data, avg, dev) in test_data + { + let (ravg, rdev) = variable_summary_stats(data); + assert!( (avg-ravg).abs() < 0.1 ); + assert!( (dev-rdev).abs() < 0.1 ); + } + } +}