4aaa36f74b
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.
66 lines
1.8 KiB
C
66 lines
1.8 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 METHOD_H
|
|
#define METHOD_H
|
|
|
|
#include <stddef.h>
|
|
|
|
#include "data.h"
|
|
#include "config.h"
|
|
#include "result.h"
|
|
|
|
/**
|
|
* The base class for state that methods keep.
|
|
* All derived method state classes must have a member of this type.
|
|
*/
|
|
typedef struct {
|
|
data_t const* data;
|
|
} method_state_t;
|
|
|
|
/**
|
|
* A method that compresses the data using config.
|
|
*/
|
|
typedef struct {
|
|
char const* name; /**< The identifier for this method in the results. */
|
|
/**
|
|
* Creates a state that must contain a member variable of method_state_t,
|
|
* and returns a pointer to that member variable.
|
|
*
|
|
* This method can be used to do expensive work that only depends on the
|
|
* data, like loading the data file into a buffer.
|
|
*/
|
|
method_state_t* (*create)(data_t const* data);
|
|
/**
|
|
* Compresses the data in the state using the given config.
|
|
*
|
|
* @param state A pointer to the state returned by create().
|
|
*
|
|
* @returns The total compressed size on success, or an error code.
|
|
*/
|
|
result_t (*compress)(method_state_t* state, config_t const* config);
|
|
/**
|
|
* Frees the state.
|
|
*/
|
|
void (*destroy)(method_state_t* state);
|
|
} method_t;
|
|
|
|
/**
|
|
* Set the zstd cli path. Must be called before any methods are used.
|
|
*/
|
|
void method_set_zstdcli(char const* zstdcli);
|
|
|
|
/**
|
|
* A NULL-terminated list of methods.
|
|
*/
|
|
extern method_t const* const* methods;
|
|
|
|
#endif
|