The regression tests run nightly or on the `regression` branch for convenience. The results get uploaded as the artifacts of the job. If they change, check the diff printed in the job. If all is well, download the new results and commit them to the repo. This code will only run on a UNIX like platform. It could be made to run on Windows, but I don't think that it is necessary. It also uses C99. * data: This module defines the data to run tests on. It downloads data from a URL into a cache directory, checks it against a checksum, and unpacks it. It also provides helpers for accessing the data. * config: This module defines the configs to run tests with. A config is a set of API parameters and a set of CLI flags. * result: This module is a helper for method that defines the result type. * method: This module defines the compression methods to test. It is what runs the regression test using the data and the config. It reports the total compressed size, or an error/skip. * test: This is the test binary that runs the tests for every (data, config, method) tuple, and prints the results to the output file and stderr. * results.csv: The results that the current commit is expected to produce.
93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2016-present, Yann Collet, 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.
|
|
*/
|
|
|
|
#ifndef DATA_H
|
|
#define DATA_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
typedef enum {
|
|
data_type_file = 1, /**< This data is a file. *.zst */
|
|
data_type_dir = 2, /**< This data is a directory. *.tar.zst */
|
|
} data_type_t;
|
|
|
|
typedef struct {
|
|
char const* url; /**< Where to get this resource. */
|
|
uint64_t xxhash64; /**< Hash of the url contents. */
|
|
char const* name; /**< The logical name of the resource (no extension). */
|
|
data_type_t type; /**< The type of this resource. */
|
|
char const* path; /**< The path of the unpacked resource (derived). */
|
|
size_t size;
|
|
} data_t;
|
|
|
|
/**
|
|
* The NULL-terminated list of data objects.
|
|
*/
|
|
extern data_t const* const* data;
|
|
|
|
/**
|
|
* Initializes the data module and downloads the data necessary.
|
|
* Caches the downloads in dir. We add a stamp file in the directory after
|
|
* a successful download. If a stamp file already exists, and matches our
|
|
* current data stamp, we will use the cached data without downloading.
|
|
*
|
|
* @param dir The directory to cache the downloaded data into.
|
|
*
|
|
* @returns 0 on success.
|
|
*/
|
|
int data_init(char const* dir);
|
|
|
|
/**
|
|
* Must be called at exit to free resources allocated by data_init().
|
|
*/
|
|
void data_finish(void);
|
|
|
|
typedef struct {
|
|
uint8_t* data;
|
|
size_t size;
|
|
size_t capacity;
|
|
} data_buffer_t;
|
|
|
|
/**
|
|
* Read the file that data points to into a buffer.
|
|
* NOTE: data must be a file, not a directory.
|
|
*
|
|
* @returns The buffer, which is NULL on failure.
|
|
*/
|
|
data_buffer_t data_buffer_get(data_t const* data);
|
|
|
|
/**
|
|
* Read the contents of filename into a buffer.
|
|
*
|
|
* @returns The buffer, which is NULL on failure.
|
|
*/
|
|
data_buffer_t data_buffer_read(char const* filename);
|
|
|
|
/**
|
|
* Create a buffer with the specified capacity.
|
|
*
|
|
* @returns The buffer, which is NULL on failure.
|
|
*/
|
|
data_buffer_t data_buffer_create(size_t capacity);
|
|
|
|
/**
|
|
* Calls memcmp() on the contents [0, size) of both buffers.
|
|
*/
|
|
int data_buffer_compare(data_buffer_t buffer1, data_buffer_t buffer2);
|
|
|
|
/**
|
|
* Frees an allocated buffer.
|
|
*/
|
|
void data_buffer_free(data_buffer_t buffer);
|
|
|
|
|
|
#endif
|