diff --git a/test/c/mimiclib/deflate-gzip-zlib.c b/test/c/mimiclib/deflate-gzip-zlib.c
index 21befbe..a24374b 100644
--- a/test/c/mimiclib/deflate-gzip-zlib.c
+++ b/test/c/mimiclib/deflate-gzip-zlib.c
@@ -14,12 +14,171 @@
 
 // ----------------
 
-// Uncomment this line to test and bench miniz instead of zlib-the-library.
+// Uncomment one of these #define lines to test and bench alternative mimic
+// libraries (libdeflate or miniz) instead of zlib-the-library.
+//
+// These are collectively referred to as
+// WUFFS_MIMICLIB_USE_XXX_INSTEAD_OF_ZLIB.
+//
+// #define WUFFS_MIMICLIB_USE_LIBDEFLATE_INSTEAD_OF_ZLIB 1
 // #define WUFFS_MIMICLIB_USE_MINIZ_INSTEAD_OF_ZLIB 1
 
-#ifdef WUFFS_MIMICLIB_USE_MINIZ_INSTEAD_OF_ZLIB
+// -------------------------------- WUFFS_MIMICLIB_USE_XXX_INSTEAD_OF_ZLIB
+#if defined(WUFFS_MIMICLIB_USE_LIBDEFLATE_INSTEAD_OF_ZLIB)
+#include "libdeflate.h"
+
+#define WUFFS_MIMICLIB_DEFLATE_DOES_NOT_SUPPORT_STREAMING 1
+
+#define WUFFS_MIMICLIB_ZLIB_DOES_NOT_SUPPORT_DICTIONARIES 1
+
+uint32_t global_mimiclib_deflate_unused_u32;
+
+typedef enum libdeflate_result (*libdeflate_decompress_func)(
+    struct libdeflate_decompressor* decompressor,
+    const void* in,
+    size_t in_nbytes,
+    void* out,
+    size_t out_nbytes_avail,
+    size_t* actual_in_nbytes_ret,
+    size_t* actual_out_nbytes_ret);
+
+const char*  //
+libdeflate_result_as_const_char_star(enum libdeflate_result r) {
+  switch (r) {
+    case LIBDEFLATE_SUCCESS:
+      return NULL;
+    case LIBDEFLATE_BAD_DATA:
+      return "libdeflate: bad data";
+    case LIBDEFLATE_SHORT_OUTPUT:
+      return "libdeflate: short output";
+    case LIBDEFLATE_INSUFFICIENT_SPACE:
+      return "libdeflate: insufficient space";
+  }
+  return "libdeflate: unknown error";
+}
+
+const char*  //
+mimic_bench_adler32(wuffs_base__io_buffer* dst,
+                    wuffs_base__io_buffer* src,
+                    uint32_t wuffs_initialize_flags,
+                    uint64_t wlimit,
+                    uint64_t rlimit) {
+  global_mimiclib_deflate_unused_u32 = 1;
+  while (src->meta.ri < src->meta.wi) {
+    uint8_t* ptr = src->data.ptr + src->meta.ri;
+    size_t len = src->meta.wi - src->meta.ri;
+    if (len > 0x7FFFFFFF) {
+      return "src length is too large";
+    } else if (len > rlimit) {
+      len = rlimit;
+    }
+    global_mimiclib_deflate_unused_u32 =
+        libdeflate_adler32(global_mimiclib_deflate_unused_u32, ptr, len);
+    src->meta.ri += len;
+  }
+  return NULL;
+}
+
+const char*  //
+mimic_bench_crc32_ieee(wuffs_base__io_buffer* dst,
+                       wuffs_base__io_buffer* src,
+                       uint32_t wuffs_initialize_flags,
+                       uint64_t wlimit,
+                       uint64_t rlimit) {
+  global_mimiclib_deflate_unused_u32 = 0;
+  while (src->meta.ri < src->meta.wi) {
+    uint8_t* ptr = src->data.ptr + src->meta.ri;
+    size_t len = src->meta.wi - src->meta.ri;
+    if (len > 0x7FFFFFFF) {
+      return "src length is too large";
+    } else if (len > rlimit) {
+      len = rlimit;
+    }
+    global_mimiclib_deflate_unused_u32 =
+        libdeflate_crc32(global_mimiclib_deflate_unused_u32, ptr, len);
+    src->meta.ri += len;
+  }
+  return NULL;
+}
+
+const char*  //
+mimic_deflate_gzip_zlib_decode(wuffs_base__io_buffer* dst,
+                               wuffs_base__io_buffer* src,
+                               uint32_t wuffs_initialize_flags,
+                               uint64_t wlimit,
+                               uint64_t rlimit,
+                               libdeflate_decompress_func func) {
+  struct libdeflate_decompressor* dec = libdeflate_alloc_decompressor();
+  if (!dec) {
+    return "libdeflate: alloc failed";
+  }
+  size_t n_dst = 0;
+  size_t n_src = 0;
+  enum libdeflate_result res =
+      (*func)(dec, wuffs_base__io_buffer__reader_pointer(src),
+              ((size_t)wuffs_base__u64__min(
+                  rlimit, wuffs_base__io_buffer__reader_length(src))),
+              wuffs_base__io_buffer__writer_pointer(dst),
+              ((size_t)wuffs_base__u64__min(
+                  wlimit, wuffs_base__io_buffer__writer_length(dst))),
+              &n_src, &n_dst);
+  if (res == LIBDEFLATE_SUCCESS) {
+    dst->meta.wi += n_dst;
+    src->meta.ri += n_src;
+  }
+  libdeflate_free_decompressor(dec);
+  return libdeflate_result_as_const_char_star(res);
+}
+
+const char*  //
+mimic_deflate_decode(wuffs_base__io_buffer* dst,
+                     wuffs_base__io_buffer* src,
+                     uint32_t wuffs_initialize_flags,
+                     uint64_t wlimit,
+                     uint64_t rlimit) {
+  return mimic_deflate_gzip_zlib_decode(dst, src, wuffs_initialize_flags,
+                                        wlimit, rlimit,
+                                        &libdeflate_deflate_decompress_ex);
+}
+
+const char*  //
+mimic_gzip_decode(wuffs_base__io_buffer* dst,
+                  wuffs_base__io_buffer* src,
+                  uint32_t wuffs_initialize_flags,
+                  uint64_t wlimit,
+                  uint64_t rlimit) {
+  return mimic_deflate_gzip_zlib_decode(dst, src, wuffs_initialize_flags,
+                                        wlimit, rlimit,
+                                        &libdeflate_gzip_decompress_ex);
+}
+
+const char*  //
+mimic_zlib_decode(wuffs_base__io_buffer* dst,
+                  wuffs_base__io_buffer* src,
+                  uint32_t wuffs_initialize_flags,
+                  uint64_t wlimit,
+                  uint64_t rlimit) {
+  return mimic_deflate_gzip_zlib_decode(dst, src, wuffs_initialize_flags,
+                                        wlimit, rlimit,
+                                        &libdeflate_zlib_decompress_ex);
+}
+
+const char*  //
+mimic_zlib_decode_with_dictionary(wuffs_base__io_buffer* dst,
+                                  wuffs_base__io_buffer* src,
+                                  wuffs_base__slice_u8 dictionary) {
+  return "libdeflate does not implement zlib dictionaries";
+}
+
+// -------------------------------- WUFFS_MIMICLIB_USE_XXX_INSTEAD_OF_ZLIB
+#elif defined(WUFFS_MIMICLIB_USE_MINIZ_INSTEAD_OF_ZLIB)
 #include "/path/to/your/copy/of/github.com/richgel999/miniz/miniz_tinfl.c"
 
