use assert_fs::prelude::*;
use predicates::prelude::*;
use std::path::PathBuf;
use dekoder::eko::{EvolutionPoint, EKO};
fn v3tar() -> PathBuf {
let base: PathBuf = [env!("CARGO_MANIFEST_DIR"), "tests"].iter().collect();
let src = base.join("data").join("v3.tar");
assert!(predicate::path::exists().eval(&src));
src
}
#[test]
fn open() {
let src = v3tar();
let dst = assert_fs::TempDir::new().unwrap();
let _eko = EKO::extract(src.to_owned(), dst.to_owned()).unwrap();
let metadata = dst.child("metadata.yaml");
metadata.assert(predicate::path::exists());
}
#[test]
fn destroy() {
let src = v3tar();
let dst = assert_fs::TempDir::new().unwrap();
{
let eko = EKO::extract(src.to_owned(), dst.to_owned()).unwrap();
eko.destroy().unwrap();
}
dst.assert(predicate::path::missing());
}
#[test]
fn save_as_other() {
let src = v3tar();
let dst = assert_fs::TempDir::new().unwrap();
let eko = EKO::extract(src.to_owned(), dst.to_owned()).unwrap();
let tarb = assert_fs::NamedTempFile::new("write_test.tar").unwrap();
eko.write(tarb.to_owned()).unwrap();
tarb.assert(predicate::path::exists());
}
#[test]
fn has_operator() {
let src = v3tar();
let dst = assert_fs::TempDir::new().unwrap();
let eko = EKO::extract(src.to_owned(), dst.to_owned()).unwrap();
assert!(eko.available_operators().len() == 1);
let ep = EvolutionPoint {
scale: 10000.,
nf: 4,
};
assert!(ep.eq(eko.available_operators()[0]));
assert!(eko.has_operator(&ep));
}
#[test]
fn load_operator() {
let src = v3tar();
let dst = assert_fs::TempDir::new().unwrap();
let eko = EKO::extract(src.to_owned(), dst.to_owned()).unwrap();
let ep = EvolutionPoint {
scale: 10000.,
nf: 4,
};
let operator = eko.load_operator(&ep).unwrap();
assert!(operator.op.is_some());
assert!(operator.err.is_some());
let op = operator.op.unwrap();
assert!(op.dim().0 > 0);
assert!(op.dim().0 == operator.err.unwrap().dim().0);
}