是否有可用于 GZIP 的测试向量?

Are there test vectors available for GZIP?

在我们的软件中,我们有一个 GZIP (RFC 1952) compression/decompression 接口,目前由 boost::iostreams 提供支持。由于链接原因我们可能需要更改底层库,因此我想为 GZIP 压缩和解压缩添加更多测试,即精确的逐字节比较。

是否有官方或广泛使用的 GZIP 测试向量?

通用无损数据压缩领域的研究人员使用了三个著名的数据集。第一个是 Calgary 语料库,由 Bell 等人于 1989 年推出。选择语料库中的文件以掩盖计算机处理中使用的典型数据类型。这个语料库比较旧,它包含一些已经过时的数据类型,但语料库仍然是许多作者使用的一个很好的基准。后来提出的语料库,坎特伯雷语料库和大型坎特伯雷语料库,包含大小相似的文件,不到5 MB。

历史语料库包括

我找到的最有前途的页面是:

Credit: That last link provided the text I used as introduction. You can read more on the respective downsides of the "old" corpora

如评论中所述,您不能以任何固定期望测试压缩器的输出。允许压缩器使用相同的输入数据生成范围广泛的可能结果。最简单的例子是选择不同的压缩级别来权衡速度与大小。压缩器唯一要保证的是,当它的结果被解压时,你会得到压缩器的输入。

因此,有两种有意义的测试。第一个是往返测试,您测试压缩,然后解压缩,并验证您得到的是您输入的。@sehe 的回答为语料库提供了很好的来源,这些语料库为压缩器提供了各种输入数据。您还应该生成来自您的应用程序的自己的测试数据。

第二个是使用各种无效输入测试解压缩器,以确保它运行良好,即 returns 一个错误而不是崩溃。对于后者,您可以查看 infcover.c,其中包括带有各种错误的 deflate 测试序列。