#![allow(clippy::unwrap_used, reason = "allow in test files")]
#![allow(clippy::undocumented_unsafe_blocks, reason = "allow in test files")]
#![allow(clippy::indexing_slicing, reason = "allow in test files")]
use std::num::NonZeroUsize;
use crate::util::{assume_init_vec, uninit_vec, vs_bitblt};
#[test]
fn vs_bitblt_same_stride() {
let src = vec![1u8, 2, 3, 4, 5, 6, 7, 8, 9];
let mut dest = vec![0u8; 9];
let stride = NonZeroUsize::new(3).unwrap();
let row_size = NonZeroUsize::new(3).unwrap();
let height = NonZeroUsize::new(3).unwrap();
vs_bitblt(&mut dest, stride, &src, stride, row_size, height);
assert_eq!(dest, src, "Entire buffer should be copied exactly");
}
#[test]
fn vs_bitblt_different_stride() {
let src = vec![
1u8, 2, 3, 0, 0, 4, 5, 6, 0, 0, 7, 8, 9, 0, 0,
];
let mut dest = vec![
0u8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
let src_stride = NonZeroUsize::new(5).unwrap();
let dest_stride = NonZeroUsize::new(6).unwrap();
let row_size = NonZeroUsize::new(3).unwrap();
let height = NonZeroUsize::new(3).unwrap();
vs_bitblt(&mut dest, dest_stride, &src, src_stride, row_size, height);
assert_eq!(&dest[0..3], &[1, 2, 3], "First row should match");
assert_eq!(&dest[6..9], &[4, 5, 6], "Second row should match");
assert_eq!(&dest[12..15], &[7, 8, 9], "Third row should match");
assert_eq!(
&dest[3..6],
&[0, 0, 0],
"First row padding should be unchanged"
);
assert_eq!(
&dest[9..12],
&[0, 0, 0],
"Second row padding should be unchanged"
);
assert_eq!(
&dest[15..18],
&[0, 0, 0],
"Third row padding should be unchanged"
);
}
#[test]
fn assume_init_vec_roundtrip_after_full_initialization() {
let mut values = uninit_vec::<u16>(4);
for (idx, value) in values.iter_mut().enumerate() {
value.write((idx as u16 + 1) * 10);
}
let values = unsafe { assume_init_vec(values) };
assert_eq!(values, vec![10, 20, 30, 40]);
}