head 1.1; branch 1.1.1; access; symbols netbsd-11-0-RC6:1.1.1.1 netbsd-11-0-RC5:1.1.1.1 netbsd-11-0-RC4:1.1.1.1 zstd-1-5-7:1.1.1.2 netbsd-11-0-RC3:1.1.1.1 netbsd-11-0-RC2:1.1.1.1 netbsd-11-0-RC1:1.1.1.1 perseant-exfatfs-base-20250801:1.1.1.1 netbsd-11:1.1.1.1.0.2 netbsd-11-base:1.1.1.1 zstd-1-5-6:1.1.1.1 META:1.1.1; locks; strict; comment @// @; 1.1 date 2024.10.27.22.44.09; author christos; state Exp; branches 1.1.1.1; next ; commitid IUZDrqSXcnIYVlvF; 1.1.1.1 date 2024.10.27.22.44.09; author christos; state Exp; branches; next 1.1.1.2; commitid IUZDrqSXcnIYVlvF; 1.1.1.2 date 2026.05.01.14.27.21; author christos; state Exp; branches; next ; commitid LjoDikzDsAzrt7EG; desc @@ 1.1 log @Initial revision @ text @/* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the * LICENSE file in the root directory of this source tree) and the GPLv2 (found * in the COPYING file in the root directory of this source tree). */ #include "Pzstd.h" extern "C" { #include "datagen.h" } #include "test/RoundTrip.h" #include "utils/ScopeGuard.h" #include #include #include #include #include using namespace std; using namespace pzstd; TEST(Pzstd, SmallSizes) { unsigned seed = std::random_device{}(); std::fprintf(stderr, "Pzstd.SmallSizes seed: %u\n", seed); std::mt19937 gen(seed); for (unsigned len = 1; len < 256; ++len) { if (len % 16 == 0) { std::fprintf(stderr, "%u / 16\n", len / 16); } std::string inputFile = std::tmpnam(nullptr); auto guard = makeScopeGuard([&] { std::remove(inputFile.c_str()); }); { static uint8_t buf[256]; RDG_genBuffer(buf, len, 0.5, 0.0, gen()); auto fd = std::fopen(inputFile.c_str(), "wb"); auto written = std::fwrite(buf, 1, len, fd); std::fclose(fd); ASSERT_EQ(written, len); } for (unsigned numThreads = 1; numThreads <= 2; ++numThreads) { for (unsigned level = 1; level <= 4; level *= 4) { auto errorGuard = makeScopeGuard([&] { std::fprintf(stderr, "# threads: %u\n", numThreads); std::fprintf(stderr, "compression level: %u\n", level); }); Options options; options.overwrite = true; options.inputFiles = {inputFile}; options.numThreads = numThreads; options.compressionLevel = level; options.verbosity = 1; ASSERT_TRUE(roundTrip(options)); errorGuard.dismiss(); } } } } TEST(Pzstd, LargeSizes) { unsigned seed = std::random_device{}(); std::fprintf(stderr, "Pzstd.LargeSizes seed: %u\n", seed); std::mt19937 gen(seed); for (unsigned len = 1 << 20; len <= (1 << 24); len *= 2) { std::string inputFile = std::tmpnam(nullptr); auto guard = makeScopeGuard([&] { std::remove(inputFile.c_str()); }); { std::unique_ptr buf(new uint8_t[len]); RDG_genBuffer(buf.get(), len, 0.5, 0.0, gen()); auto fd = std::fopen(inputFile.c_str(), "wb"); auto written = std::fwrite(buf.get(), 1, len, fd); std::fclose(fd); ASSERT_EQ(written, len); } for (unsigned numThreads = 1; numThreads <= 16; numThreads *= 4) { for (unsigned level = 1; level <= 4; level *= 4) { auto errorGuard = makeScopeGuard([&] { std::fprintf(stderr, "# threads: %u\n", numThreads); std::fprintf(stderr, "compression level: %u\n", level); }); Options options; options.overwrite = true; options.inputFiles = {inputFile}; options.numThreads = std::min(numThreads, options.numThreads); options.compressionLevel = level; options.verbosity = 1; ASSERT_TRUE(roundTrip(options)); errorGuard.dismiss(); } } } } TEST(Pzstd, DISABLED_ExtremelyLargeSize) { unsigned seed = std::random_device{}(); std::fprintf(stderr, "Pzstd.ExtremelyLargeSize seed: %u\n", seed); std::mt19937 gen(seed); std::string inputFile = std::tmpnam(nullptr); auto guard = makeScopeGuard([&] { std::remove(inputFile.c_str()); }); { // Write 4GB + 64 MB constexpr size_t kLength = 1 << 26; std::unique_ptr buf(new uint8_t[kLength]); auto fd = std::fopen(inputFile.c_str(), "wb"); auto closeGuard = makeScopeGuard([&] { std::fclose(fd); }); for (size_t i = 0; i < (1 << 6) + 1; ++i) { RDG_genBuffer(buf.get(), kLength, 0.5, 0.0, gen()); auto written = std::fwrite(buf.get(), 1, kLength, fd); if (written != kLength) { std::fprintf(stderr, "Failed to write file, skipping test\n"); return; } } } Options options; options.overwrite = true; options.inputFiles = {inputFile}; options.compressionLevel = 1; if (options.numThreads == 0) { options.numThreads = 1; } ASSERT_TRUE(roundTrip(options)); } TEST(Pzstd, ExtremelyCompressible) { std::string inputFile = std::tmpnam(nullptr); auto guard = makeScopeGuard([&] { std::remove(inputFile.c_str()); }); { std::unique_ptr buf(new uint8_t[10000]); std::memset(buf.get(), 'a', 10000); auto fd = std::fopen(inputFile.c_str(), "wb"); auto written = std::fwrite(buf.get(), 1, 10000, fd); std::fclose(fd); ASSERT_EQ(written, 10000); } Options options; options.overwrite = true; options.inputFiles = {inputFile}; options.numThreads = 1; options.compressionLevel = 1; ASSERT_TRUE(roundTrip(options)); } @ 1.1.1.1 log @Import zstd-1.5.6 from: https://github.com/facebook/zstd/releases/download/v1.5.6/zstd-1.5.6.tar.gz @ text @@ 1.1.1.2 log @Import zstd-1.5.7 (previous was 1.5.6) V1.5.7 (Feb 2025) fix: compression bug in 32-bit mode associated with long-lasting sessions api: new method `ZSTD_compressSequencesAndLiterals()` (#4217, #4232) api: `ZSTD_getFrameHeader()` works on skippable frames (#4228) perf: substantial compression speed improvements (up to +30%) on small data, by @@TocarIP (#4144) and @@cyan4973 (#4165) perf: improved compression speed (~+5%) for dictionary compression at low levels (#4170) perf: much faster speed for `--patch-from` at high compression levels (#4276) perf: higher `--patch-from` compression ratios, notably at high levels (#4288) perf: better speed for binaries on Windows (@@pps83) and when compiled with Visual Studio (@@MessyHack) perf: slight compression ratio improvement thanks to better block boundaries (#4136, #4176, #4178) perf: slight compression ratio improvement for `dfast`, aka levels 3 and 4 (#4171) perf: runtime bmi2 detection enabled on x86 32-bit mode (#4251) cli: multi-threading as default CLI setting, by @@daniellerozenblit cli: new `--max` command (#4290) build: improve `msbuild` version autodetection, support VS2022, by @@ManuelBlanc build: fix `meson` build by @@artem and @@Victor-C-Zhang, and on Windows by @@bgilbert build: compatibility with Apple Framework, by @@Treata11 build: improve icc/icx compatibility, by @@josepho0918 and @@luau-project build: improve compatibility with Android NDK, by Adenilson Cavalcanti portability: linux kernel branch, with improved support for Sequence producers (@@embg, @@gcabiddu, @@cyan4973) portability: improved qnx compatibility, suggested by @@rainbowball portability: improved install script for FreeBSD, by @@sunpoet portability: fixed test suite compatibility with gnu hurd, by @@diegonc doc: clarify specification, by @@elasota misc: improved tests/decodecorpus validation tool (#4102), by antmicro @ text @d10 1 d12 1 @