use super::{
util::{be_encoded_u16_buf, le_encoded_u16_buf},
*,
};
use std::vec;
#[test]
fn yuva420p10_try_new_checked_accepts_le_encoded_buffer_on_any_host() {
let intended_y = vec![1023u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 4];
let intended_a = vec![1023u16; 16 * 8];
let y = le_encoded_u16_buf(&intended_y);
let u = le_encoded_u16_buf(&intended_uv);
let v = le_encoded_u16_buf(&intended_uv);
let a = le_encoded_u16_buf(&intended_a);
Yuva420p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16)
.expect("LE-encoded valid yuva420p10le must be accepted on both LE and BE hosts");
}
#[test]
fn yuva420p10_try_new_checked_rejects_le_encoded_alpha_out_of_range_on_any_host() {
let intended_y = vec![0u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 4];
let mut intended_a = vec![1023u16; 16 * 8];
intended_a[3 * 16 + 5] = 1024;
let y = le_encoded_u16_buf(&intended_y);
let u = le_encoded_u16_buf(&intended_uv);
let v = le_encoded_u16_buf(&intended_uv);
let a = le_encoded_u16_buf(&intended_a);
let e = Yuva420p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16).unwrap_err();
assert!(matches!(e, Yuva420pFrame16Error::SampleOutOfRange(_)));
}
#[test]
fn yuva422p10_try_new_checked_accepts_le_encoded_buffer_on_any_host() {
let intended_y = vec![1023u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 8];
let intended_a = vec![1023u16; 16 * 8];
let y = le_encoded_u16_buf(&intended_y);
let u = le_encoded_u16_buf(&intended_uv);
let v = le_encoded_u16_buf(&intended_uv);
let a = le_encoded_u16_buf(&intended_a);
Yuva422p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16)
.expect("LE-encoded valid yuva422p10le must be accepted on both LE and BE hosts");
}
#[test]
fn yuva422p10_try_new_checked_rejects_le_encoded_alpha_out_of_range_on_any_host() {
let intended_y = vec![0u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 8];
let mut intended_a = vec![1023u16; 16 * 8];
intended_a[2 * 16 + 7] = 1024;
let y = le_encoded_u16_buf(&intended_y);
let u = le_encoded_u16_buf(&intended_uv);
let v = le_encoded_u16_buf(&intended_uv);
let a = le_encoded_u16_buf(&intended_a);
let e = Yuva422p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16).unwrap_err();
assert!(matches!(e, Yuva422pFrame16Error::SampleOutOfRange(_)));
}
#[test]
fn yuva444p10_try_new_checked_accepts_le_encoded_buffer_on_any_host() {
let intended_full = vec![1023u16; 16 * 8];
let intended_chroma = vec![512u16; 16 * 8];
let y = le_encoded_u16_buf(&intended_full);
let u = le_encoded_u16_buf(&intended_chroma);
let v = le_encoded_u16_buf(&intended_chroma);
let a = le_encoded_u16_buf(&intended_full);
Yuva444p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 16, 16, 16)
.expect("LE-encoded valid yuva444p10le must be accepted on both LE and BE hosts");
}
#[test]
fn yuva444p10_try_new_checked_rejects_le_encoded_alpha_out_of_range_on_any_host() {
let intended_y = vec![0u16; 16 * 8];
let intended_chroma = vec![512u16; 16 * 8];
let mut intended_a = vec![1023u16; 16 * 8];
intended_a[4 * 16 + 9] = 1024;
let y = le_encoded_u16_buf(&intended_y);
let u = le_encoded_u16_buf(&intended_chroma);
let v = le_encoded_u16_buf(&intended_chroma);
let a = le_encoded_u16_buf(&intended_a);
let e = Yuva444p10Frame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 16, 16, 16).unwrap_err();
assert!(matches!(e, Yuva444pFrame16Error::SampleOutOfRange(_)));
}
#[test]
fn yuva420p10_be_try_new_checked_accepts_be_encoded_buffer_on_any_host() {
let intended_y = vec![1023u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 4];
let intended_a = vec![1023u16; 16 * 8];
let y = be_encoded_u16_buf(&intended_y);
let u = be_encoded_u16_buf(&intended_uv);
let v = be_encoded_u16_buf(&intended_uv);
let a = be_encoded_u16_buf(&intended_a);
Yuva420p10BeFrame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16)
.expect("BE-encoded valid yuva420p10be must be accepted on both LE and BE hosts");
}
#[test]
fn yuva420p10_be_try_new_checked_rejects_be_encoded_alpha_out_of_range() {
let intended_y = vec![1023u16; 16 * 8];
let intended_uv = vec![512u16; 8 * 4];
let mut intended_a = vec![1023u16; 16 * 8];
intended_a[3 * 16 + 5] = 1024;
let y = be_encoded_u16_buf(&intended_y);
let u = be_encoded_u16_buf(&intended_uv);
let v = be_encoded_u16_buf(&intended_uv);
let a = be_encoded_u16_buf(&intended_a);
let e = Yuva420p10BeFrame::try_new_checked(&y, &u, &v, &a, 16, 8, 16, 8, 8, 16).unwrap_err();
assert!(matches!(e, Yuva420pFrame16Error::SampleOutOfRange(_)));
}