← Back to benchmark

benchmark_fixtures.py

"""Shared deterministic cumulative histories for the store and delta benchmarks."""
import random


def versions(seed, size, workload, count):
    rng = random.Random(seed + size)
    if workload == 'binary':
        data = bytearray(rng.randbytes(size))
    else:
        raw = rng.randbytes(size).hex()
        data = bytearray('\n'.join(raw[i:i + 64] for i in range(0, len(raw), 64))[:size], 'ascii')
    for version in range(count):
        if version:
            for _ in range(3):
                at = rng.randrange(len(data) - 16)
                if workload == 'text':
                    while b'\n' in data[at:at + 16]:
                        at = rng.randrange(len(data) - 16)
                    data[at:at + 16] = rng.randbytes(8).hex().encode('ascii')
                else:
                    data[at:at + 16] = rng.randbytes(16)
            data += (rng.randbytes(1).hex()[:1].encode('ascii') if workload == 'text'
                     else rng.randbytes(1))
        yield data