ldeflate 0.1.3

Pure Rust parallel DEFLATE/zlib compressor — the write side of linflate. Two-queue gatling scheduling: coalesce small objects, split large streams at full-flush boundaries.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
//! **Never compress what is already compressed** — an exact probe, and the
//! stored-DEFLATE emitter that makes acting on it free.
//!
//! Level-6 DEFLATE over already-compressed content measures a ratio of **1.000
//! while running 42x slower than a hash over the same bytes**
//! (`.nornir/ldeflate-design.md`, the incompressible finding). Every format this
//! crate writes hits that case constantly: a git object store full of packfiles,
//! a JAR full of PNGs, a `.tar.gz` of `.jpg`s. Paying an entropy coder to
//! produce its input back is the single largest avoidable cost on the write
//! side.
//!
//! `zip.rs` already stored an entry when deflate failed to help — but *after*
//! deflating it, so the CPU was already spent and only the bytes were saved.
//! This module moves the decision in front of the encoder, for all three
//! containers at once.
//!
//! # Why there is no entropy estimate
//!
//! Inherited verbatim from the reference implementation, and worth restating
//! because it is the first thing anyone reaches for: an entropy estimate is a
//! heuristic with a tunable threshold, it costs a scan proportional to the data,
//! and it misjudges in both directions. Every probe here is **exact** — a fixed
//! byte pattern at a fixed offset, at most [`SNIFF_PREFIX_LEN`] byte compares,
//! no threshold, no sample size, no allocation.
//!
//! # Provenance, and why this module is the one writer (LAW 5)
//!
//! The probe is the owner's, from `znippy-common/src/precompressed.rs`, and for
//! one commit it existed twice. It lives **here** now, and `znippy-common`'s
//! module is a re-export of this one — `znippy_common::precompressed::{
//! looks_compressed, is_zlib_stream, ContentHint, SNIFF_PREFIX_LEN}` are these
//! items, not copies of them.
//!
//! The direction is forced. `znippy-common` already depends on `znippy-zoomies`
//! (`znippy-common/Cargo.toml:95`, plus `ljar`/`lbzip2`/`lgz`), so an
//! `ldeflate -> znippy-common` edge would close a cycle; and `znippy-common`
//! drags `arrow`, `blake3` and an `openzl-sys` whose `build.rs` fetches a tarball
//! over the network — for 88 lines of `std`-only pattern matching. The
//! dependency arrow already pointed here, and this crate is the *compressor*,
//! the only thing that ever needs to ask the question.
//!
//! The extension half of the reference chain (`skip_by_path`, backed by
//! `znippy_common::index::is_probably_compressed`) is deliberately **not**
//! lifted, and is the one part `znippy-common` still owns: this crate is handed
//! `&[u8]`, never a `Path`. A caller who has a path resolves it to a
//! [`ContentHint`] and passes that. `znippy_common::precompressed::SkipPolicy`
//! is therefore a thin wrapper over [`SkipPolicy`] that adds the path leg and
//! delegates the byte leg to [`SkipPolicy::skip`] — the hint-to-verdict mapping
//! for bytes exists once, here.

/// Bytes of prefix the probe reads. Sized by WebP, whose form type sits at
/// offset 8..12 — the longest anchored pattern here.
pub const SNIFF_PREFIX_LEN: usize = 16;

/// What a caller already knows about its content, if anything.
///
/// The hint is honoured **in both directions**: `Compressible` is never vetoed
/// by a probe, so a caller who knows better than the magic bytes wins.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ContentHint {
    /// Nothing known — probe the bytes.
    #[default]
    Unknown,
    /// Caller asserts this is already compressed. Store it, do not probe.
    AlreadyCompressed,
    /// Caller asserts this is worth compressing. Compress it, do not probe.
    Compressible,
}

/// Whether, and how, the compressor is allowed to skip the entropy coder.
///
/// [`Default`] is [`resolve`](Self::resolve) — the probe is **on**. An
/// optimisation that a caller must opt into is one that nobody gets; and unlike
/// a cap, being wrong here costs a few percent of ratio on a file that lied
/// about its own magic bytes, not a correctness bug. Every output remains a
/// valid stream of its container either way.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct SkipPolicy {
    hint: ContentHint,
}

