blob: 849c3eb687a5b374edbd3543939537d8a36ed1fb [file] [log] [blame]
macro_rules! io_test_cases {
($impl:ident, $variant:ident) => {
mod $impl {
mod bufread {
mod compress {
use crate::utils::{
algos::$variant::{
sync,
$impl::{bufread, read},
},
one_to_six, one_to_six_stream, InputStream, Level,
};
#[test]
#[ntest::timeout(1000)]
fn empty() {
let mut input: &[u8] = &[];
let compressed = bufread::compress(&mut input);
let output = sync::decompress(&compressed);
assert_eq!(output, &[][..]);
}
#[test]
#[ntest::timeout(1000)]
fn to_full_output() {
let mut output = [];
let encoder = bufread::Encoder::new(bufread::from(&one_to_six_stream()));
let result = read::poll_read(encoder, &mut output);
assert!(matches!(result, Ok(0)));
}
#[test]
#[ntest::timeout(1000)]
fn empty_chunk() {
let input = InputStream::new(vec![vec![]]);
let compressed = bufread::compress(bufread::from(&input));
let output = sync::decompress(&compressed);
assert_eq!(output, input.bytes());
}
#[test]
#[ntest::timeout(1000)]
fn short() {
let compressed = bufread::compress(bufread::from(&one_to_six_stream()));
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn long() {
let input = InputStream::new(vec![
(0..32_768).map(|_| rand::random()).collect(),
(0..32_768).map(|_| rand::random()).collect(),
]);
let compressed = bufread::compress(bufread::from(&input));
let output = sync::decompress(&compressed);
assert_eq!(output, input.bytes());
}
#[test]
fn with_level_best() {
let encoder = bufread::Encoder::with_quality(
bufread::from(&one_to_six_stream()),
Level::Best,
);
let compressed = read::to_vec(encoder);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_default() {
let encoder = bufread::Encoder::new(bufread::from(&one_to_six_stream()));
let compressed = read::to_vec(encoder);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_0() {
let encoder = bufread::Encoder::with_quality(
bufread::from(&one_to_six_stream()),
Level::Precise(0),
);
let compressed = read::to_vec(encoder);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_max() {
let encoder = bufread::Encoder::with_quality(
bufread::from(&one_to_six_stream()),
Level::Precise(i32::max_value()),
);
let compressed = read::to_vec(encoder);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
}
mod decompress {
use crate::utils::{
algos::$variant::{
sync,
$impl::{bufread, read},
},
one_to_six, one_to_six_stream, InputStream,
};
#[test]
#[ntest::timeout(1000)]
fn empty() {
let compressed = sync::compress(&[]);
let input = InputStream::new(vec![compressed]);
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, &[][..]);
}
#[test]
#[ntest::timeout(1000)]
fn to_full_output() {
let mut output = [];
let decoder = bufread::Decoder::new(bufread::from(&one_to_six_stream()));
let result = read::poll_read(decoder, &mut output);
assert!(matches!(result, Ok(0)));
}
#[test]
#[ntest::timeout(1000)]
fn zeros() {
let compressed = sync::compress(&[0; 10]);
let input = InputStream::new(vec![compressed]);
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, &[0; 10][..]);
}
#[test]
#[ntest::timeout(1000)]
fn short() {
let compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);
let input = InputStream::new(vec![compressed]);
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn short_chunks() {
let compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);
let input = InputStream::from(compressed.chunks(2));
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn trailer() {
let mut compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);
compressed.extend_from_slice(&[7, 8, 9, 10]);
let input = InputStream::new(vec![compressed]);
let mut reader = bufread::from(&input);
let output = bufread::decompress(&mut reader);
let trailer = read::to_vec(reader);
assert_eq!(output, one_to_six());
assert_eq!(trailer, &[7, 8, 9, 10][..]);
}
#[test]
#[ntest::timeout(1000)]
fn long() {
let bytes: Vec<u8> = (0..65_536).map(|_| rand::random()).collect();
let compressed = sync::compress(&bytes);
let input = InputStream::new(vec![compressed]);
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, bytes);
}
#[test]
#[ntest::timeout(1000)]
fn long_chunks() {
let bytes: Vec<u8> = (0..65_536).map(|_| rand::random()).collect();
let compressed = sync::compress(&bytes);
let input = InputStream::from(compressed.chunks(1024));
let output = bufread::decompress(bufread::from(&input));
assert_eq!(output, bytes);
}
#[test]
#[ntest::timeout(1000)]
fn multiple_members() {
let compressed = [
sync::compress(&[1, 2, 3, 4, 5, 6]),
sync::compress(&[6, 5, 4, 3, 2, 1]),
]
.join(&[][..]);
let input = InputStream::new(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][..]);
}
}
}
mod write {
mod compress {
use crate::utils::{
algos::$variant::{sync, $impl::write},
one_to_six, one_to_six_stream, InputStream, Level,
};
#[test]
#[ntest::timeout(1000)]
fn empty() {
let input = InputStream::new(vec![]);
let compressed = write::compress(input.as_ref(), 65_536);
let output = sync::decompress(&compressed);
assert_eq!(output, &[][..]);
}
#[test]
#[ntest::timeout(1000)]
fn empty_chunk() {
let input = InputStream::new(vec![vec![]]);
let compressed = write::compress(input.as_ref(), 65_536);
let output = sync::decompress(&compressed);
assert_eq!(output, input.bytes());
}
#[test]
#[ntest::timeout(1000)]
fn short() {
let compressed = write::compress(one_to_six_stream().as_ref(), 65_536);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn short_chunk_output() {
let compressed = write::compress(one_to_six_stream().as_ref(), 2);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn long() {
let input = InputStream::new(vec![
(0..32_768).map(|_| rand::random()).collect(),
(0..32_768).map(|_| rand::random()).collect(),
]);
let compressed = write::compress(input.as_ref(), 65_536);
let output = sync::decompress(&compressed);
assert_eq!(output, input.bytes());
}
#[test]
#[ntest::timeout(1000)]
fn long_chunk_output() {
let input = InputStream::new(vec![
(0..32_768).map(|_| rand::random()).collect(),
(0..32_768).map(|_| rand::random()).collect(),
]);
let compressed = write::compress(input.as_ref(), 20);
let output = sync::decompress(&compressed);
assert_eq!(output, input.bytes());
}
#[test]
fn with_level_best() {
let compressed = write::to_vec(
one_to_six_stream().as_ref(),
|input| Box::pin(write::Encoder::with_quality(input, Level::Best)),
65_536,
);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_default() {
let compressed = write::to_vec(
one_to_six_stream().as_ref(),
|input| Box::pin(write::Encoder::new(input)),
65_536,
);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_0() {
let compressed = write::to_vec(
one_to_six_stream().as_ref(),
|input| {
Box::pin(write::Encoder::with_quality(input, Level::Precise(0)))
},
65_536,
);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
#[test]
fn with_level_max() {
let compressed = write::to_vec(
one_to_six_stream().as_ref(),
|input| {
Box::pin(write::Encoder::with_quality(
input,
Level::Precise(i32::max_value()),
))
},
65_536,
);
let output = sync::decompress(&compressed);
assert_eq!(output, one_to_six());
}
}
mod decompress {
use crate::utils::{
algos::$variant::{sync, $impl::write},
one_to_six, InputStream,
};
#[test]
#[ntest::timeout(1000)]
fn empty() {
let compressed = sync::compress(&[]);
let input = InputStream::new(vec![compressed]);
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, &[][..]);
}
#[test]
#[ntest::timeout(1000)]
fn zeros() {
let compressed = sync::compress(&[0; 10]);
let input = InputStream::new(vec![compressed]);
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, &[0; 10][..]);
}
#[test]
#[ntest::timeout(1000)]
fn short() {
let compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);
let input = InputStream::new(vec![compressed]);
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn short_chunks() {
let compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);
let input = InputStream::from(compressed.chunks(2));
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, one_to_six());
}
#[test]
#[ntest::timeout(1000)]
fn long() {
let bytes: Vec<u8> = (0..65_536).map(|_| rand::random()).collect();
let compressed = sync::compress(&bytes);
let input = InputStream::new(vec![compressed]);
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, bytes);
}
#[test]
#[ntest::timeout(1000)]
fn long_chunks() {
let bytes: Vec<u8> = (0..65_536).map(|_| rand::random()).collect();
let compressed = sync::compress(&bytes);
let input = InputStream::from(compressed.chunks(1024));
let output = write::decompress(input.as_ref(), 65_536);
assert_eq!(output, bytes);
}
}
}
}
};
}
macro_rules! test_cases {
($variant:ident) => {
mod $variant {
#[cfg(feature = "futures-io")]
io_test_cases!(futures, $variant);
#[cfg(feature = "tokio")]
io_test_cases!(tokio, $variant);
}
};
}