tests: VC6 compatible; plot_raster_dotty: avoid float rounding difference

This commit is contained in:
gitlost 2021-06-23 15:00:49 +01:00
parent e5115bad07
commit 70801d8932
97 changed files with 3354 additions and 1893 deletions

View file

@ -1,6 +1,6 @@
/*
libzint - the open source barcode library
Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
Copyright (C) 2020 - 2021 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,14 +35,6 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf)
static void test_pixel_plot(int index, int debug) {
testStart("");
if (!testUtilHaveIdentify()) {
testSkip("ImageMagick identify not available");
return;
}
int ret;
struct item {
int width;
int height;
@ -63,16 +55,26 @@ static void test_pixel_plot(int index, int debug) {
/* 9*/ { 19, 32, "WWCWBWMWRWYWGWKCCWCMCRCYCGCKBWBCBBMBRBYBGBKMWMCMBMMRMYMGMKRWRCRBRMRRYRGRKYWYCYBYMYRYYGYKGWGCGBGMGRGYGGKKWK", 1 }, // Two LZW blocks, last size 1
};
int data_size = ARRAY_SIZE(data);
int i, ret;
struct zint_symbol *symbol;
char *gif = "out.gif";
char data_buf[19 * 32 + 1]; // 19 * 32 == 608
for (int i = 0; i < data_size; i++) {
testStart("test_pixel_plot");
if (!testUtilHaveIdentify()) {
testSkip("ImageMagick identify not available");
return;
}
for (i = 0; i < data_size; i++) {
int size;
if (index != -1 && i != index) continue;
struct zint_symbol *symbol = ZBarcode_Create();
symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
strcpy(symbol->outfile, gif);
@ -81,7 +83,7 @@ static void test_pixel_plot(int index, int debug) {
symbol->bitmap_height = data[i].height;
symbol->debug |= debug;
int size = data[i].width * data[i].height;
size = data[i].width * data[i].height;
assert_nonzero(size < (int) sizeof(data_buf), "i:%d gif_pixel_plot size %d < sizeof(data_buf) %d\n", i, size, (int) sizeof(data_buf));
if (data[i].repeat) {
@ -109,10 +111,133 @@ static void test_pixel_plot(int index, int debug) {
testFinish();
}
static void test_print(int index, int generate, int debug) {
struct item {
int symbology;
int whitespace_width;
int whitespace_height;
int option_1;
int option_2;
float scale;
float dot_size;
char *fgcolour;
char *bgcolour;
char *data;
char *expected_file;
};
struct item data[] = {
/* 0*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 0, 0, "", "", "12", "dotcode_1.0.gif" },
/* 1*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 0, 0.1, "", "", "12", "dotcode_1.0_ds0.1.gif" },
/* 2*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 0, 1.1, "", "", "12", "dotcode_1.0_ds1.1.gif" },
/* 3*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 1.5, 0, "", "", "12", "dotcode_1.5.gif" },
/* 4*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 1.5, 0.4, "", "", "12", "dotcode_1.5_ds0.4.gif" },
/* 5*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 1.5, 1.1, "", "", "12", "dotcode_1.5_ds1.1.gif" },
/* 6*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 1.5, 2.1, "", "", "12", "dotcode_1.5_ds2.1.gif" },
/* 7*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 2, 0, "", "", "12", "dotcode_2.0.gif" },
/* 8*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 2, 0.9, "", "", "12", "dotcode_2.0_ds0.9.gif" },
/* 9*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 2, 1.1, "", "", "12", "dotcode_2.0_ds1.1.gif" },
/* 10*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3, 0, "", "", "12", "dotcode_3.0.gif" },
/* 11*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3, 0.4, "", "", "12", "dotcode_3.0_ds0.4.gif" },
/* 12*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3, 1.1, "", "", "12", "dotcode_3.0_ds1.1.gif" },
/* 13*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3.5, 0, "", "", "12", "dotcode_3.5.gif" },
/* 14*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3.5, 0.4, "", "", "12", "dotcode_3.5_ds0.4.gif" },
/* 15*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 3.5, 1.1, "", "", "12", "dotcode_3.5_ds1.1.gif" },
/* 16*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 5, 0, "", "", "12", "dotcode_5.0.gif" },
/* 17*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 5, 0.2, "", "", "12", "dotcode_5.0_ds0.2.gif" },
/* 18*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 5, 1.1, "", "", "12", "dotcode_5.0_ds1.1.gif" },
/* 19*/ { BARCODE_DOTCODE, -1, -1, -1, -1, 5, 1.7, "", "", "12", "dotcode_5.0_ds1.7.gif" },
};
int data_size = ARRAY_SIZE(data);
int i, length, ret;
struct zint_symbol *symbol;
const char *data_dir = "/backend/tests/data/gif";
const char *gif = "out.gif";
char expected_file[4096];
char escaped[1024];
int escaped_size = 1024;
int have_identify = testUtilHaveIdentify();
testStart("test_print");
if (generate) {
char data_dir_path[1024];
assert_nonzero(testUtilDataPath(data_dir_path, sizeof(data_dir_path), data_dir, NULL), "testUtilDataPath(%s) == 0\n", data_dir);
if (!testUtilDirExists(data_dir_path)) {
ret = testUtilMkDir(data_dir_path);
assert_zero(ret, "testUtilMkDir(%s) ret %d != 0 (%d: %s)\n", data_dir_path, ret, errno, strerror(errno));
}
}
for (i = 0; i < data_size; i++) {
if (index != -1 && i != index) continue;
symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug);
if (data[i].whitespace_width != -1) {
symbol->whitespace_width = data[i].whitespace_width;
}
if (data[i].whitespace_height != -1) {
symbol->whitespace_height = data[i].whitespace_height;
}
if (data[i].scale) {
symbol->scale = data[i].scale;
}
if (data[i].dot_size) {
symbol->dot_size = data[i].dot_size;
}
if (*data[i].fgcolour) {
strcpy(symbol->fgcolour, data[i].fgcolour);
}
if (*data[i].bgcolour) {
strcpy(symbol->bgcolour, data[i].bgcolour);
}
ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length);
assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt);
strcpy(symbol->outfile, gif);
ret = ZBarcode_Print(symbol, 0);
assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret);
assert_nonzero(testUtilDataPath(expected_file, sizeof(expected_file), data_dir, data[i].expected_file), "i:%d testUtilDataPath == 0\n", i);
if (generate) {
printf(" /*%3d*/ { %s, %d, %d, %d, %d, %.5g, %.5g, \"%s\", \"%s\", \"%s\", \"%s\" },\n",
i, testUtilBarcodeName(data[i].symbology), data[i].whitespace_width, data[i].whitespace_height,
data[i].option_1, data[i].option_2, data[i].scale, data[i].dot_size, data[i].fgcolour, data[i].bgcolour,
testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file);
ret = testUtilRename(symbol->outfile, expected_file);
assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret);
if (have_identify) {
ret = testUtilVerifyIdentify(expected_file, debug);
assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret);
}
} else {
assert_nonzero(testUtilExists(symbol->outfile), "i:%d testUtilExists(%s) == 0\n", i, symbol->outfile);
assert_nonzero(testUtilExists(expected_file), "i:%d testUtilExists(%s) == 0\n", i, expected_file);
ret = testUtilCmpBins(symbol->outfile, expected_file);
assert_zero(ret, "i:%d %s testUtilCmpBins(%s, %s) %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, expected_file, ret);
assert_zero(remove(symbol->outfile), "i:%d remove(%s) != 0\n", i, symbol->outfile);
}
ZBarcode_Delete(symbol);
}
testFinish();
}
int main(int argc, char *argv[]) {
testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */
{ "test_pixel_plot", test_pixel_plot, 1, 0, 1 },
{ "test_print", test_print, 1, 1, 1 },
};
testRun(argc, argv, funcs, ARRAY_SIZE(funcs));