Home | History | Annotate | Line # | Download | only in tests
      1 /*
      2  * Copyright (c) Meta Platforms, Inc. and affiliates.
      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 */
     59