oodle_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5#[cfg(feature = "bindgen")]
6include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
7
8#[cfg(not(feature = "bindgen"))]
9include!("bindings.rs");
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14
15    #[test]
16    fn test_oodle_decompression() {
17        let input = include_bytes!("../test_data/compressed");
18        let output_size = u32::from_le_bytes([input[0], input[1], input[2], input[3]]);
19        let mut output = vec![0u8; output_size as usize];
20
21        let n = unsafe {
22            OodleLZ_Decompress(
23                input.as_ptr().offset(4) as *const _,
24                input.len() as isize - 4,
25                output.as_mut_ptr() as *mut _,
26                output.len() as isize,
27                OodleLZ_FuzzSafe_OodleLZ_FuzzSafe_Yes,
28                OodleLZ_CheckCRC_OodleLZ_CheckCRC_No,
29                OodleLZ_Verbosity_OodleLZ_Verbosity_None,
30                std::ptr::null_mut(),
31                0,
32                None,
33                std::ptr::null_mut(),
34                std::ptr::null_mut(),
35                0,
36                OodleLZ_Decode_ThreadPhase_OodleLZ_Decode_ThreadPhaseAll,
37            )
38        };
39
40        // Make sure the decompressed size matches the expected size.
41        assert_eq!(n, output_size as isize);
42
43        // Compare the decompressed data to the expected output.
44        let expected = include_bytes!("../test_data/decompressed");
45        assert_eq!(output, expected);
46    }
47
48    #[test]
49    fn test_oodle_compression() {
50        let input = include_bytes!("../test_data/decompressed");
51
52        let output_size = unsafe {
53            OodleLZ_GetCompressedBufferSizeNeeded(
54                OodleLZ_Compressor_OodleLZ_Compressor_Kraken,
55                input.len() as isize,
56            )
57        } as usize;
58
59        let mut output = vec![0u8; output_size];
60
61        let n = unsafe {
62            OodleLZ_Compress(
63                OodleLZ_Compressor_OodleLZ_Compressor_Kraken,
64                input.as_ptr() as *const _,
65                input.len() as isize,
66                output.as_mut_ptr() as *mut _,
67                OodleLZ_CompressionLevel_OodleLZ_CompressionLevel_Normal,
68                std::ptr::null(),
69                std::ptr::null(),
70                std::ptr::null(),
71                std::ptr::null_mut(),
72                0,
73            )
74        };
75
76        // Trim the output buffer to the actual size of the compressed data and convert
77        // it to a Vec<u8>, else the test will end up double free-ing the buffer.
78        let output = output[..n as usize].to_vec();
79
80        // Compare the compressed data to the expected output.
81        let expected = include_bytes!("../test_data/compressed");
82        let expected = &expected[4..]; // Skip the size header.
83        assert_eq!(output, expected);
84    }
85}