impl SkipPolicy {
    /// Probe the bytes (the default).
    pub const fn resolve() -> Self {
        Self {
            hint: ContentHint::Unknown,
        }
    }
    /// Store everything: the caller knows the whole batch is compressed.
    pub const fn already_compressed() -> Self {
        Self {
            hint: ContentHint::AlreadyCompressed,
        }
    }
    /// Compress everything, probe nothing — the pre-probe behaviour, by name.
    pub const fn compress_everything() -> Self {
        Self {
            hint: ContentHint::Compressible,
        }
    }
    /// From a caller's hint.
    pub const fn from_hint(hint: ContentHint) -> Self {
        Self { hint }
    }
    /// The hint this policy carries.
    pub const fn hint(&self) -> ContentHint {
        self.hint
    }

    /// Should `src` be stored rather than deflated?
    ///
    /// Reads at most [`SNIFF_PREFIX_LEN`] bytes regardless of how long `src` is,
    /// so this is O(1) in the object size — the property that makes it sound to
    /// call on every object on the hot path.
    #[inline]
    pub fn skip(&self, src: &[u8]) -> bool {
        match self.hint {
            ContentHint::AlreadyCompressed => true,
            ContentHint::Compressible => false,
            ContentHint::Unknown => looks_compressed(src),
        }
    }
}

/// One magic-byte pattern that must match at offset 0.
type Magic = (&'static [u8], &'static str);

/// Exact patterns, all anchored at offset 0. Each is a format whose payload is
/// compressed or otherwise incompressible; none has a threshold.
const MAGICS: &[Magic] = &[
    // ── git ─────────────────────────────────────────────────────────────────
    (b"PACK", "git packfile"),
    (b"\xfftOc", "git pack index v2"),
    (b"MIDX", "git multi-pack-index"),
    (b"BITM", "git pack bitmap (EWAH)"),
    // ── general-purpose compressors ─────────────────────────────────────────
    (b"\x1f\x8b", "gzip"),
    (b"\x28\xb5\x2f\xfd", "zstd frame"),
    (b"\xfd7zXZ\x00", "xz"),
    (b"\x04\x22\x4d\x18", "lz4 frame"),
    (b"7z\xbc\xaf\x27\x1c", "7z"),
    (b"Rar!\x1a\x07", "rar"),
    (b"PK\x03\x04", "zip"),
    (b"PK\x05\x06", "zip (empty archive)"),
    (b"PK\x07\x08", "zip (spanned)"),
    // ── already-compressed media ────────────────────────────────────────────
    (b"\x89PNG\r\n\x1a\n", "png"),
    (b"\xff\xd8\xff", "jpeg"),
    (b"GIF87a", "gif"),
    (b"GIF89a", "gif"),
];

/// Does this buffer begin with data that is already compressed?
///
/// At most [`SNIFF_PREFIX_LEN`] byte compares, no allocation, safe on a short or
/// empty slice.
pub fn looks_compressed(prefix: &[u8]) -> bool {
    let head = &prefix[..prefix.len().min(SNIFF_PREFIX_LEN)];

    if MAGICS.iter().any(|(pat, _)| head.starts_with(pat)) {
        return true;
    }
    // bzip2: "BZh" then the block-size digit '1'..='9'.
    if head.len() >= 4 && head.starts_with(b"BZh") && head[3].is_ascii_digit() && head[3] != b'0' {
        return true;
    }
    // WebP is a RIFF container with a WEBP form type at offset 8; the four
    // length bytes between them are not part of the magic.
    if head.len() >= 12 && head.starts_with(b"RIFF") && &head[8..12] == b"WEBP" {
        return true;
    }
    is_zlib_stream(head)
}

