1#![allow(non_camel_case_types)]
2
3include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
4
5pub const PLUM_MODE_FILENAME: usize = usize::MAX;
9pub const PLUM_MODE_BUFFER: usize = usize::MAX - 1;
10pub const PLUM_MODE_CALLBACK: usize = usize::MAX - 2;
11pub const PLUM_MAX_MEMORY_SIZE: usize = usize::MAX - 3;
12
13#[cfg(test)]
14mod tests {
15 use std::ffi::CString;
16
17 use super::*;
18
19 #[test]
22 fn load_test_square() {
23 let path = CString::new("./testsq.png").unwrap();
27 let mut error = 0u32;
28 let image = unsafe {
31 plum_load_image_limited(
32 path.as_ptr().cast(),
33 PLUM_MODE_FILENAME,
34 PLUM_COLOR_32 | PLUM_PALETTE_NONE,
35 isize::MAX as usize,
36 &mut error as *mut _,
37 )
38 };
39 let Some(image) = (unsafe { image.as_mut() }) else {
49 panic!("Loading testsq.png failed, plum_load_image returned error {error}");
50 };
51 assert_eq!(plum_image_types::from(image.type_), PLUM_IMAGE_PNG);
52 assert_eq!(plum_flags::from(image.color_format), PLUM_COLOR_32);
53 assert_eq!(image.frames, 1);
54 assert_eq!(image.height, 21);
55 assert_eq!(image.width, 21);
56 assert_eq!(image.palette, std::ptr::null_mut());
57
58 let data = unsafe { image.data.as_ref() }.expect("image.data is NULL!?");
59 let data = unsafe {
60 std::slice::from_raw_parts(
61 data as *const _ as *const u32,
62 (image.height * image.width) as usize, )
64 };
65
66 const EXPECTED_COLORS: [u32; 21 * 21] = [
67 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
68 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
69 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
70 0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
72 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
73 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000,
74 0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
76 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
77 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
78 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
80 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
81 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
82 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
84 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
85 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
86 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
88 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
89 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
90 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
92 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
93 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
94 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
96 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
97 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
98 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
100 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
101 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
102 0x00000000, 0x00ffffff, 0x00000000, 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000,
104 0x7fff0000, 0x7fff0000, 0x7fff0000, 0x00000000, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff,
105 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x7f0000ff, 0x00000000, 0x00ffffff, 0x00000000,
106 0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
108 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
109 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
110 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
112 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
113 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
114 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
116 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
117 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
118 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
120 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
121 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
122 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
124 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
125 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
126 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
128 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
129 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
130 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
132 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
133 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
134 0x00000000, 0x00ffffff, 0x00000000, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x7f00ffff,
136 0x7f00ffff, 0x7f00ffff, 0x7f00ffff, 0x00000000, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00,
137 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x7f00ff00, 0x00000000, 0x00ffffff, 0x00000000,
138 0x00000000, 0x00ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
140 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
141 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffffff, 0x00000000,
142 0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
144 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff,
145 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000,
146 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
148 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
149 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
150 0x00000000,
151 ];
153 let mut matched = true;
154 for row_id in 0..21 {
155 let start = row_id * 21;
156 let range = start..=start + 20;
157 let expected = &EXPECTED_COLORS[range.clone()];
158 let got = &data[range];
159 if got != expected {
160 eprintln!("Row {row_id} mismatch!");
161 eprintln!("\tExpected {expected:?},");
162 eprintln!("\t got {got:?}");
163 matched = false;
164 }
165 }
166 assert!(matched);
167 }
168}