+++ /dev/null
-/*
- * 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).
- * You may select, at your option, one of the above-listed licenses.
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include "datagen.h"
-#include "mem.h"
-#define ZSTD_STATIC_LINKING_ONLY
-#include "zstd.h"
-
-static int
-compress(ZSTD_CCtx* cctx, ZSTD_DCtx* dctx,
- void* dst, size_t dstCapacity,
- void const* src, size_t srcSize,
- void* roundtrip, ZSTD_EndDirective end)
-{
- ZSTD_inBuffer in = {src, srcSize, 0};
- ZSTD_outBuffer out = {dst, dstCapacity, 0};
- int ended = 0;
-
- while (!ended && (in.pos < in.size || out.pos > 0)) {
- size_t rc;
- out.pos = 0;
- rc = ZSTD_compressStream2(cctx, &out, &in, end);
- if (ZSTD_isError(rc))
- return 1;
- if (end == ZSTD_e_end && rc == 0)
- ended = 1;
- {
- ZSTD_inBuffer rtIn = {dst, out.pos, 0};
- ZSTD_outBuffer rtOut = {roundtrip, srcSize, 0};
- rc = 1;
- while (rtIn.pos < rtIn.size || rtOut.pos > 0) {
- rtOut.pos = 0;
- rc = ZSTD_decompressStream(dctx, &rtOut, &rtIn);
- if (ZSTD_isError(rc)) {
- fprintf(stderr, "Decompression error: %s\n", ZSTD_getErrorName(rc));
- return 1;
- }
- if (rc == 0)
- break;
- }
- if (ended && rc != 0) {
- fprintf(stderr, "Frame not finished!\n");
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-int main(int argc, const char** argv)
-{
- ZSTD_CCtx* cctx = ZSTD_createCCtx();
- ZSTD_DCtx* dctx = ZSTD_createDCtx();
- const size_t dataSize = (size_t)1 << 30;
- const size_t outSize = ZSTD_compressBound(dataSize);
- const size_t bufferSize = (size_t)1 << 31;
- char* buffer = (char*)malloc(bufferSize);
- void* out = malloc(outSize);
- void* roundtrip = malloc(dataSize);
- int _exit_code = 0;
- (void)argc;
- (void)argv;
-
- if (!buffer || !out || !roundtrip || !cctx || !dctx) {
- fprintf(stderr, "Allocation failure\n");
- _exit_code = 1;
- goto cleanup;
- }
-
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 31))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, 1))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_overlapLog, 9))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, ZSTD_btopt))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_targetLength, 7))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_minMatch, 7))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_searchLog, 1))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_hashLog, 10))) {
- _exit_code = 1;
- goto cleanup;
- }
- if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_chainLog, 10))) {
- _exit_code = 1;
- goto cleanup;
- }
-
- if (ZSTD_isError(ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, 31))) {
- _exit_code = 1;
- goto cleanup;
- }
-
- RDG_genBuffer(buffer, bufferSize, 1.0, 0.0, 0xbeefcafe);
-
- /* Compress 30 GB */
- {
- int i;
- for (i = 0; i < 10; ++i) {
- fprintf(stderr, "Compressing 1 GB\n");
- if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_continue)) {
- _exit_code = 1;
- goto cleanup;
- }
- }
- }
- fprintf(stderr, "Compressing 1 GB\n");
- if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_end)) {
- _exit_code = 1;
- goto cleanup;
- }
-
- fprintf(stderr, "Success!\n");
-
- goto cleanup;
-
-cleanup:
- free(roundtrip);
- free(out);
- free(buffer);
- ZSTD_freeCCtx(cctx);
- ZSTD_freeDCtx(dctx);
- return _exit_code;
-}