/// Does this buffer begin with a raw zlib stream (RFC 1950)?
///
/// This is what a git **loose object** is, and the one case an extension table
/// can never reach — the file's name is an oid with no extension at all. It is
/// also what *this crate writes*, so it is what keeps a re-compress pass over
/// `ldeflate`'s own output from paying twice.
///
/// * `CM`    = `CMF & 0x0f` must be `8` — deflate is the only defined method;
/// * `CINFO` = `CMF >> 4` must be `<= 7` — a window over 32 KiB is not defined;
/// * `FDICT` = `FLG & 0x20` must be clear;
/// * `(CMF << 8 | FLG) % 31 == 0` — the header's own check bits.
///
/// The `FDICT` clause is what keeps ordinary text out. `CMF = 0x78` is ASCII
/// `x`, and of the nine `FLG` values satisfying the mod-31 rule, every printable
/// one — `' '`, `'?'`, `'}'` — sets `FDICT` and is rejected. `x^` is the sole
/// printable two-byte sequence that survives.
pub fn is_zlib_stream(prefix: &[u8]) -> bool {
    let [cmf, flg, ..] = prefix else { return false };
    let (cmf, flg) = (*cmf, *flg);

    cmf & 0x0f == 8
        && cmf >> 4 <= 7
        && flg & 0x20 == 0
        && (u16::from(cmf) << 8 | u16::from(flg)) % 31 == 0
}

// ── Stored DEFLATE ───────────────────────────────────────────────────────────

/// Largest payload one DEFLATE stored block can carry: `LEN` is a `u16`.
const STORED_MAX: usize = u16::MAX as usize;

/// Emit `src` as **stored** DEFLATE blocks (RFC 1951 §3.2.4) — a memcpy plus
/// five bytes of framing per 65 535 bytes.
///
/// This is what makes the probe worth having. Asking `flate2` for level 0 would
/// also produce stored blocks, but it still constructs a `Compress`, still runs
/// the deflate state machine, and still copies through its internal window; this
/// is a length-prefixed `extend_from_slice`. The output is ordinary DEFLATE that
/// every inflater reads — including this workspace's own `linflate`.
///
/// `is_last` controls the final block's `BFINAL` bit:
///
/// * `true` — the stream ends here. An empty input still emits one empty final
///   block, because a DEFLATE stream with no blocks is malformed.
/// * `false` — the caller will append more, and the emitted bytes end at a block
///   boundary. That is the same seam `Z_FULL_FLUSH` leaves and what
///   `linflate::deflate_scan` looks for, so a stored segment concatenates with a
///   deflated one.
pub fn stored_deflate(src: &[u8], is_last: bool) -> Vec<u8> {
    // 5 bytes of framing per block, plus one extra block's worth for the empty
    // terminator an exact multiple needs.
    let blocks = src.len().div_ceil(STORED_MAX).max(1);
    let mut out = Vec::with_capacity(src.len() + 5 * blocks + 5);

    let mut chunks = src.chunks(STORED_MAX).peekable();
    if chunks.peek().is_none() {
        push_stored_block(&mut out, &[], is_last);
        return out;
    }
    while let Some(chunk) = chunks.next() {
        let last_block = is_last && chunks.peek().is_none();
        push_stored_block(&mut out, chunk, last_block);
    }
    out
}

/// One stored block: a byte-aligned 3-bit header (`BFINAL`, `BTYPE = 00`, then
/// five bits of padding to the byte boundary), `LEN`, `~LEN`, then the bytes
/// verbatim.
#[inline]
fn push_stored_block(out: &mut Vec<u8>, chunk: &[u8], is_last: bool) {
    debug_assert!(chunk.len() <= STORED_MAX);
    out.push(if is_last { 1 } else { 0 });
    let len = chunk.len() as u16;
    out.extend_from_slice(&len.to_le_bytes());
    out.extend_from_slice(&(!len).to_le_bytes());
    out.extend_from_slice(chunk);
}

#[cfg(test)]
mod tests {
    use super::*;

    /// Every magic in the table must fire, and each must fire on the *shortest*
    /// buffer that carries it — a probe that needs 16 bytes to recognise a
    /// 2-byte magic would miss every tiny object.
    #[test]
    fn every_magic_in_the_table_is_recognised_at_its_own_length() {
        for (pat, label) in MAGICS {
            assert!(
                looks_compressed(pat),
                "{label}: not recognised from its own {} magic bytes",
                pat.len()
            );
        }
    }

