use predicates::prelude::*;
use snapbox::cmd::{self, Command};
use std::path::Path;
pub mod common;
use crate::common::*;
use sketchlib::sketch::multisketch::MultiSketch;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_concat_sketches() {
let sandbox = TestSetup::setup();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("sketch")
.args(&["--k-vals", "17"])
.arg(sandbox.file_string("14412_3#82.contigs_velvet.fa.gz", TestDir::Input))
.arg(sandbox.file_string("14412_3#84.contigs_velvet.fa.gz", TestDir::Input))
.arg("--quiet")
.args(&["-o", "part1"])
.assert()
.success();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("sketch")
.args(&["--k-vals", "17"])
.arg(sandbox.file_string("R6.fa.gz", TestDir::Input))
.arg(sandbox.file_string("TIGR4.fa.gz", TestDir::Input))
.arg("-v")
.args(&["-o", "part2"])
.assert()
.success();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("sketch")
.args(&["--k-vals", "17"])
.arg(sandbox.file_string("R6.fa.gz", TestDir::Input))
.arg(sandbox.file_string("TIGR4.fa.gz", TestDir::Input))
.arg(sandbox.file_string("14412_3#82.contigs_velvet.fa.gz", TestDir::Input))
.arg(sandbox.file_string("14412_3#84.contigs_velvet.fa.gz", TestDir::Input))
.arg("-v")
.args(&["-o", "concat_ref"])
.assert()
.success();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("concat")
.arg("part1")
.arg(sandbox.file_string("14412_3#82.contigs_velvet.fa.gz", TestDir::Input))
.arg(sandbox.file_string("14412_3#84.contigs_velvet.fa.gz", TestDir::Input))
.arg("-v")
.args(&["-o", "concat_test"])
.assert()
.failure();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("append")
.arg("part1")
.arg(sandbox.file_string("R6.fa.gz", TestDir::Input))
.arg(sandbox.file_string("TIGR4.fa.gz", TestDir::Input))
.arg("-v")
.args(&["-o", "concat_test"])
.assert()
.success();
let concat_sketch: MultiSketch =
MultiSketch::load_metadata(&sandbox.file_string("concat_test", TestDir::Output))
.expect("Failed to load output merged sketch");
let expected_sketch =
MultiSketch::load_metadata(&sandbox.file_string("concat_ref", TestDir::Output))
.expect("Failed to load expected merged sketch");
println!("{}", concat_sketch);
println!("{}", expected_sketch);
assert_eq!(
concat_sketch, expected_sketch,
"Concat sketch metadata does not match"
);
let predicate_file = predicate::path::eq_file(Path::new(
&sandbox.file_string("concat_test.skd", TestDir::Output),
));
assert_eq!(
true,
predicate_file.eval(Path::new(
&sandbox.file_string("concat_ref.skd", TestDir::Output)
)),
"Concat sketch data does not match"
);
}
#[test]
fn save_sketch_data_reexport_matches_utils() {
let sandbox = TestSetup::setup();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("sketch")
.args(&["--k-vals", "17"])
.arg(sandbox.file_string("14412_3#82.contigs_velvet.fa.gz", TestDir::Input))
.arg("--quiet")
.args(&["-o", "reexport_part1"])
.assert()
.success();
Command::new(cmd::cargo_bin!("sketchlib"))
.current_dir(sandbox.get_wd())
.arg("sketch")
.args(&["--k-vals", "17"])
.arg(sandbox.file_string("14412_3#84.contigs_velvet.fa.gz", TestDir::Input))
.arg("--quiet")
.args(&["-o", "reexport_part2"])
.assert()
.success();
let part1 = sandbox.file_string("reexport_part1", TestDir::Output);
let part2 = sandbox.file_string("reexport_part2", TestDir::Output);
let via_reexport = sandbox.file_string("via_reexport", TestDir::Output);
let via_utils = sandbox.file_string("via_utils", TestDir::Output);
sketchlib::save_sketch_data(&part1, &part2, &via_reexport)
.expect("save_sketch_data (re-export) failed");
sketchlib::utils::save_sketch_data(&part1, &part2, &via_utils)
.expect("utils::save_sketch_data failed");
let predicate_file = predicate::path::eq_file(Path::new(&format!("{via_utils}.skd")));
assert_eq!(
true,
predicate_file.eval(Path::new(&format!("{via_reexport}.skd"))),
"Re-exported save_sketch_data output does not match utils::save_sketch_data"
);
}
}