99mod test_utils;
1010
1111use fastpfor:: { FastPFor128 , FastPFor256 , FastPForBlock128 } ;
12- use test_utils:: { block_compress, compress, decompress, roundtrip} ;
12+ use test_utils:: { block_compress, block_decompress , compress, decompress, roundtrip} ;
1313
1414mod common;
1515use common:: { get_test_cases, test_input_sizes} ;
1616use fastpfor:: cpp:: CppFastPFor128 ;
17- use fastpfor:: { AnyLenCodec , BlockCodec , slice_to_blocks} ;
17+
18+ use crate :: test_utils:: roundtrip_full;
1819
1920/// C++ `AnyLenCodec` encode → Rust `BlockCodec` decode (same wire format for block-aligned data).
2021#[ test]
2122fn test_rust_decompresses_cpp_encoded_data ( ) {
22- let mut codec_cpp = CppFastPFor128 :: default ( ) ;
23- let mut codec_rs = FastPForBlock128 :: default ( ) ;
24- let mut cpp_compressed = Vec :: new ( ) ;
25-
2623 for n in test_input_sizes ( ) {
2724 for input in get_test_cases ( n + 128 ) {
2825 if input. len ( ) % 128 != 0 || input. is_empty ( ) {
2926 continue ;
3027 }
31- let n_blocks = input. len ( ) / 128 ;
32-
33- cpp_compressed. truncate ( 0 ) ;
34- codec_cpp. encode ( & input, & mut cpp_compressed) . unwrap ( ) ;
35-
36- let mut rust_decoded = Vec :: new ( ) ;
37- codec_rs
38- . decode_blocks (
39- & cpp_compressed,
40- Some ( u32:: try_from ( n_blocks * 128 ) . expect ( "block count fits in u32" ) ) ,
41- & mut rust_decoded,
42- )
43- . unwrap_or_else ( |e| panic ! ( "Rust decompress of C++ data failed: {e:?}" ) ) ;
44-
28+ let cpp_compressed = compress :: < CppFastPFor128 > ( & input) . unwrap ( ) ;
29+ let rust_decoded =
30+ block_decompress :: < FastPForBlock128 > ( & cpp_compressed, Some ( input. len ( ) as u32 ) )
31+ . unwrap_or_else ( |e| panic ! ( "Rust decompress of C++ data failed: {e:?}" ) ) ;
4532 assert_eq ! (
4633 rust_decoded,
4734 input,
@@ -55,35 +42,14 @@ fn test_rust_decompresses_cpp_encoded_data() {
5542/// Rust `BlockCodec` encode → C++ `AnyLenCodec` decode (same wire format).
5643#[ test]
5744fn test_cpp_decompresses_rust_block_encoded_data ( ) {
58- let mut codec_cpp = CppFastPFor128 :: default ( ) ;
59- let mut codec_rs = FastPForBlock128 :: default ( ) ;
60-
6145 for n in test_input_sizes ( ) {
6246 for input in get_test_cases ( n + 128 ) {
6347 if input. len ( ) % 128 != 0 || input. is_empty ( ) {
6448 continue ;
6549 }
66- let ( blocks, _) = slice_to_blocks :: < FastPForBlock128 > ( & input) ;
67- let n_blocks = blocks. len ( ) ;
68- let expected_len = n_blocks * 128 ;
69-
70- let mut rs_compressed = Vec :: new ( ) ;
71- codec_rs. encode_blocks ( blocks, & mut rs_compressed) . unwrap ( ) ;
72-
73- let mut cpp_decoded = Vec :: new ( ) ;
74- codec_cpp
75- . decode (
76- & rs_compressed,
77- & mut cpp_decoded,
78- Some ( u32:: try_from ( expected_len) . expect ( "expected len fits in u32" ) ) ,
79- )
80- . unwrap_or_else ( |e| panic ! ( "C++ decompress of Rust data failed: {e:?}" ) ) ;
81-
82- assert_eq ! (
83- cpp_decoded,
84- input,
85- "Rust→C++ roundtrip mismatch for len {}" ,
86- input. len( )
50+ roundtrip_full :: < FastPFor128 , CppFastPFor128 > (
51+ & input,
52+ Some ( input. len ( ) . try_into ( ) . unwrap ( ) ) ,
8753 ) ;
8854 }
8955 }
@@ -123,16 +89,9 @@ fn test_rust_and_cpp_compression_matches() {
12389/// Rust `AnyLenCodec` (`CompositeCodec`) encoder → round-trip.
12490#[ test]
12591fn test_rust_anylen_roundtrip ( ) {
126- let mut codec = FastPFor256 :: default ( ) ;
127- let mut compressed = Vec :: new ( ) ;
128- let mut decoded = Vec :: new ( ) ;
12992 for n in test_input_sizes ( ) {
13093 for input in get_test_cases ( n) {
131- compressed. truncate ( 0 ) ;
132- decoded. truncate ( 0 ) ;
133- codec. encode ( & input, & mut compressed) . unwrap ( ) ;
134- codec. decode ( & compressed, & mut decoded, None ) . unwrap ( ) ;
135- assert_eq ! ( decoded, input, "Rust AnyLenCodec round-trip failed" ) ;
94+ roundtrip :: < FastPFor256 > ( & input) ;
13695 }
13796 }
13897}
0 commit comments