mirror of
https://github.com/rustdesk/magnum-opus.git
synced 2026-04-17 13:50:13 +00:00
Add a few encoding tests
This commit is contained in:
66
tests/tests.rs
Normal file
66
tests/tests.rs
Normal file
@@ -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),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user