delta_encoding/
lib.rs

1#![allow(clippy::needless_doctest_main)]
2#![doc = include_str!("../README.md")]
3
4mod decoder;
5mod encoder;
6
7pub use decoder::{DeltaDecoder, DeltaDecoderExt, DeltaDecoderIter};
8pub use encoder::{DeltaEncoder, DeltaEncoderExt, DeltaEncoderIter};
9
10#[cfg(test)]
11mod tests {
12    use std::iter::zip;
13
14    use super::*;
15
16    pub(crate) const TEST_DATA: &[(&[i64], &[i64])] = &[
17        (&[], &[]),
18        (&[0], &[0]),
19        (&[1], &[1]),
20        (&[1, 2], &[1, 1]),
21        (&[1, -2], &[1, -3]),
22        (&[1, 3, 5], &[1, 2, 2]),
23        (&[1, 3, 10], &[1, 2, 7]),
24        (&[i64::MIN], &[i64::MIN]),
25        (&[i64::MAX], &[i64::MAX]),
26        (
27            &[i64::MAX, i64::MIN],
28            &[i64::MAX, i64::MIN.wrapping_sub(i64::MAX)],
29        ),
30        (&[0, i64::MAX], &[0, i64::MAX]),
31        (
32            &[0, i64::MAX, i64::MIN, i64::MAX],
33            &[
34                0,
35                i64::MAX,
36                i64::MIN.wrapping_sub(i64::MAX),
37                i64::MAX.wrapping_add(i64::MAX) + 1,
38            ],
39        ),
40    ];
41
42    fn run(original: &[i64], encoded: &[i64]) {
43        assert_eq!(original.len(), encoded.len());
44
45        let mut enc = DeltaEncoder::default();
46        let mut dec = DeltaDecoder::default();
47        for (&o, &e) in zip(original, encoded) {
48            assert_eq!(enc.encode(o), e, "individual encoded value mismatch");
49            assert_eq!(dec.decode(e), o, "individual decoded value mismatch");
50        }
51
52        let result: Vec<i64> = encoded.iter().copied().original().deltas().collect();
53        assert_eq!(result, encoded, "round-trip decoded: {encoded:?}");
54
55        let result: Vec<i64> = original.iter().copied().deltas().original().collect();
56        assert_eq!(result, original, "round-trip original: {original:?}");
57    }
58
59    #[test]
60    fn test() {
61        for &(original, encoded) in TEST_DATA {
62            run(original, encoded);
63        }
64    }
65}