Skip to content

Commit

Permalink
Merge pull request #2219 from Morgane55440/imagebuffer-new-zero-garantee
Browse files Browse the repository at this point in the history
garantee that `ImageBuffer::new()` returns a buffer filled with `zero()`s of the corresponding type
  • Loading branch information
HeroicKatora committed Apr 30, 2024
2 parents 249184e + cad532f commit 5013041
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions src/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1257,6 +1257,8 @@ where
impl<P: Pixel> ImageBuffer<P, Vec<P::Subpixel>> {
/// Creates a new image buffer based on a `Vec<P::Subpixel>`.
///
/// all the pixels of this image have a value of zero, regardless of the data type or number of channels.
///
/// # Panics
///
/// Panics when the resulting image is larger than the maximum size of a vector.
Expand Down Expand Up @@ -1480,16 +1482,42 @@ mod test {
use crate::math::Rect;
use crate::GenericImage as _;
use crate::ImageFormat;
use crate::{color, Rgb};
use crate::{Luma, LumaA, Pixel, Rgb, Rgba};
use num_traits::Zero;

#[test]
/// Tests if image buffers from slices work
fn slice_buffer() {
let data = [0; 9];
let buf: ImageBuffer<color::Luma<u8>, _> = ImageBuffer::from_raw(3, 3, &data[..]).unwrap();
let buf: ImageBuffer<Luma<u8>, _> = ImageBuffer::from_raw(3, 3, &data[..]).unwrap();
assert_eq!(&*buf, &data[..])
}

macro_rules! new_buffer_zero_test {
($test_name:ident, $pxt:ty) => {
#[test]
fn $test_name() {
let buffer = ImageBuffer::<$pxt, Vec<<$pxt as Pixel>::Subpixel>>::new(2, 2);
assert!(buffer
.iter()
.all(|p| *p == <$pxt as Pixel>::Subpixel::zero()));
}
};
}

new_buffer_zero_test!(luma_u8_zero_test, Luma<u8>);
new_buffer_zero_test!(luma_u16_zero_test, Luma<u16>);
new_buffer_zero_test!(luma_f32_zero_test, Luma<f32>);
new_buffer_zero_test!(luma_a_u8_zero_test, LumaA<u8>);
new_buffer_zero_test!(luma_a_u16_zero_test, LumaA<u16>);
new_buffer_zero_test!(luma_a_f32_zero_test, LumaA<f32>);
new_buffer_zero_test!(rgb_u8_zero_test, Rgb<u8>);
new_buffer_zero_test!(rgb_u16_zero_test, Rgb<u16>);
new_buffer_zero_test!(rgb_f32_zero_test, Rgb<f32>);
new_buffer_zero_test!(rgb_a_u8_zero_test, Rgba<u8>);
new_buffer_zero_test!(rgb_a_u16_zero_test, Rgba<u16>);
new_buffer_zero_test!(rgb_a_f32_zero_test, Rgba<f32>);

#[test]
fn get_pixel() {
let mut a: RgbImage = ImageBuffer::new(10, 10);
Expand Down

0 comments on commit 5013041

Please sign in to comment.