// Copyright (c) the JPEG XL Project Authors. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. use arbtest::arbitrary::Arbitrary; use crate::error::Result; use super::{Image, ImageDataType, Rect}; impl Image { #[cfg(test)] pub fn new_random(size: (usize, usize), rng: &mut R) -> Result> { let mut img = Self::new(size)?; for y in 0..size.1 { img.row_mut(y).iter_mut().for_each(|x| *x = T::random(rng)); } Ok(img) } #[cfg(test)] pub fn new_range(size: (usize, usize), start: f32, step: f32) -> Result> { let mut img = Self::new(size)?; for y in 0..size.1 { img.row_mut(y).iter_mut().enumerate().for_each(|(x, val)| { *val = T::from_f64((start + step * (y * size.0 + x) as f32) as f64) }); } Ok(img) } } #[test] fn huge_image() { assert!(Image::::new((1 << 28, 1 << 28)).is_err()); } #[test] fn rect_basic() -> Result<()> { let mut image = Image::::new((32, 42))?; assert_eq!( image .get_rect_mut(Rect { origin: (31, 40), size: (1, 1) }) .size(), (1, 1) ); assert_eq!( image .get_rect_mut(Rect { origin: (0, 0), size: (1, 1) }) .size(), (1, 1) ); image .get_rect_mut(Rect { origin: (30, 30), size: (1, 1), }) .row(0)[0] = 1; assert_eq!(image.row(30)[30], 1); Ok(()) } fn f64_conversions Arbitrary<'a>>() { arbtest::arbtest(|u| { let t = T::arbitrary(u)?; assert_eq!(t, T::from_f64(t.to_f64())); Ok(()) }); } #[test] fn u8_f64_conv() { f64_conversions::(); } #[test] fn u16_f64_conv() { f64_conversions::(); } #[test] fn u32_f64_conv() { f64_conversions::(); } #[test] fn i8_f64_conv() { f64_conversions::(); } #[test] fn i16_f64_conv() { f64_conversions::(); } #[test] fn i32_f64_conv() { f64_conversions::(); } #[test] fn f32_f64_conv() { arbtest::arbtest(|u| { let t = f32::arbitrary(u)?; if !t.is_nan() { assert_eq!(t, f32::from_f64(t.to_f64())); } Ok(()) }); }