]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/seqgen.h
import zstd 1.4.2
[FreeBSD/FreeBSD.git] / 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 */