]> git.proxmox.com Git - ceph.git/blob - ceph/src/zstd/tests/seqgen.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / zstd / tests / seqgen.h
1 /*
2 * Copyright (c) 2017-present, Facebook, Inc.
3 * All rights reserved.
4 *
5 * This source code is licensed under both the BSD-style license (found in the
6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7 * in the COPYING file in the root directory of this source tree).
8 * You may select, at your option, one of the above-listed licenses.
9 */
10
11 #ifndef SEQGEN_H
12 #define SEQGEN_H
13
14 #define XXH_STATIC_LINKING_ONLY
15
16 #include "xxhash.h"
17 #include <stddef.h> /* size_t */
18
19 typedef enum {
20 SEQ_gen_ml = 0,
21 SEQ_gen_ll,
22 SEQ_gen_of,
23 SEQ_gen_max /* Must be the last value */
24 } SEQ_gen_type;
25
26 /* Internal state, do not use */
27 typedef struct {
28 XXH64_state_t xxh; /* xxh state for all the data produced so far (seed=0) */
29 unsigned seed;
30 int state; /* enum to control state machine (clean=0) */
31 unsigned saved;
32 size_t bytesLeft;
33 } SEQ_stream;
34
35 SEQ_stream SEQ_initStream(unsigned seed);
36
37 typedef struct {
38 void* dst;
39 size_t size;
40 size_t pos;
41 } SEQ_outBuffer;
42
43 /* Returns non-zero until the current type/value has been generated.
44 * Must pass the same type/value until it returns 0.
45 *
46 * Recommended to pick a value in the middle of the range you want, since there
47 * may be some noise that causes actual results to be slightly different.
48 * We try to be more accurate for smaller values.
49 *
50 * NOTE: Very small values don't work well (< 6).
51 */
52 size_t SEQ_gen(SEQ_stream* stream, SEQ_gen_type type, unsigned value,
53 SEQ_outBuffer* out);
54
55 /* Returns the xxhash of the data produced so far */
56 XXH64_hash_t SEQ_digest(SEQ_stream const* stream);
57
58 #endif /* SEQGEN_H */