use crate::utils::{
expose_w, generate_step_stream, make_3x3_pd_system_1, read_yaml_to_string, Counter,
};
use iterative_methods::algorithms::ConjugateGradient;
use iterative_methods::*;
extern crate streaming_iterator;
use crate::streaming_iterator::*;
use ndarray::*;
use rand::SeedableRng;
use rand_pcg::Pcg64;
#[ignore]
#[test]
fn test_timed_iterable() {
let p = make_3x3_pd_system_1();
let cg_iter = ConjugateGradient::for_problem(&p).take(50);
let cg_timed_iter = time(cg_iter);
let mut start_times = Vec::new();
let mut durations = Vec::new();
let mut cg_print_iter = inspect(
cg_timed_iter,
|TimedResult {
result: _,
start_time,
duration,
}| {
start_times.push(start_time.as_nanos());
durations.push(duration.as_nanos());
},
);
while let Some(_x) = cg_print_iter.next() {}
println!("Start times: {:?}", start_times);
println!("Durations: {:?}", durations);
let start_times = rcarr1(&start_times).map(|i| *i as f64);
let st_diff = &start_times.slice(s![1..]) - &start_times.slice(s![..-1]);
println!("start time diffs: {:?}", st_diff);
assert!(durations.iter().all(|dur| 3000 < *dur && *dur < 300000));
assert!(st_diff.iter().all(|diff| *diff >= 0.));
}
#[test]
fn wd_iterable_extract_value_test() {
let mut counter_stream = Counter::new();
let counter_stream_copy = counter_stream.clone();
let wd_iter = Weight {
it: counter_stream_copy,
f: expose_w,
wd: Some(new_datum(0., 0.)),
};
let mut extract_value_iter = extract_value(wd_iter);
for _ in 0..6 {
if let (Some(val1), Some(val2)) = (extract_value_iter.next(), counter_stream.next()) {
assert!(val1 == val2);
}
}
}
#[test]
fn enumerate_reservoirs_to_yaml_test() {
let test_file_path = "enumerate_reservoirs_to_yaml_test1.yaml";
let stream_length = 10usize;
let capacity = 2usize;
let initial_value = 0i64;
let final_value = 1i64;
let stream = generate_step_stream(stream_length, capacity, initial_value, final_value);
let stream = reservoir_sample(stream, capacity, Some(Pcg64::seed_from_u64(0)));
let stream = enumerate(stream);
let mut stream = write_yaml_documents(stream, String::from(test_file_path))
.expect("Write scalar to Yaml: Create file and initialize Yaml iter failed.");
while let Some(t) = stream.next() {
println!("{:?}", t);
}
let contents = read_yaml_to_string(test_file_path).expect("Could not read file.");
let output =
String::from("---\n- 0\n- - 0\n - 0\n---\n- 1\n- - 0\n - 1\n---\n- 2\n- - 1\n - 1\n");
assert_eq!(contents, output);
}