#[allow(unused)]
use futures::{executor::block_on, io::AsyncReadExt};

#[macro_use]
mod utils;

test_cases!(xz);

#[allow(unused)]
use utils::{algos::xz::sync, InputStream};

#[cfg(feature = "futures-io")]
use utils::algos::xz::futures::{bufread, read};

#[test]
#[ntest::timeout(1000)]
#[cfg(feature = "futures-io")]
fn bufread_multiple_members_with_padding() {
    let compressed = [
        sync::compress(&[1, 2, 3, 4, 5, 6]),
        vec![0, 0, 0, 0],
        sync::compress(&[6, 5, 4, 3, 2, 1]),
        vec![0, 0, 0, 0],
    ]
    .join(&[][..]);

    let input = InputStream::from(vec![compressed]);

    let mut decoder = bufread::Decoder::new(bufread::from(&input));
    decoder.multiple_members(true);
    let output = read::to_vec(decoder);

    assert_eq!(output, &[1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1][..]);
}

#[test]
#[ntest::timeout(1000)]
#[cfg(feature = "futures-io")]
fn bufread_multiple_members_with_invalid_padding() {
    let compressed = [
        sync::compress(&[1, 2, 3, 4, 5, 6]),
        vec![0, 0, 0],
        sync::compress(&[6, 5, 4, 3, 2, 1]),
        vec![0, 0, 0, 0],
    ]
    .join(&[][..]);

    let input = InputStream::from(vec![compressed]);

    let mut decoder = bufread::Decoder::new(bufread::from(&input));
    decoder.multiple_members(true);

    let mut output = Vec::new();
    assert!(block_on(decoder.read_to_end(&mut output)).is_err());
}