    /// The three probes that are not a plain prefix compare, each from both
    /// sides — a check that only ever says yes is as useless as one that only
    /// ever says no.
    #[test]
    fn the_special_cased_probes_fire_only_on_their_real_shape() {
        // bzip2 needs the block-size digit, and '0' is not one.
        assert!(looks_compressed(b"BZh9\x31\x41\x59\x26"));
        assert!(looks_compressed(b"BZh1"));
        assert!(
            !looks_compressed(b"BZh0"),
            "'0' is not a valid bzip2 block size"
        );
        assert!(
            !looks_compressed(b"BZhx"),
            "a non-digit is not a block size"
        );
        assert!(
            !looks_compressed(b"BZh"),
            "three bytes cannot carry the digit"
        );

        // WebP needs BOTH the RIFF magic and the WEBP form type at 8..12.
        assert!(looks_compressed(b"RIFF\x00\x00\x00\x00WEBPVP8 "));
        assert!(
            !looks_compressed(b"RIFF\x00\x00\x00\x00WAVEfmt "),
            "a RIFF WAVE is not compressed"
        );
        assert!(
            !looks_compressed(b"RIFF\x00\x00\x00\x00WEB"),
            "truncated form type"
        );
    }

    /// The zlib header check, exactly — this is the one that decides whether a
    /// git loose object gets re-deflated, and the one most at risk of matching
    /// ordinary text.
    #[test]
    fn the_zlib_probe_accepts_real_headers_and_rejects_text() {
        // The three levels zlib actually emits at a 32 KiB window.
        for h in [[0x78u8, 0x01], [0x78, 0x9c], [0x78, 0xda]] {
            assert!(is_zlib_stream(&h), "{h:02x?} is a real zlib header");
            assert!(looks_compressed(&h));
        }
        // Wrong method, oversized window, FDICT set, bad check bits.
        assert!(!is_zlib_stream(&[0x77, 0x9c]), "CM != 8");
        assert!(!is_zlib_stream(&[0x88, 0x9c]), "CINFO > 7");
        assert!(!is_zlib_stream(&[0x78, 0xbb]), "FDICT set");
        assert!(!is_zlib_stream(&[0x78, 0x9d]), "check bits fail");
        assert!(!is_zlib_stream(&[0x78]), "one byte is not a header");
        assert!(!is_zlib_stream(&[]), "empty is not a header");

        // Ordinary content must not be mistaken for a stream.
        for text in [
            &b"fn main() { println!(\"hi\"); }"[..],
            b"the quick brown fox jumps over the lazy dog",
            b"{\"key\": \"value\", \"n\": 1}",
            b"<?xml version=\"1.0\"?><osm/>",
            b"# heading\n\nsome prose\n",
            b"\0\0\0\0\0\0\0\0",
        ] {
            assert!(
                !looks_compressed(text),
                "false positive on {:?}",
                &text[..text.len().min(12)]
            );
        }
    }

    /// The probe must be O(1) in the object size: a huge compressible buffer
    /// whose head is plain must not be read past the prefix. Asserted by
    /// behaviour — a 4 MiB buffer whose only compressed-looking bytes are at the
    /// end must not fire.
    #[test]
    fn the_probe_reads_only_the_head() {
        let mut v = vec![b'a'; 4 << 20];
        v.extend_from_slice(b"\x89PNG\r\n\x1a\n");
        assert!(!looks_compressed(&v), "a magic in the tail is not a magic");
        assert!(
            looks_compressed(b"\x89PNG\r\n\x1a\nrest"),
            "but one at the head is"
        );
    }

    /// The policy honours a hint in both directions, overriding the bytes.
    #[test]
    fn a_hint_beats_the_bytes_in_both_directions() {
        let png = b"\x89PNG\r\n\x1a\n....";
        let text = b"plain text, very compressible indeed";

        assert!(SkipPolicy::resolve().skip(png));
        assert!(!SkipPolicy::resolve().skip(text));

        assert!(
            SkipPolicy::already_compressed().skip(text),
            "hint must override the probe"
        );
        assert!(
            !SkipPolicy::compress_everything().skip(png),
            "a Compressible hint is never vetoed by a probe"
        );

        assert_eq!(
            SkipPolicy::default(),
            SkipPolicy::resolve(),
            "the probe is the default"
        );
    }

