use cdrustanoia_core::device::samples_to_bytes; #[test] fn end_to_end_image_rip() { let dir = tempfile::tempdir().unwrap(); let image = dir.path().join("disc.raw"); let out = dir.path().join("out.raw"); let sectors = 24usize; let mut samples = Vec::with_capacity(sectors * 1176); for i in 0..sectors * 1176 { samples.push(((i as i32 * 7919) % 65536 - 32768) as i16); } std::fs::write(&image, samples_to_bytes(&samples)).unwrap(); std::env::set_var("CDRUSTANOIA_TEST_IMAGE", &image); let argv = vec![ "cdparanoia".to_string(), "-q".to_string(), "-r".to_string(), "1".to_string(), out.to_string_lossy().into_owned(), ]; assert_eq!(cdrustanoia_cli::run(&argv), 0); let got = std::fs::read(&out).unwrap(); assert_eq!(got, samples_to_bytes(&samples)); std::env::remove_var("CDRUSTANOIA_TEST_IMAGE"); // Multi-track batch mode. let multi = dir.path().join("multi.raw"); let mut multi_samples = Vec::new(); for i in 0..(48 * 1176) { multi_samples.push((((i as i64 * 104729) % 65536) as i32 - 32768) as i16); } std::fs::write(&multi, samples_to_bytes(&multi_samples)).unwrap(); std::fs::write(dir.path().join("multi.raw.toc"), "0 23 0\n24 47 0\n").unwrap(); std::env::set_var("CDRUSTANOIA_TEST_IMAGE", &multi); let argv = vec![ "cdparanoia".to_string(), "-q".to_string(), "-B".to_string(), "1-2".to_string(), format!("{}/", dir.path().display()), ]; assert_eq!(cdrustanoia_cli::run(&argv), 0); let t1 = std::fs::read(dir.path().join("track01.cdda.wav")).unwrap(); let t2 = std::fs::read(dir.path().join("track02.cdda.wav")).unwrap(); assert_eq!(&t1[44..], &samples_to_bytes(&multi_samples[..24 * 1176])); assert_eq!(&t2[44..], &samples_to_bytes(&multi_samples[24 * 1176..])); std::env::remove_var("CDRUSTANOIA_TEST_IMAGE"); }