| Index: xz/tests/create_compress_files.c
|
| ===================================================================
|
| --- xz/tests/create_compress_files.c (revision 0)
|
| +++ xz/tests/create_compress_files.c (revision 0)
|
| @@ -0,0 +1,157 @@
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +//
|
| +/// \file create_compress_files.c
|
| +/// \brief Creates bunch of test files to be compressed
|
| +///
|
| +/// Using a test file generator program saves space in the source code
|
| +/// package considerably.
|
| +//
|
| +// Author: Lasse Collin
|
| +//
|
| +// This file has been put into the public domain.
|
| +// You can do whatever you want with this file.
|
| +//
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| +#include "sysdefs.h"
|
| +#include <stdio.h>
|
| +
|
| +
|
| +// Avoid re-creating the test files every time the tests are run.
|
| +#define create_test(name) \
|
| +do { \
|
| + if (!file_exists("compress_generated_" #name)) { \
|
| + FILE *file = file_create("compress_generated_" #name); \
|
| + write_ ## name(file); \
|
| + file_finish(file, "compress_generated_" #name); \
|
| + } \
|
| +} while (0)
|
| +
|
| +
|
| +static bool
|
| +file_exists(const char *filename)
|
| +{
|
| + // Trying to be somewhat portable by avoiding stat().
|
| + FILE *file = fopen(filename, "rb");
|
| + bool ret;
|
| +
|
| + if (file != NULL) {
|
| + fclose(file);
|
| + ret = true;
|
| + } else {
|
| + ret = false;
|
| + }
|
| +
|
| + return ret;
|
| +}
|
| +
|
| +
|
| +static FILE *
|
| +file_create(const char *filename)
|
| +{
|
| + FILE *file = fopen(filename, "wb");
|
| +
|
| + if (file == NULL) {
|
| + perror(filename);
|
| + exit(1);
|
| + }
|
| +
|
| + return file;
|
| +}
|
| +
|
| +
|
| +static void
|
| +file_finish(FILE *file, const char *filename)
|
| +{
|
| + const bool ferror_fail = ferror(file);
|
| + const bool fclose_fail = fclose(file);
|
| +
|
| + if (ferror_fail || fclose_fail) {
|
| + perror(filename);
|
| + exit(1);
|
| + }
|
| +}
|
| +
|
| +
|
| +// File that repeats "abc\n" a few thousand times. This is targeted
|
| +// especially at Subblock filter's run-length encoder.
|
| +static void
|
| +write_abc(FILE *file)
|
| +{
|
| + for (size_t i = 0; i < 12345; ++i)
|
| + fwrite("abc\n", 4, 1, file);
|
| +}
|
| +
|
| +
|
| +// File that doesn't compress. We always use the same random seed to
|
| +// generate identical files on all systems.
|
| +static void
|
| +write_random(FILE *file)
|
| +{
|
| + uint32_t n = 5;
|
| +
|
| + for (size_t i = 0; i < 123456; ++i) {
|
| + n = 101771 * n + 71777;
|
| +
|
| + putc(n & 0xFF, file);
|
| + putc((n >> 8) & 0xFF, file);
|
| + putc((n >> 16) & 0xFF, file);
|
| + putc(n >> 24, file);
|
| + }
|
| +}
|
| +
|
| +
|
| +// Text file
|
| +static void
|
| +write_text(FILE *file)
|
| +{
|
| + static const char *lorem[] = {
|
| + "Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur",
|
| + "adipisicing", "elit,", "sed", "do", "eiusmod", "tempor",
|
| + "incididunt", "ut", "labore", "et", "dolore", "magna",
|
| + "aliqua.", "Ut", "enim", "ad", "minim", "veniam,", "quis",
|
| + "nostrud", "exercitation", "ullamco", "laboris", "nisi",
|
| + "ut", "aliquip", "ex", "ea", "commodo", "consequat.",
|
| + "Duis", "aute", "irure", "dolor", "in", "reprehenderit",
|
| + "in", "voluptate", "velit", "esse", "cillum", "dolore",
|
| + "eu", "fugiat", "nulla", "pariatur.", "Excepteur", "sint",
|
| + "occaecat", "cupidatat", "non", "proident,", "sunt", "in",
|
| + "culpa", "qui", "officia", "deserunt", "mollit", "anim",
|
| + "id", "est", "laborum."
|
| + };
|
| +
|
| + // Let the first paragraph be the original text.
|
| + for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) {
|
| + fprintf(file, "%s ", lorem[w]);
|
| +
|
| + if (w % 7 == 6)
|
| + fprintf(file, "\n");
|
| + }
|
| +
|
| + // The rest shall be (hopefully) meaningless combinations of
|
| + // the same words.
|
| + uint32_t n = 29;
|
| +
|
| + for (size_t p = 0; p < 500; ++p) {
|
| + fprintf(file, "\n\n");
|
| +
|
| + for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) {
|
| + n = 101771 * n + 71777;
|
| +
|
| + fprintf(file, "%s ", lorem[n % ARRAY_SIZE(lorem)]);
|
| +
|
| + if (w % 7 == 6)
|
| + fprintf(file, "\n");
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +int
|
| +main(void)
|
| +{
|
| + create_test(abc);
|
| + create_test(random);
|
| + create_test(text);
|
| + return 0;
|
| +}
|
|
|
| Property changes on: xz/tests/create_compress_files.c
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|