    /// The stored emitter's framing, byte for byte. `LEN`/`~LEN` is the field
    /// most likely to be got wrong and the one an inflater checks.
    #[test]
    fn a_stored_block_is_framed_exactly_as_rfc1951_says() {
        let out = stored_deflate(b"abc", true);
        assert_eq!(out, vec![0x01, 0x03, 0x00, 0xfc, 0xff, b'a', b'b', b'c']);

        let non_final = stored_deflate(b"abc", false);
        assert_eq!(
            non_final[0], 0x00,
            "BFINAL must be clear on a non-final block"
        );
        assert_eq!(&non_final[1..5], &[0x03, 0x00, 0xfc, 0xff]);
    }

    /// An empty input is still one (empty) final block — a DEFLATE stream with
    /// no blocks at all is malformed, and an empty git object is real.
    #[test]
    fn an_empty_input_still_emits_one_block() {
        assert_eq!(
            stored_deflate(b"", true),
            vec![0x01, 0x00, 0x00, 0xff, 0xff]
        );
    }

    /// Payloads past 65 535 bytes must split into several blocks, with BFINAL
    /// set on the last one only.
    #[test]
    fn a_payload_past_the_block_limit_splits_and_only_the_last_is_final() {
        let src = vec![0xABu8; STORED_MAX + 1];
        let out = stored_deflate(&src, true);
        assert_eq!(
            out.len(),
            src.len() + 10,
            "two blocks, five framing bytes each"
        );
        assert_eq!(out[0], 0x00, "the first of two blocks is not final");
        assert_eq!(
            &out[1..5],
            &[0xff, 0xff, 0x00, 0x00],
            "LEN = 65535, ~LEN = 0"
        );
        let second = STORED_MAX + 5;
        assert_eq!(out[second], 0x01, "the last block is final");
        assert_eq!(
            &out[second + 1..second + 5],
            &[0x01, 0x00, 0xfe, 0xff],
            "LEN = 1"
        );
    }

    /// The whole point, asserted against the real inflater: stored output must
    /// round-trip through `linflate` to the exact input, at every size class
    /// around the block boundary.
    #[test]
    fn stored_output_inflates_back_to_the_input() {
        for len in [
            0usize,
            1,
            255,
            STORED_MAX - 1,
            STORED_MAX,
            STORED_MAX + 1,
            3 * STORED_MAX + 7,
        ] {
            let src: Vec<u8> = (0..len).map(|i| (i * 31 + 7) as u8).collect();
            let body = stored_deflate(&src, true);
            let mut out = vec![0u8; len + linflate::OVERWRITE_HEADROOM];
            let n = linflate::inflate_segment(&body, &mut out)
                .unwrap_or_else(|e| panic!("len {len}: stored output did not inflate: {e:?}"));
            assert_eq!(n, len, "len {len}: wrong output length");
            assert_eq!(
                &out[..n],
                &src[..],
                "len {len}: stored output did not round-trip"
            );
        }
    }

    // ── the zlib probe against a REAL encoder ────────────────────────────────
    //
    // The cases above hand-type the two header bytes, which proves only that the
    // test and the probe agree with each other. These three come from
    // `compress_objects` — this crate's own encoder — and from the canonical git
    // bytes a real object store holds. They moved here from
    // `znippy-common/src/precompressed.rs` when that module became a re-export of
    // this one; the assertions are the reference implementation's, unchanged.

    /// A real zlib stream out of this crate's own encoder. The module doc claims
    /// the probe keeps a re-compress pass over `ldeflate`'s own output from
    /// paying twice — this is that claim, asserted rather than stated.
    ///
    /// `compress_everything()` produces the fixtures so the probe cannot be used
    /// to manufacture its own evidence, and the `FLG` values must genuinely
    /// differ across the level range, else a single accidental constant would
    /// prove nothing.
    #[test]
    fn this_crates_own_zlib_output_is_recognised() {
        let payload = b"the quick brown fox jumps over the lazy dog. ".repeat(40);
        let refs = [payload.as_slice()];
        let mut seen_flg = std::collections::BTreeSet::new();

        for level in [0u32, 1, 5, 6, 9] {
            let cfg = crate::Config {
                level,
                container: crate::Container::Zlib,
                ..crate::Config::default()
            }
            .compress_everything();
            let out = crate::compress_objects(&refs, &cfg).expect("compress");
            let z = &out[0];
            assert!(
                is_zlib_stream(z),
                "level {level}: own output header {:02x?} not recognised",
                &z[..2]
            );
            assert!(
                looks_compressed(z),
                "level {level}: own output must be stored on re-compress"
            );
            seen_flg.insert(z[1]);
        }
        assert!(
            seen_flg.len() > 1,
            "the levels must actually differ in FLG, else this proves nothing: {seen_flg:02x?}"
        );
    }

