use std::{ env, fs, process::{Command, Output, Stdio}, }; macro_rules! check_output { ($file_name:literal, $actual:expr) => { check_output(&$actual, include_str!($file_name), $file_name); }; } fn check_output(actual: &[u8], expected: &str, file_name: &str) { fs::write("tests/".to_owned() + file_name, actual).unwrap(); assert_eq!(String::from_utf8_lossy(actual), expected); } fn call_cli(args: &[&str]) -> Output { Command::new(env!("CARGO_BIN_EXE_tune")) .args(args) .output() .unwrap() } fn call_cli_piped(first_args: &[&str], second_args: &[&str]) -> Output { let first_command = Command::new(env!("CARGO_BIN_EXE_tune")) .args(first_args) .stdout(Stdio::piped()) .spawn() .unwrap(); Command::new(env!("CARGO_BIN_EXE_tune")) .args(second_args) .stdin(first_command.stdout.unwrap()) .output() .unwrap() } #[test] fn create_7_edo() { let output = call_cli(&[ "scale", "ref-note", "62", "--lo-key", "61", "--up-key", "64", "steps", "1:7:2", ]); check_output!("snapshots/README_create_7_edo.stdout", output.stdout); } #[test] fn dump_7_edo() { let output = call_cli(&[ "dump", "ref-note", "62", "--lo-key", "61", "--up-key", "71", "steps", "1:7:2", ]); check_output!("snapshots/README_dump_7_edo.stdout", output.stdout); } #[test] fn dump_19_edo() { let output = call_cli(&[ "dump", "ref-note", "62", "--lo-key", "61", "--up-key", "71", "steps", "1:19:2", ]); check_output!("snapshots/README_dump_19_edo.stdout", output.stdout); } #[test] fn dump_7_edo_with_root() { let output = call_cli(&["dump", "ref-note", "62", "--root", "60", "steps", "1:7:2"]); check_output!("snapshots/dump_7_edo_with_root.stdout", output.stdout); } #[test] fn diff_quarter_comma_and_31_edo() { let output = call_cli_piped( &[ "scale", "ref-note", "62", "--lo-key", "61", "--up-key", "71", "rank2", "1:4:5", "5", "1", ], &["diff", "stdin", "ref-note", "62", "steps", "1:31:2"], ); check_output!( "snapshots/README_diff_quarter_comma_and_31_edo.stdout", output.stdout ); } #[test] fn diff_quarter_comma_and_31_edo_with_shift() { let output = call_cli_piped( &["scale", "ref-note", "62", "rank2", "1:4:5", "3", "3"], &["diff", "stdin", "ref-note", "60", "steps", "1:31:2"], ); check_output!( "snapshots/diff_quarter_comma_and_31_edo_with_shift.stdout", output.stdout ); } #[test] fn mts_of_7_edo() { let output = call_cli(&["mts", "full-rt", "ref-note", "62", "steps", "1:7:2"]); check_output!("snapshots/README_mts_of_7_edo.stdout", output.stdout); check_output!("snapshots/README_mts_of_7_edo.stderr", output.stderr); } #[test] fn mts_of_19_edo() { let output = call_cli(&["mts", "full-rt", "ref-note", "69", "steps", "1:19:2"]); check_output!("snapshots/mts_of_19_edo.stdout", output.stdout); check_output!("snapshots/mts_of_19_edo.stderr", output.stderr); } #[test] fn octave_tuning_of_31_edo() { let output = call_cli(&[ "mts", "octave-1", "--dev-id", "22", "--lo-chan", "3", "ref-note", "62", "steps", "1:31:2", ]); check_output!("snapshots/octave_tuning_of_31_edo.stdout", output.stdout); check_output!("snapshots/octave_tuning_of_31_edo.stderr", output.stderr); } #[test] fn octave_tuning_of_13_edt() { let output = call_cli(&[ "mts", "octave-1", "--dev-id", "22", "--lo-chan", "3", "ref-note", "62", "steps", "1:13:3", ]); check_output!("snapshots/octave_tuning_of_13_edt.stdout", output.stdout); check_output!("snapshots/octave_tuning_of_13_edt.stderr", output.stderr); } #[test] fn tuning_program_change() { let output = call_cli(&["mts", "tun-pg", "--chan", "5", "10"]); check_output!("snapshots/tuning_program_change.stdout", output.stdout); check_output!("snapshots/tuning_program_change.stderr", output.stderr); } #[test] fn tuning_bank_change() { let output = call_cli(&["mts", "tun-bk", "--chan", "5", "10"]); check_output!("snapshots/tuning_bank_change.stdout", output.stdout); check_output!("snapshots/tuning_bank_change.stderr", output.stderr); } #[test] fn analysis_of_7_edo() { let output = call_cli(&["est", "1:7:2"]); check_output!("snapshots/analysis_of_7_edo.stdout", output.stdout); } #[test] fn analysis_of_13_edo() { let output = call_cli(&["est", "1:13:2"]); check_output!("snapshots/analysis_of_13_edo.stdout", output.stdout); } #[test] fn analysis_of_stretched_15_edo() { let output = call_cli(&["est", "1:15.1:2"]); check_output!( "snapshots/analysis_of_stretched_15_edo.stdout", output.stdout ); } #[test] fn analysis_of_16_edo() { let output = call_cli(&["est", "1:16:2"]); check_output!("snapshots/analysis_of_16_edo.stdout", output.stdout); } #[test] fn analysis_of_19_edo() { let output = call_cli(&["est", "1:19:2"]); check_output!("snapshots/README_analysis_of_19_edo.stdout", output.stdout); } #[test] fn moses_from_700_cents_generator() { let output = call_cli(&["mos", "find", "700c"]); check_output!( "snapshots/moses_from_700_cents_generator.stdout", output.stdout ); } #[test] fn moses_from_lowest_ratios() { let output = call_cli(&["mos", "find", "--per", "2", "3"]); check_output!( "snapshots/README_moses_from_lowest_ratios.stdout", output.stdout ); } #[test] fn moses_from_porcupine_generator() { let output = call_cli(&["mos", "find", "1:3:4/3"]); check_output!( "snapshots/moses_from_porcupine_generator.stdout", output.stdout ); } #[test] fn moses_from_bohlen_pierce_lambda_generator() { let output = call_cli(&["mos", "find", "--per", "3", "9/7"]); check_output!( "snapshots/moses_from_bohlen_pierce_lambda_generator.stdout", output.stdout ); } #[test] fn generators_for_5l2s() { let output = call_cli(&["mos", "gen", "5", "2"]); check_output!("snapshots/generators_for_5l2s.stdout", output.stdout); } #[test] fn generators_for_4l5s_edt() { let output = call_cli(&["mos", "gen", "--per", "3", "4", "5"]); check_output!("snapshots/generators_for_4l5s_edt.stdout", output.stdout); } #[test] fn generators_for_6l4s_edt() { let output = call_cli(&["mos", "gen", "6", "4"]); check_output!("snapshots/generators_for_6l4s.stdout", output.stdout); } #[test] fn create_scl() { let output = call_cli(&[ "scl", "--name", "Just intonation", "steps", "9/8", "1.25", "4/3", "1.5", "5/3", "15/8", "2", ]); check_output!("snapshots/README_create_scl.stdout", output.stdout); } #[test] fn create_harmonics_scale() { let output = call_cli(&["scl", "harm", "-u", "37", "74", "--neji=13"]); check_output!( "snapshots/README_create_harmonics_scale.stdout", output.stdout ); } #[test] fn create_kbm_root() { let output = call_cli(&["kbm", "ref-note", "62"]); check_output!("snapshots/README_create_kbm_root.stdout", output.stdout); } #[test] fn crate_kbm() { let output = call_cli(&[ "kbm", "ref-note", "62", "--root", "60", "--lo-key", "10", "--up-key", "100", "--key-map", "0,x,1,x,2,3,x,4,x,5,x,6", "--octave", "7", ]); check_output!("snapshots/README_create_kbm.stdout", output.stdout); }