+// We deliberately do not define the
+// WUFFS_MIMICLIB_DEFLATE_DOES_NOT_SUPPORT_STREAMING macro.
+
+#define WUFFS_MIMICLIB_ZLIB_DOES_NOT_SUPPORT_DICTIONARIES 1
+
 const char*  //
 mimic_bench_adler32(wuffs_base__io_buffer* dst,
                     wuffs_base__io_buffer* src,
@@ -101,9 +260,16 @@
   return "miniz does not implement zlib dictionaries";
 }
 
-#else  // WUFFS_MIMICLIB_USE_MINIZ_INSTEAD_OF_ZLIB
+// -------------------------------- WUFFS_MIMICLIB_USE_XXX_INSTEAD_OF_ZLIB
+#else
 #include "zlib.h"
 
+// We deliberately do not define the
+// WUFFS_MIMICLIB_DEFLATE_DOES_NOT_SUPPORT_STREAMING macro.
+
+// We deliberately do not define the
+// WUFFS_MIMICLIB_ZLIB_DOES_NOT_SUPPORT_DICTIONARIES macro.
+
 uint32_t global_mimiclib_deflate_unused_u32;
 
 const char*  //
@@ -299,4 +465,5 @@
                                         UINT64_MAX, zlib_flavor_zlib);
 }
 
-#endif  // WUFFS_MIMICLIB_USE_MINIZ_INSTEAD_OF_ZLIB
+#endif
+// -------------------------------- WUFFS_MIMICLIB_USE_XXX_INSTEAD_OF_ZLIB
diff --git a/test/c/std/adler32.c b/test/c/std/adler32.c
index 524ebbf..f4fcd10 100644
--- a/test/c/std/adler32.c
+++ b/test/c/std/adler32.c
@@ -37,7 +37,7 @@
 "wuffs mimic cflags" to run the mimic benchmarks.
 */
 
-// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -lz
+// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -ldeflate -lz
 
 // Wuffs ships as a "single file C library" or "header file library" as per
 // https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
diff --git a/test/c/std/crc32.c b/test/c/std/crc32.c
index 72b3c21..87560fb 100644
--- a/test/c/std/crc32.c
+++ b/test/c/std/crc32.c
@@ -37,7 +37,7 @@
 "wuffs mimic cflags" to run the mimic benchmarks.
 */
 
-// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -lz
+// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -ldeflate -lz
 
 // Wuffs ships as a "single file C library" or "header file library" as per
 // https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
diff --git a/test/c/std/deflate.c b/test/c/std/deflate.c
index b531112..bf0d086 100644
--- a/test/c/std/deflate.c
+++ b/test/c/std/deflate.c
@@ -37,7 +37,7 @@
 "wuffs mimic cflags" to run the mimic benchmarks.
 */
 
-// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -lz
+// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -ldeflate -lz
 
 // Wuffs ships as a "single file C library" or "header file library" as per
 // https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
@@ -749,10 +749,9 @@
   const char* have = do_test_io_buffers(mimic_deflate_decode,
                                         &g_deflate_deflate_distance_code_31_gt,
                                         UINT64_MAX, UINT64_MAX);
-  const char* want = "inflate failed (data error)";
-  if ((have != want) &&
-      ((have == NULL) || (want == NULL) || strcmp(have, want))) {
-    RETURN_FAIL("have \"%s\", want \"%s\"", have, want);
+  if (!strings_are_equal(have, "inflate failed (data error)") &&
+      !strings_are_equal(have, "libdeflate: bad data")) {
+    RETURN_FAIL("have \"%s\", want \"bad data\" or similar", have);
   }
   return NULL;
 }
@@ -924,7 +923,9 @@
     test_mimic_deflate_decode_deflate_huffman_primlen_9,
     test_mimic_deflate_decode_midsummer,
     test_mimic_deflate_decode_pi_just_one_read,
+#ifndef WUFFS_MIMICLIB_DEFLATE_DOES_NOT_SUPPORT_STREAMING
     test_mimic_deflate_decode_pi_many_big_reads,
+#endif
     test_mimic_deflate_decode_romeo,
     test_mimic_deflate_decode_romeo_fixed,
 
@@ -947,7 +948,9 @@
     bench_mimic_deflate_decode_1k_full_init,
     bench_mimic_deflate_decode_10k_full_init,
     bench_mimic_deflate_decode_100k_just_one_read,
+#ifndef WUFFS_MIMICLIB_DEFLATE_DOES_NOT_SUPPORT_STREAMING
     bench_mimic_deflate_decode_100k_many_big_reads,
+#endif
 
 #endif  // WUFFS_MIMIC
 
diff --git a/test/c/std/gzip.c b/test/c/std/gzip.c
index 358126e..e5780a7 100644
--- a/test/c/std/gzip.c
+++ b/test/c/std/gzip.c
@@ -37,7 +37,7 @@
 "wuffs mimic cflags" to run the mimic benchmarks.
 */
 
-// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -lz
+// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -ldeflate -lz
 
 // Wuffs ships as a "single file C library" or "header file library" as per
 // https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
diff --git a/test/c/std/zlib.c b/test/c/std/zlib.c
index 921b0c4..22c2371 100644
--- a/test/c/std/zlib.c
+++ b/test/c/std/zlib.c
@@ -37,7 +37,7 @@
 "wuffs mimic cflags" to run the mimic benchmarks.
 */
 
-// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -lz
+// ¿ wuffs mimic cflags: -DWUFFS_MIMIC -ldeflate -lz
 
 // Wuffs ships as a "single file C library" or "header file library" as per
 // https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
@@ -384,7 +384,9 @@
 
     test_mimic_zlib_decode_midsummer,
     test_mimic_zlib_decode_pi,
+#ifndef WUFFS_MIMICLIB_ZLIB_DOES_NOT_SUPPORT_DICTIONARIES
     test_mimic_zlib_decode_sheep,
+#endif
 
 #endif  // WUFFS_MIMIC
 
diff --git a/test/c/testlib/testlib.c b/test/c/testlib/testlib.c
index d3a90ea..aca8335 100644
--- a/test/c/testlib/testlib.c
+++ b/test/c/testlib/testlib.c
@@ -819,6 +819,16 @@
   return g_fail_msg;
 }
 
+bool  //
+strings_are_equal(const char* s, const char* t) {
+  if (s == t) {
+    return true;
+  } else if ((s == NULL) || (t == NULL)) {
+    return false;
+  }
+  return strcmp(s, t) == 0;
+}
+
 // throughput_counter is whether to count dst or src bytes, or neither, when
 // calculating a benchmark's MB/s throughput number.
 //
