/*
 * Copyright (c) 2016-2021, Facebook, Inc.
 * 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.
 */
/**
 * Helper functions for fuzzing.
 */

#ifndef ZSTD_HELPERS_H
#define ZSTD_HELPERS_H

#define ZSTD_STATIC_LINKING_ONLY

#include "zstd.h"
#include "fuzz_data_producer.h"
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

extern const int kMinClevel;
extern const int kMaxClevel;

void FUZZ_setRandomParameters(ZSTD_CCtx *cctx, size_t srcSize, FUZZ_dataProducer_t *producer);

ZSTD_compressionParameters FUZZ_randomCParams(size_t srcSize, FUZZ_dataProducer_t *producer);
ZSTD_frameParameters FUZZ_randomFParams(FUZZ_dataProducer_t *producer);
ZSTD_parameters FUZZ_randomParams(size_t srcSize, FUZZ_dataProducer_t *producer);

typedef struct {
  void* buff;
  size_t size;
} FUZZ_dict_t;

/* Quickly train a dictionary from a source for fuzzing.
 * NOTE: Don't use this to train production dictionaries, it is only optimized
 * for speed, and doesn't care about dictionary quality.
 */
FUZZ_dict_t FUZZ_train(void const* src, size_t srcSize, FUZZ_dataProducer_t *producer);

#ifdef __cplusplus
}
#endif

#endif /* ZSTD_HELPERS_H */
