diff --git a/tests/tests.rs b/tests/tests.rs new file mode 100644 index 0000000..77b7937 --- /dev/null +++ b/tests/tests.rs @@ -0,0 +1,66 @@ +extern crate opus; + +#[test] +fn version_ascii() { + println!("Opus version: {}", opus::version()); +} + +// 48000Hz * 1 channel * 20 ms / 1000 +const MONO_20MS: usize = 48000 * 1 * 20 / 1000; + +#[test] +fn encode_mono() { + let mut encoder = opus::Encoder::new(48000, opus::Channels::Mono, opus::CodingMode::Audio).unwrap(); + + let mut output = [0; 256]; + let len = encoder.encode(&[0_i16; MONO_20MS], &mut output).unwrap(); + assert_eq!(&output[..len], &[244, 255, 254]); + + let len = encoder.encode(&[0_i16; MONO_20MS], &mut output).unwrap(); + assert_eq!(&output[..len], &[244, 255, 254]); + + let len = encoder.encode(&[1_i16; MONO_20MS], &mut output).unwrap(); + assert!(len > 190 && len < 220); + + let len = encoder.encode(&[0_i16; MONO_20MS], &mut output).unwrap(); + assert!(len > 170 && len < 190); +} + +#[test] +fn encode_stereo() { + let mut encoder = opus::Encoder::new(48000, opus::Channels::Stereo, opus::CodingMode::Audio).unwrap(); + + let mut output = [0; 512]; + let len = encoder.encode(&[0_i16; 2 * MONO_20MS], &mut output).unwrap(); + assert_eq!(&output[..len], &[249, 255, 254, 255, 254]); + + let len = encoder.encode(&[0_i16; 2 * MONO_20MS], &mut output).unwrap(); + assert_eq!(&output[..len], &[249, 255, 254, 255, 254]); + + let len = encoder.encode(&[17_i16; 2 * MONO_20MS], &mut output).unwrap(); + assert!(len > 240); + + let len = encoder.encode(&[0_i16; 2 * MONO_20MS], &mut output).unwrap(); + assert!(len > 240); + + // Very small buffer should still succeed + let len = encoder.encode(&[95_i16; 2 * MONO_20MS], &mut [0; 20]).unwrap(); + assert!(len < 20); +} + +#[test] +fn encode_bad_rate() { + match opus::Encoder::new(48001, opus::Channels::Mono, opus::CodingMode::Audio) { + Ok(_) => panic!("Encoder::new did not return BadArg"), + Err(err) => assert_eq!(err.code(), opus::ErrorCode::BadArg), + } +} + +#[test] +fn encode_bad_buffer() { + let mut encoder = opus::Encoder::new(48000, opus::Channels::Stereo, opus::CodingMode::Audio).unwrap(); + match encoder.encode(&[1_i16; 2 * MONO_20MS], &mut [0; 0]) { + Ok(_) => panic!("encode with 0-length buffer did not return BadArg"), + Err(err) => assert_eq!(err.code(), opus::ErrorCode::BadArg), + } +}