//! Smoke test: verify piper-rs loads the Polish model and synthesizes audio. use std::path::Path; #[test] fn piper_load_and_synthesize() { let model_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("piper"); let onnx = model_dir.join("pl_PL-bass-high.onnx"); let json = model_dir.join("pl_PL-bass-high.onnx.json"); assert!(onnx.exists(), "model file missing: {}", onnx.display()); assert!(json.exists(), "config file missing: {}", json.display()); let mut piper = piper_rs::Piper::new(&onnx, &json).expect("failed to load piper model"); let text = "Kamil sie zespawnił"; let (samples, sample_rate) = piper .create(text, false, None, None, None, None) .expect("synthesis failed"); assert!(!samples.is_empty(), "no samples produced"); assert!(sample_rate > 0, "invalid sample rate: {sample_rate}"); assert!( samples.len() as u32 > sample_rate / 10, "suspiciously short output: {} samples at {} Hz", samples.len(), sample_rate ); let duration = samples.len() as f64 / sample_rate as f64; println!( "OK: '{}' → {} samples @ {} Hz ({:.2}s)", text, samples.len(), sample_rate, duration, ); // Second call measures cached-model synthesis speed let start = std::time::Instant::now(); let (samples2, sr2) = piper .create("Kamil jest chujem", false, None, None, None, None) .expect("second synthesis failed"); let elapsed = start.elapsed(); println!( "Cached: '{}' → {} samples @ {} Hz in {:?}", "Kamil jest chujem", samples2.len(), sr2, elapsed, ); assert!(!samples2.is_empty()); }