Skip to content

Commit 765eff1

Browse files
test: rust decoding test for cpp-encoded result (#31)
Context: - As we develop the native Rust implementation, we need a way to ensure the results match those from the benchmark C++ implementation. Implemented: - Added `test_rust_decompresses_cpp_encoded_data` to verify end-to-end decoding using deterministic input with varied bit patterns for better coverage. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 915d1fe commit 765eff1

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

tests/cpp_compat_tests.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#![cfg(all(feature = "rust", feature = "cpp"))]
2+
3+
use fastpfor::cpp::Codec32 as _;
4+
use fastpfor::rust::Integer as _;
5+
use fastpfor::{cpp, rust};
6+
use std::io::Cursor;
7+
8+
#[test]
9+
fn test_rust_decompresses_cpp_encoded_data() {
10+
let input: Vec<u32> = (0..256).map(|i| (i * 32) ^ (i >> 1)).collect();
11+
12+
// Buffer for the C++ encoded
13+
let mut compressed_buffer = vec![0; input.len()];
14+
15+
// C++ encoding
16+
let codec_cpp = cpp::FastPFor128Codec::new();
17+
let encoded_cpp = codec_cpp.encode32(&input, &mut compressed_buffer).unwrap();
18+
let compressed_len = encoded_cpp.len();
19+
20+
// C++ decoding
21+
let mut decoded_by_cpp = vec![0; input.len()];
22+
let decoded_cpp = codec_cpp
23+
.decode32(encoded_cpp, &mut decoded_by_cpp)
24+
.unwrap();
25+
26+
// Rust decoding
27+
let mut input_offset = Cursor::new(0u32);
28+
let mut codec_rs = rust::FastPFOR::new(rust::DEFAULT_PAGE_SIZE, rust::BLOCK_SIZE_128);
29+
let mut decoded_by_rust = vec![0; input.len()];
30+
codec_rs
31+
.uncompress(
32+
&compressed_buffer,
33+
compressed_len as u32,
34+
&mut input_offset,
35+
&mut decoded_by_rust,
36+
&mut Cursor::new(0u32),
37+
)
38+
.unwrap();
39+
40+
assert_eq!(
41+
decoded_cpp.len(),
42+
decoded_by_rust.len(),
43+
"Mismatched output lengths"
44+
);
45+
assert_eq!(decoded_cpp, decoded_by_rust);
46+
}

0 commit comments

Comments
 (0)