1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
5
6#[cfg(test)]
7mod tests {
8 #[test]
9 fn test_round_trip_p4n() {
10 const n: usize = 3;
11 let mut nums = vec![33_u16, 44, 77];
12 let mut compressed = vec![0_u8; 1000];
13 let mut recovered = vec![0_u16; n + 200];
15 unsafe {
16 crate::p4nzenc128v16(nums.as_mut_ptr(), 3, compressed.as_mut_ptr());
17 crate::p4nzdec128v16(compressed.as_mut_ptr(), n, recovered.as_mut_ptr());
18 }
19 assert_eq!(recovered[..n], nums[..n]);
20 }
21
22 #[test]
23 fn test_round_trip_fp32() {
24 const n: usize = 3;
25 let mut nums = vec![33_u32, 44, 77];
26 let mut compressed = vec![0_u8; 1000];
27 let mut recovered = vec![0_u32; n];
28 unsafe {
29 let compressed_size = crate::fpxenc32(nums.as_mut_ptr(), 3, compressed.as_mut_ptr(), 0);
30 let decompressed_size =
31 crate::fpxdec32(compressed.as_mut_ptr(), n, recovered.as_mut_ptr(), 0);
32 assert_eq!(compressed_size, decompressed_size);
33 }
34 assert_eq!(recovered, nums);
35 }
36
37 #[test]
38 fn test_round_trip_fp32_with_very_short_length() {
39 let data: Vec<f32> = vec![10.0, 22.0, 23.0, 24.0];
40 let length = 1; let mut compressed = vec![0; 1000];
44 let mut decompressed = vec![0.0; length];
45
46 let compressed_size = unsafe {
48 crate::fpxenc32(
49 data.as_ptr() as *mut u32,
50 length,
51 compressed.as_mut_ptr(),
52 0,
53 )
54 };
55 if compressed_size >= compressed.len() {
56 panic!("Compress Buffer too small");
57 }
58
59 let decompressed_size = unsafe {
61 crate::fpxdec32(
62 compressed.as_mut_ptr(),
63 length,
64 decompressed.as_mut_ptr() as *mut u32,
65 0,
66 )
67 };
68
69 assert_eq!(decompressed_size, compressed_size);
74 assert_eq!(data[..length], decompressed[..length]);
75 }
76
77 #[test]
78 fn test_delta2d_decode() {
79 let mut buffer: Vec<i16> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
80 unsafe { crate::delta2d_decode16(2, 5, buffer.as_mut_ptr()) };
81 assert_eq!(buffer, vec![1, 2, 3, 4, 5, 7, 9, 11, 13, 15]);
82 }
83
84 #[test]
85 fn test_delta2d_encode() {
86 let mut buffer: Vec<i16> = vec![1, 2, 3, 4, 5, 7, 9, 11, 13, 15];
87 unsafe { crate::delta2d_encode16(2, 5, buffer.as_mut_ptr()) };
88 assert_eq!(buffer, vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
89
90 let mut buffer: Vec<u8> = vec![2, 0, 3, 0, 7, 0, 8, 0];
91 unsafe { crate::delta2d_encode16(4, 2, buffer.as_mut_ptr() as *mut i16) }
92 assert_eq!(&buffer, &[2, 0, 3, 0, 5, 0, 5, 0])
93 }
94
95 #[test]
96 fn test_delta2d_decode_xor() {
97 let mut buffer: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0];
98 unsafe { crate::delta2d_decode_xor(2, 5, buffer.as_mut_ptr()) };
99 let expected: Vec<f32> = vec![
100 1.0,
101 2.0,
102 3.0,
103 4.0,
104 5.0,
105 2.5521178e38,
106 2.0571151e-38,
107 3.526483e-38,
108 5.2897246e-38,
109 4.7019774e-38,
110 ];
111 assert_eq!(buffer, expected);
112 }
113
114 #[test]
115 fn test_delta2d_encode_xor() {
116 let mut buffer: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 5.0, 11.0, 12.0, 15.0];
117 unsafe { crate::delta2d_encode_xor(2, 5, buffer.as_mut_ptr()) };
118 let expected: Vec<f32> = vec![
119 1.0,
120 2.0,
121 3.0,
122 4.0,
123 5.0,
124 2.9774707e38,
125 1.469368e-38,
126 4.4081038e-38,
127 7.052966e-38,
128 7.6407133e-38,
129 ];
130 assert_eq!(buffer, expected);
131 }
132
133 #[test]
134 fn test_delta2d_xor_roundtrip() {
135 let mut buffer: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0];
136 unsafe {
137 crate::delta2d_encode_xor(2, 5, buffer.as_mut_ptr());
138 crate::delta2d_decode_xor(2, 5, buffer.as_mut_ptr());
139 }
140 let expected: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0];
141 assert_eq!(buffer, expected);
142 }
143
144 #[test]
145 fn test_delta2d_roundtrip() {
146 let mut buffer: Vec<i16> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
147 unsafe {
148 crate::delta2d_encode16(2, 5, buffer.as_mut_ptr());
149 crate::delta2d_decode16(2, 5, buffer.as_mut_ptr());
150 }
151 let expected: Vec<i16> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
152 assert_eq!(buffer, expected);
153 }
154}