#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "compress")]
pub mod compress;
#[cfg(feature = "decompress")]
pub mod decompress;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Error {
LookbehindOverrun,
OutputOverrun,
InputOverrun,
Error,
InputNotConsumed,
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
match self {
Error::LookbehindOverrun => write!(f, "lookbehind overrun"),
Error::OutputOverrun => write!(f, "output overrun"),
Error::InputOverrun => write!(f, "input overrun"),
Error::Error => write!(f, "unknown error"),
Error::InputNotConsumed => write!(f, "input not consumed"),
}
}
}
impl core::error::Error for Error {}
#[cfg(test)]
#[cfg(all(feature = "compress", feature = "decompress", feature = "alloc"))]
mod tests {
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::vec;
use super::{compress::compress, decompress::decompress};
const INPUT1: &[u8] = include_bytes!("test1.txt");
const INPUT2: &[u8] = include_bytes!("test2.txt");
#[test]
fn test_round_trip1() {
let compressed = compress(INPUT1).expect("Failed to compress");
let mut dst = vec![0u8; INPUT1.len()];
decompress(&compressed, &mut dst).expect("Failed to decompress");
assert_eq!(INPUT1, dst.as_slice());
}
#[test]
fn test_round_trip2() {
let compressed = compress(INPUT2).expect("Failed to compress");
let mut dst = vec![0u8; INPUT2.len()];
decompress(&compressed, &mut dst).expect("Failed to decompress");
assert_eq!(INPUT2, dst.as_slice());
}
}