oodle 0.2.0

Oodle wrapper for rust
Documentation
use oodle::{
    Error, Oodle, OodleCheckCrc, OodleCompressionLevel, OodleCompressor, OodleDecodeThreadPhase,
    OodleFuzzSafe, OodleVerbosity,
};

fn load_oodle() -> Oodle {
    let path = std::env::var("OODLE_LIB_PATH").expect("set OODLE_LIB_PATH to the Oodle library");
    Oodle::load(&path).expect("failed to load Oodle library")
}

#[test]
#[ignore]
fn compress_decompress_roundtrip_kraken() {
    let oodle = load_oodle();
    let input = b"Hello, Oodle! This is a test of compress and decompress roundtrip.";

    let max_size = oodle.get_compressed_buffer_size_needed(OodleCompressor::Kraken, input.len());
    let mut compressed = vec![0u8; max_size];

    let compressed_size = oodle
        .compress(
            OodleCompressor::Kraken,
            OodleCompressionLevel::Normal,
            input,
            &mut compressed,
        )
        .expect("compression failed");
    compressed.truncate(compressed_size);

    let mut decompressed = vec![0u8; input.len()];
    let decompressed_size = oodle
        .decompress(&compressed, &mut decompressed)
        .expect("decompression failed");

    assert_eq!(decompressed_size, input.len());
    assert_eq!(&decompressed, input.as_slice());
}

#[test]
#[ignore]
fn compress_decompress_with_options_mermaid() {
    let oodle = load_oodle();
    let input: Vec<u8> = (0..4096).map(|i| (i % 251) as u8).collect();

    let max_size = oodle.get_compressed_buffer_size_needed(OodleCompressor::Mermaid, input.len());
    let mut compressed = vec![0u8; max_size];

    let compressed_size = oodle
        .compress(
            OodleCompressor::Mermaid,
            OodleCompressionLevel::Optimal2,
            &input,
            &mut compressed,
        )
        .expect("compression failed");
    compressed.truncate(compressed_size);

    let mut decompressed = vec![0u8; input.len()];
    let decompressed_size = oodle
        .decompress_with_options(
            &compressed,
            &mut decompressed,
            OodleFuzzSafe::Yes,
            OodleCheckCrc::No,
            OodleVerbosity::None,
            OodleDecodeThreadPhase::All,
        )
        .expect("decompression failed");

    assert_eq!(decompressed_size, input.len());
    assert_eq!(decompressed, input);
}

#[test]
#[ignore]
fn get_decode_buffer_size_returns_reasonable_value() {
    let oodle = load_oodle();
    let raw_size = 65536;
    let buf_size = oodle.get_decode_buffer_size(OodleCompressor::Kraken, raw_size, true);
    assert!(buf_size >= raw_size);
}

#[test]
#[ignore]
fn get_compress_scratch_mem_bound_returns_nonzero() {
    let oodle = load_oodle();
    let bound = oodle.get_compress_scratch_mem_bound(
        OodleCompressor::Kraken,
        OodleCompressionLevel::Normal,
        65536,
    );
    assert!(bound > 0);
}

#[test]
#[ignore]
fn decompress_invalid_data_returns_error() {
    let oodle = load_oodle();
    let garbage = [0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01, 0x02, 0x03];
    let mut output = vec![0u8; 256];

    let result = oodle.decompress(&garbage, &mut output);
    assert!(result.is_err());
    assert!(matches!(result.unwrap_err(), Error::DecompressFailed));
}