|
|
|
|
@ -16,9 +16,9 @@ pub struct DataReader {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl DataReader { |
|
|
|
|
pub fn read(&self, path: String) -> Vec<f64> { |
|
|
|
|
pub fn read(&self, path: &str) -> Vec<f64> { |
|
|
|
|
let mut vec: Vec<f64> = vec![]; |
|
|
|
|
match path.as_str() { |
|
|
|
|
match path { |
|
|
|
|
"-" => { |
|
|
|
|
vec = self.read_data(io::stdin().lock().lines()); |
|
|
|
|
} |
|
|
|
|
@ -100,3 +100,96 @@ impl DataReader {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[cfg(test)] |
|
|
|
|
mod tests { |
|
|
|
|
|
|
|
|
|
use super::*; |
|
|
|
|
use std::io::Write; |
|
|
|
|
use tempfile::NamedTempFile; |
|
|
|
|
|
|
|
|
|
#[test] |
|
|
|
|
fn basic_reader_test() { |
|
|
|
|
let reader = DataReader::default(); |
|
|
|
|
match NamedTempFile::new() { |
|
|
|
|
Ok(ref mut file) => { |
|
|
|
|
writeln!(file, "1.3").unwrap(); |
|
|
|
|
writeln!(file, "foobar").unwrap(); |
|
|
|
|
writeln!(file, "2").unwrap(); |
|
|
|
|
writeln!(file, "-2.7").unwrap(); |
|
|
|
|
let vec = reader.read(file.path().to_str().unwrap()); |
|
|
|
|
assert_eq!(vec, [1.3, 2.0, -2.7]); |
|
|
|
|
} |
|
|
|
|
Err(_) => assert!(false, "Could not create temp file"), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[test] |
|
|
|
|
fn regex_first_match() { |
|
|
|
|
let re = Regex::new("^foo ([0-9.-]+) ([0-9.-]+)").unwrap(); |
|
|
|
|
let reader = DataReaderBuilder::default().regex(re).build().unwrap(); |
|
|
|
|
match NamedTempFile::new() { |
|
|
|
|
Ok(ref mut file) => { |
|
|
|
|
writeln!(file, "foo 1.3 1.6").unwrap(); |
|
|
|
|
writeln!(file, "nothing").unwrap(); |
|
|
|
|
writeln!(file, "1.1").unwrap(); |
|
|
|
|
writeln!(file, "1.1 1.2").unwrap(); |
|
|
|
|
writeln!(file, "foo -2 3").unwrap(); |
|
|
|
|
writeln!(file, "foo 5").unwrap(); |
|
|
|
|
let vec = reader.read(file.path().to_str().unwrap()); |
|
|
|
|
assert_eq!(vec, [1.3, -2.0]); |
|
|
|
|
} |
|
|
|
|
Err(_) => assert!(false, "Could not create temp file"), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[test] |
|
|
|
|
fn regex_named_match() { |
|
|
|
|
let re = Regex::new("^foo ([0-9.-]+) (?P<value>[0-9.-]+)").unwrap(); |
|
|
|
|
let reader = DataReaderBuilder::default().regex(re).build().unwrap(); |
|
|
|
|
match NamedTempFile::new() { |
|
|
|
|
Ok(ref mut file) => { |
|
|
|
|
writeln!(file, "foo 1.3 1.6").unwrap(); |
|
|
|
|
writeln!(file, "nothing").unwrap(); |
|
|
|
|
writeln!(file, "1.1").unwrap(); |
|
|
|
|
writeln!(file, "1.1 1.2").unwrap(); |
|
|
|
|
writeln!(file, "foo -2 3").unwrap(); |
|
|
|
|
writeln!(file, "foo 5").unwrap(); |
|
|
|
|
let vec = reader.read(file.path().to_str().unwrap()); |
|
|
|
|
assert_eq!(vec, [1.6, 3.0]); |
|
|
|
|
} |
|
|
|
|
Err(_) => assert!(false, "Could not create temp file"), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[test] |
|
|
|
|
fn regex_empty_file() { |
|
|
|
|
let reader = DataReader::default(); |
|
|
|
|
match NamedTempFile::new() { |
|
|
|
|
Ok(ref mut file) => { |
|
|
|
|
let vec = reader.read(file.path().to_str().unwrap()); |
|
|
|
|
assert_eq!(vec, []); |
|
|
|
|
} |
|
|
|
|
Err(_) => assert!(false, "Could not create temp file"), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[test] |
|
|
|
|
fn range() { |
|
|
|
|
let reader = DataReaderBuilder::default() |
|
|
|
|
.range(-1.0..1.0) |
|
|
|
|
.build() |
|
|
|
|
.unwrap(); |
|
|
|
|
match NamedTempFile::new() { |
|
|
|
|
Ok(ref mut file) => { |
|
|
|
|
writeln!(file, "1.3").unwrap(); |
|
|
|
|
writeln!(file, "2").unwrap(); |
|
|
|
|
writeln!(file, "-0.5").unwrap(); |
|
|
|
|
writeln!(file, "0.5").unwrap(); |
|
|
|
|
let vec = reader.read(file.path().to_str().unwrap()); |
|
|
|
|
assert_eq!(vec, [-0.5, 0.5]); |
|
|
|
|
} |
|
|
|
|
Err(_) => assert!(false, "Could not create temp file"), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|