#![no_main]
use libfuzzer_sys::fuzz_target;

use qoi_fast::{encode_size_limit, encode_to_vec};

fuzz_target!(|input: (bool, u8, &[u8])| {
    let (is_4, w_frac, data) = input;
    let channels = if is_4 { 4 } else { 3 };
    let size = data.len();
    let n_pixels = size / channels as usize;
    let (w, h) = if n_pixels == 0 {
        (0, 0)
    } else {
        let w = ((n_pixels * (1 + w_frac as usize)) / 256).max(1);
        let h = n_pixels / w;
        (w, h)
    };
    let out = encode_to_vec(&data[..(w * h * channels as usize)], w as u32, h as u32);
    if w * h != 0 {
        let out = out.unwrap();
        assert!(out.len() <= encode_size_limit(w as u32, h as u32, channels));
    } else {
        assert!(out.is_err());
    }
});
