| 201 | |
| 202 | #[test] |
| 203 | fn r_callback_test() { |
| 204 | use std::mem::MaybeUninit; |
| 205 | use std::sync::atomic::AtomicU16; |
| 206 | use std::sync::atomic::Ordering::SeqCst; |
| 207 | use std::sync::Arc; |
| 208 | |
| 209 | let called = Arc::new(AtomicU16::new(0)); |
| 210 | let called2 = called.clone(); |
| 211 | let mut res = { |
| 212 | let a = new(); |
| 213 | let get_row = move |output_row: &mut [MaybeUninit<RGBA>], y: usize| { |
| 214 | assert!((0..5).contains(&y)); |
| 215 | assert_eq!(123, output_row.len()); |
| 216 | for (n, out) in output_row.iter_mut().enumerate() { |
| 217 | let n = n as u8; |
| 218 | out.write(RGBA::new(n, n, n, n)); |
| 219 | } |
| 220 | called2.fetch_add(1, SeqCst); |
| 221 | }; |
| 222 | let mut img = unsafe { |
| 223 | Image::new_fn(&a, get_row, 123, 5, 0.).unwrap() |
| 224 | }; |
| 225 | a.quantize(&mut img).unwrap() |
| 226 | }; |
| 227 | let called = called.load(SeqCst); |
| 228 | assert!(called > 5 && called < 50); |
| 229 | assert_eq!(123, res.palette().len()); |
| 230 | } |
| 231 | |
| 232 | #[test] |
| 233 | fn sizes() { |