#![allow(non_camel_case_types)]
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
pub const PLUM_MODE_FILENAME: usize = usize::MAX;
pub const PLUM_MODE_BUFFER: usize = usize::MAX - 1;
pub const PLUM_MODE_CALLBACK: usize = usize::MAX - 2;
pub const PLUM_MAX_MEMORY_SIZE: usize = usize::MAX - 3;
#[cfg(test)]
mod tests {
use std::ffi::CString;
use super::*;
#[test]
fn load_test_square() {
let path = CString::new("./testsq.png").unwrap();
let mut error = 0u32;
let image = unsafe {
plum_load_image_limited(
path.as_ptr().cast(),
PLUM_MODE_FILENAME,
PLUM_COLOR_32 | PLUM_PALETTE_NONE,
isize::MAX as usize,
&mut error as *mut _,
)
};
let Some(image) = (unsafe { image.as_mut() }) else {
panic!("Loading testsq.png failed, plum_load_image returned error {error}");
};
assert_eq!(plum_image_types::from(image.type_), PLUM_IMAGE_PNG);
assert_eq!(plum_flags::from(image.color_format), PLUM_COLOR_32);
assert_eq!(image.frames, 1);
assert_eq!(image.height, 21);
assert_eq!(image.width, 21);
assert_eq!(image.palette, std::ptr::null_mut());
let data = unsafe { image.data.as_ref() }.expect("image.data is NULL!?");
let data = unsafe {
std::slice::from_raw_parts(
data as *const _ as *const u32,
(image.height * image.width) as usize, )
};
const EXPECTED_COLORS: [u32; 21 * 21] = [
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000,
];
let mut matched = true;
for row_id in 0..21 {
let start = row_id * 21;
let range = start..=start + 20;
let expected = &EXPECTED_COLORS[range.clone()];
let got = &data[range];
if got != expected {
eprintln!("Row {row_id} mismatch!");
eprintln!("\tExpected {expected:?},");
eprintln!("\t got {got:?}");
matched = false;
}
}
assert!(matched);
}
}