    /// The git case, both halves, and they need opposite answers:
    ///
    /// * a **loose object file** is the canonical form zlib-deflated — an oid for
    ///   a name, no extension, and it must be stored raw;
    /// * the **canonical form itself** (`"<type> <size>\0<content>"`) is what a
    ///   `znippy-plugin-git` entry holds. It is inflated bytes, compresses well,
    ///   and must reach the coder.
    ///
    /// A rule of the shape "an oid-keyed entry is already compressed" gets the
    /// second one backwards and silently stores compressible data raw.
    #[test]
    fn a_real_loose_object_is_recognised_and_its_canonical_form_is_not() {
        for kind in ["blob", "tree", "commit", "tag"] {
            let body = b"fn main() { println!(\"hello\"); }\n".repeat(8);
            let mut canonical = format!("{kind} {}\0", body.len()).into_bytes();
            canonical.extend_from_slice(&body);

            assert!(
                !looks_compressed(&canonical),
                "canonical {kind} bytes are inflated and must be compressed"
            );

            let cfg = crate::Config {
                container: crate::Container::Zlib,
                ..crate::Config::default()
            }
            .compress_everything();
            let refs = [canonical.as_slice()];
            let loose = crate::compress_objects(&refs, &cfg).expect("compress");
            assert!(
                is_zlib_stream(&loose[0]),
                "{kind}: the zlib header itself must be recognised"
            );
            assert!(
                looks_compressed(&loose[0]),
                "a git loose object must be stored raw"
            );
        }
    }

    /// A plausible first byte is not a zlib stream. `x` is `0x78`, the CMF of
    /// every stream git emits, so text starting with `x` is the exact trap the
    /// `FDICT` clause exists for.
    #[test]
    fn text_that_starts_like_a_zlib_header_is_still_compressed() {
        for (bytes, why) in [
            (b"x = 1;\n".as_slice(), "FLG 0x20 sets FDICT"),
            (b"x is a variable".as_slice(), "FLG 0x20 sets FDICT"),
            (b"x?y".as_slice(), "FLG 0x3f sets FDICT"),
            (b"x}".as_slice(), "FLG 0x7d sets FDICT"),
            (b"xyzzy".as_slice(), "FLG 0x79 fails the mod-31 check"),
            (b"xx".as_slice(), "FLG 0x78 fails the mod-31 check"),
            (b"\x78".as_slice(), "a lone CMF is not a header"),
            (
                b"\x18\x9c".as_slice(),
                "CM and FDICT are fine, but 0x189c fails the mod-31 check",
            ),
        ] {
            assert!(!is_zlib_stream(bytes), "{bytes:?} is not zlib: {why}");
            assert!(
                !looks_compressed(bytes),
                "{bytes:?} must still be compressed"
            );
        }
    }

    /// The negatives the reference implementation kept, which this file's own
    /// text cases do not cover: a would-be magic truncated below its own length,
    /// and an ELF header (a binary that compresses well and must not be mistaken
    /// for a container).
    #[test]
    fn compressible_content_and_truncated_magics_are_left_alone() {
        for (bytes, what) in [
            (
                b"SELECT * FROM njord WHERE id = 42;\n".as_slice(),
                "plain SQL",
            ),
            (
                b"{\"lake\": \"njord\", \"tables\": [1, 2, 3]}\n".as_slice(),
                "json",
            ),
            (
                b"pub fn main() -> Result<()> { Ok(()) }\n".as_slice(),
                "rust source",
            ),
            (b"<?xml version=\"1.0\"?><project/>\n".as_slice(), "xml"),
            (b"\x7fELF\x02\x01\x01\x00".as_slice(), "an ELF binary"),
            (b"".as_slice(), "nothing at all"),
            (b"P".as_slice(), "one byte of a would-be PACK"),
            (b"PAC".as_slice(), "three bytes of a would-be PACK"),
        ] {
            assert!(!looks_compressed(bytes), "{what} must still be compressed");
        }
    }
}