mirror of
https://git.code.sf.net/p/zint/code
synced 2025-12-18 02:17:06 +00:00
MAXICODE: maintain current set between segments to prevent invalid
encodation; use code set E for padding as well, saves codeword, props Bue Jensen (BWIPP PR #279); add padding after all segments and limit loops to length to make NS compression work better; all the above temporary fixes until Bue Jensen's merge request with the BWIPP PR #279 algorithm GUI: expand linux "xcb" platform hack for >= Qt 5.1
This commit is contained in:
@@ -48,46 +48,52 @@ static void test_large(const testCtx *const p_ctx) {
|
||||
static const struct item data[] = {
|
||||
/* 0*/ { -1, -1, "1", 138, "", 0, 33, 30 }, /* Mode 4 (138 agrees with ISO/IEC 16023:2000) */
|
||||
/* 1*/ { -1, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 2*/ { -1, -1, "1", 145, "", ZINT_ERROR_TOO_LONG, -1, -1 }, /* Absolute max */
|
||||
/* 3*/ { -1, -1, "A", 93, "", 0, 33, 30 },
|
||||
/* 4*/ { -1, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 5*/ { -1, -1, "\001", 90, "", 0, 33, 30 },
|
||||
/* 6*/ { -1, -1, "\001", 91, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 7*/ { -1, -1, "\200", 90, "", 0, 33, 30 },
|
||||
/* 8*/ { -1, -1, "\200", 91, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 9*/ { 2, -1, "1", 126, "123456789123123", 0, 33, 30 },
|
||||
/* 10*/ { 2, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 11*/ { 2, -1, "A", 84, "123456789123123", 0, 33, 30 },
|
||||
/* 12*/ { 2, -1, "A", 85, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 13*/ { 2, 96, "1", 109, "123456789123123", 0, 33, 30 },
|
||||
/* 14*/ { 2, 96, "1", 110, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 15*/ { 2, 96, "1", 136, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 }, /* Absolute max with SCM vv */
|
||||
/* 16*/ { 3, -1, "1", 126, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 17*/ { 3, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 18*/ { 3, -1, "A", 84, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 19*/ { 3, -1, "A", 85, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 20*/ { 3, 96, "1", 109, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 21*/ { 3, 96, "1", 110, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 22*/ { 0, -1, "1", 126, "123456789123123", 0, 33, 30 }, /* Mode 2 */
|
||||
/* 23*/ { 0, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 24*/ { 0, -1, "1", 126, "ABCDEF123123", 0, 33, 30 }, /* Mode 3 */
|
||||
/* 25*/ { 0, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 26*/ { 5, -1, "1", 113, "", 0, 33, 30 }, /* Extra EEC */
|
||||
/* 27*/ { 5, -1, "1", 114, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 28*/ { 5, -1, "A", 77, "", 0, 33, 30 },
|
||||
/* 29*/ { 5, -1, "A", 78, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 30*/ { 6, -1, "1", 138, "", 0, 33, 30 },
|
||||
/* 31*/ { 6, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 32*/ { 6, -1, "A", 93, "", 0, 33, 30 },
|
||||
/* 33*/ { 6, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 2*/ { -1, -1, "1", 144, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 3*/ { -1, -1, "1", 145, "", ZINT_ERROR_TOO_LONG, -1, -1 }, /* Absolute max */
|
||||
/* 4*/ { -1, -1, "A", 93, "", 0, 33, 30 },
|
||||
/* 5*/ { -1, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 6*/ { -1, -1, "\001", 91, "", 0, 33, 30 },
|
||||
/* 7*/ { -1, -1, "\001", 92, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 8*/ { -1, -1, "\200", 91, "", 0, 33, 30 },
|
||||
/* 9*/ { -1, -1, "\200", 92, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 10*/ { 2, -1, "1", 126, "123456789123123", 0, 33, 30 },
|
||||
/* 11*/ { 2, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 12*/ { 2, -1, "A", 84, "123456789123123", 0, 33, 30 },
|
||||
/* 13*/ { 2, -1, "A", 85, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 14*/ { 2, 96 + 1, "1", 109, "123456789123123", 0, 33, 30 },
|
||||
/* 15*/ { 2, 96 + 1, "1", 110, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 16*/ { 2, 96 + 1, "1", 136, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 }, /* Absolute max with SCM vv */
|
||||
/* 17*/ { 3, -1, "1", 126, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 18*/ { 3, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 19*/ { 3, -1, "A", 84, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 20*/ { 3, -1, "A", 85, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 21*/ { 3, 96 + 1, "1", 109, "ABCDEF123123", 0, 33, 30 },
|
||||
/* 22*/ { 3, 96 + 1, "1", 110, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 23*/ { 0, -1, "1", 126, "123456789123123", 0, 33, 30 }, /* Mode 2 */
|
||||
/* 24*/ { 0, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 25*/ { 0, -1, "1", 126, "ABCDEF123123", 0, 33, 30 }, /* Mode 3 */
|
||||
/* 26*/ { 0, -1, "1", 127, "ABCDEF123123", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 27*/ { 5, -1, "1", 113, "", 0, 33, 30 }, /* Extra EEC */
|
||||
/* 28*/ { 5, -1, "1", 114, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 29*/ { 5, -1, "A", 77, "", 0, 33, 30 },
|
||||
/* 30*/ { 5, -1, "A", 78, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 31*/ { 6, -1, "1", 138, "", 0, 33, 30 },
|
||||
/* 32*/ { 6, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
/* 33*/ { 6, -1, "A", 93, "", 0, 33, 30 },
|
||||
/* 34*/ { 6, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1 },
|
||||
};
|
||||
const int data_size = ARRAY_SIZE(data);
|
||||
int i, length, ret;
|
||||
struct zint_symbol *symbol = NULL;
|
||||
|
||||
char data_buf[256];
|
||||
char escaped[1024];
|
||||
char cmp_buf[32768];
|
||||
char cmp_msg[1024];
|
||||
const char expected_errtxt[] = "Error 553: Input too long, requires too many codewords (maximum 144)";
|
||||
|
||||
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||
|
||||
testStartSymbol("test_large", &symbol);
|
||||
|
||||
for (i = 0; i < data_size; i++) {
|
||||
@@ -114,6 +120,20 @@ static void test_large(const testCtx *const p_ctx) {
|
||||
assert_zero(strcmp(symbol->errtxt, expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, expected_errtxt);
|
||||
}
|
||||
|
||||
if (ret < ZINT_ERROR) {
|
||||
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data_buf, length, debug)) {
|
||||
int cmp_len, ret_len;
|
||||
char modules_dump[33 * 33 + 1];
|
||||
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||
ret = testUtilZXingCPP(i, symbol, data_buf, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||
|
||||
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data_buf, length, symbol->primary, escaped, &ret_len);
|
||||
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||
}
|
||||
}
|
||||
|
||||
ZBarcode_Delete(symbol);
|
||||
}
|
||||
|
||||
@@ -192,6 +212,10 @@ static void test_input(const testCtx *const p_ctx) {
|
||||
/* 49*/ { UNICODE_MODE, -1, -1, -1, { 1, 9, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 558: Structured Append count '9' out of range (2 to 8)", 1, 1, "" },
|
||||
/* 50*/ { UNICODE_MODE, -1, -1, -1, { 3, 2, "" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 559: Structured Append index '3' out of range (1 to count 2)", 1, 1, "" },
|
||||
/* 51*/ { UNICODE_MODE, -1, -1, -1, { 1, 2, "A" }, "A", -1, "", ZINT_ERROR_INVALID_OPTION, 0, "Error 549: Structured Append ID not available for MaxiCode", 1, 1, "" },
|
||||
/* 52*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "b..A", -1, "", 0, 30, "(144) 04 3F 02 31 38 2E 01 21 21 21 23 2F 04 2C 34 3B 28 25 2C 11 21 21 21 21 21 21 21 21", 0, 1, "BWIPP pending PR #279" },
|
||||
/* 53*/ { UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "A123456789b123456789bbbA", -1, "", 0, 30, "(144) 04 01 1F 07 16 3C 34 15 3B 02 08 28 3C 0E 06 03 34 25 3C 1E 1F 07 16 3C 34 15 3F 02", 1, 1, "BWIPP pending PR #279" },
|
||||
/* 54*/ { ESCAPE_MODE, -1, -1, -1, { 0, 0, "" }, "\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192", -1, "", 0, 30, "(144) 04 3C 00 3D 00 3D 00 3D 00 3C 32 10 27 30 09 0B 06 16 3D 0D 00 3D 00 3D 00 3D 00 3C", 1, 1, "BWIPP pending PR #279" },
|
||||
/* 54*/ { ESCAPE_MODE, -1, -1, -1, { 0, 0, "" }, "\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192\\d224\\d224\\d224\\d192", -1, "", 0, 30, "(144) 04 3C 00 3D 00 3D 00 3D 00 3C 32 10 27 30 09 0B 06 16 3D 0D 00 3D 00 3D 00 3D 00 3C", 1, 1, "BWIPP pending PR #279" },
|
||||
};
|
||||
const int data_size = ARRAY_SIZE(data);
|
||||
int i, length, ret;
|
||||
@@ -332,44 +356,44 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
},
|
||||
/* 1*/ { -1, 4, -1, { 0, 0, "" }, "MaxiCode (19 chars)", -1, "", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure H1 **NOT SAME** different encodation (figure uses '3 Shift A' among other differences); BWIPP different encodation again",
|
||||
"001101011111011100000010101111"
|
||||
"101100010001001100010000001100"
|
||||
"101100010001001100010000000100"
|
||||
"101100001010001111001001111101"
|
||||
"010101010101010101010101010100"
|
||||
"000000000000000000000000000111"
|
||||
"101010101010101010101010101000"
|
||||
"010101010101010101010101010111"
|
||||
"000000000000000000000000000010"
|
||||
"101010101010101010101010101000"
|
||||
"000000000000000000000000000000"
|
||||
"101010101010101010101010101010"
|
||||
"010101011111111100000001010100"
|
||||
"000000000011110110001000000000"
|
||||
"101010101110000000111010101000"
|
||||
"010101100010000000001101010101"
|
||||
"000000101000000000001000000000"
|
||||
"101010000000000000011010101000"
|
||||
"010101010000000000001101010100"
|
||||
"000000001000000000001000000011"
|
||||
"101010000000000000011010101011"
|
||||
"010101010000000000001101010110"
|
||||
"000000001000000000001000000001"
|
||||
"101010110000000000001010101010"
|
||||
"010101101100000000010101010111"
|
||||
"000000100000000000000000000000"
|
||||
"101010010110000000000110101011"
|
||||
"010101010110000000001001010100"
|
||||
"000000000110001011000000000010"
|
||||
"010101010110000000001001010110"
|
||||
"000000000110001011000000000001"
|
||||
"101010100110111001010010101000"
|
||||
"010101010101010101010000101111"
|
||||
"000000000000000000001100100000"
|
||||
"101010101010101010100101000001"
|
||||
"000011000111010110101100010000"
|
||||
"111001111110111110011000111111"
|
||||
"000001110010000010110001100100"
|
||||
"000111000000001111011000010010"
|
||||
"010110010110001110100000010100"
|
||||
"010011110011000001010111100111"
|
||||
"010101010101010101010001100101"
|
||||
"000000000000000000001111101000"
|
||||
"101010101010101010100100001101"
|
||||
"100011000111000111100000110000"
|
||||
"011011110010111100011100111111"
|
||||
"110010110110010000110001100100"
|
||||
"001111010001000111111010011010"
|
||||
"010010010101001010100000011010"
|
||||
"010011010001000101110111100100"
|
||||
},
|
||||
/* 2*/ { DATA_MODE | ESCAPE_MODE, 2, 96, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure precedes PAD chars with Latch B); BWIPP different encodation again",
|
||||
/* 2*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure precedes PAD chars with Latch B); BWIPP different encodation again",
|
||||
"110101110110111110111111101111"
|
||||
"010101010111000011011000010010"
|
||||
"110110110001001010101010010011"
|
||||
"111000101010101111111111111100"
|
||||
"110110110001001010100110010001"
|
||||
"111000101010101111111111111110"
|
||||
"001111000010110010011000000011"
|
||||
"001001110010101010100000000000"
|
||||
"111011111110111111101111111110"
|
||||
@@ -377,34 +401,34 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"010001100010101010101001110001"
|
||||
"110111100011010000011011111100"
|
||||
"001100110011110000001110101001"
|
||||
"101110101000000001011111011000"
|
||||
"101010000000000000010110111100"
|
||||
"101110101000000001011111011010"
|
||||
"101010000000000000010110111111"
|
||||
"111101100000000000011011100010"
|
||||
"101010010000000000000110011101"
|
||||
"001000010000000000011100011110"
|
||||
"010011001000000000001000001010"
|
||||
"000000101000000000001010000010"
|
||||
"000100111100000000001110101010"
|
||||
"000010101100000000001000110010"
|
||||
"100000111010000000011101100011"
|
||||
"000010101100000000001000110000"
|
||||
"100000111010000000011101100000"
|
||||
"101000100000000000110110100000"
|
||||
"001000001110100101100110100101"
|
||||
"011001110010101001100000001000"
|
||||
"000010100010110001010101011010"
|
||||
"100111000011111000001001011000"
|
||||
"110010001001010010101100011101"
|
||||
"001001110101110100011001110010"
|
||||
"011111010011101100111101010011"
|
||||
"111111101111101010101101111000"
|
||||
"101001110101110111010111000011"
|
||||
"010110101101000001111000100110"
|
||||
"110110100000010000001011110011"
|
||||
"000010100010110001010101111010"
|
||||
"100111000011111000001101101010"
|
||||
"110010001001010010100000001101"
|
||||
"000001000110110100111010111100"
|
||||
"010111010010100100001111011010"
|
||||
"110111001110101010101101110100"
|
||||
"011011110001010100010111010011"
|
||||
"000111101001100001111000010110"
|
||||
"000100101000110000000111110011"
|
||||
},
|
||||
/* 3*/ { ESCAPE_MODE, 2, 96, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "15238840001", 0, 33, 30, 0, "OkapiBarcode zero-pad postcode lacking +4 (US 840 only), ISO/IEC 16023:2000 Annex B.1.4a; BWIPP different encodation",
|
||||
/* 3*/ { ESCAPE_MODE, 2, 96 + 1, { 0, 0, "" }, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "15238840001", 0, 33, 30, 0, "OkapiBarcode zero-pad postcode lacking +4 (US 840 only), ISO/IEC 16023:2000 Annex B.1.4a; BWIPP different encodation",
|
||||
"110101110110111110111111101111"
|
||||
"010101010111000011011000010010"
|
||||
"110110110001001010101010010011"
|
||||
"111000101010101111111111111100"
|
||||
"110110110001001010100110010001"
|
||||
"111000101010101111111111111110"
|
||||
"001111000010110010011000000011"
|
||||
"001001110010101010100000000000"
|
||||
"111011111110111111101111111110"
|
||||
@@ -412,28 +436,28 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"010001100010101010101001110001"
|
||||
"110111101111010000011011111100"
|
||||
"001100111111000000001010101001"
|
||||
"101110100000000001010011011000"
|
||||
"101010010010000000010110111100"
|
||||
"101110100000000001010011011010"
|
||||
"101010010010000000010110111111"
|
||||
"111101110000000000010011100010"
|
||||
"101010110000000000000110011101"
|
||||
"001000010000000000001100011110"
|
||||
"010011001000000000001000001010"
|
||||
"000000101000000000001010000010"
|
||||
"000100001100000000000010101010"
|
||||
"000010010100000000000100110010"
|
||||
"100000111100000000010001100011"
|
||||
"000010010100000000000100110000"
|
||||
"100000111100000000010001100000"
|
||||
"101000101000000000111110100000"
|
||||
"001000001110100101011010100101"
|
||||
"011001111110011001010100001000"
|
||||
"000010100010110001010101011010"
|
||||
"100111000011111000001001011000"
|
||||
"110010001001010010101100011101"
|
||||
"001001110101110100011001110010"
|
||||
"011111010011101100111101010011"
|
||||
"111111101111101010101101111000"
|
||||
"101001110101110111010111000011"
|
||||
"010110101101000001111000100110"
|
||||
"110110100000010000001011110011"
|
||||
"000010100010110001010101111010"
|
||||
"100111000011111000001101101010"
|
||||
"110010001001010010100000001101"
|
||||
"000001000110110100111010111100"
|
||||
"010111010010100100001111011010"
|
||||
"110111001110101010101101110100"
|
||||
"011011110001010100010111010011"
|
||||
"000111101001100001111000010110"
|
||||
"000100101000110000000111110011"
|
||||
},
|
||||
/* 4*/ { -1, 3, -1, { 0, 0, "" }, "CEN", -1, "B1050056999", 0, 33, 30, 1, "ISO/IEC 16023:2000 B.1 Example (primary only given, data arbitrary); verified manually against tec-it",
|
||||
"000000010101010101010101010111"
|
||||
@@ -540,40 +564,40 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"111010101011001101111001011010"
|
||||
"011110011111000011101011111011"
|
||||
},
|
||||
/* 7*/ { -1, 5, -1, { 0, 0, "" }, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, 1, "Mode 5 set E",
|
||||
/* 7*/ { -1, 5, -1, { 0, 0, "" }, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, 0, "Mode 5 set E; BWIPP different encodation",
|
||||
"000000000000000000101010101011"
|
||||
"100101010111111111000000001010"
|
||||
"110010011100100111001001110010"
|
||||
"010101010101011010101010101010"
|
||||
"010110101010001101010110101001"
|
||||
"100101010111111111000000001000"
|
||||
"110010011100100111001001110011"
|
||||
"010101010101011010101010101000"
|
||||
"010110101010001101010110101010"
|
||||
"100011011000110101100011011000"
|
||||
"010101010101111111111111111110"
|
||||
"010101010101111111111111111100"
|
||||
"010111111111000000001010101010"
|
||||
"011100100111001001110010011101"
|
||||
"010101011011110000001011111110"
|
||||
"000000001111110010010001010110"
|
||||
"101010100110000010001001100000"
|
||||
"010101110010000000001101010111"
|
||||
"000000111000000000001000000010"
|
||||
"101010110100000000001110101011"
|
||||
"010101010000000000001001010100"
|
||||
"000000001000000000001000000001"
|
||||
"101010100000000000001010101000"
|
||||
"010101100000000000001001010110"
|
||||
"000000000000000000000000000000"
|
||||
"101010100100000000011110101010"
|
||||
"101100110100000001110101110110"
|
||||
"011000000010110101110111000011"
|
||||
"110111000010110001001000011010"
|
||||
"100001101111010001110110101000"
|
||||
"111110011001100100010110010010"
|
||||
"100011110000001110111011000001"
|
||||
"111001000110000011101000011000"
|
||||
"101110110100100001100011011111"
|
||||
"101100010011001000110000101100"
|
||||
"110101001101000000111101001111"
|
||||
"100111110000101000000001110100"
|
||||
"100101010010100000010101000111"
|
||||
"011100100111001001110010011110"
|
||||
"101010101011110000001010111100"
|
||||
"111111111111110010010011010110"
|
||||
"000000000110000010001000100010"
|
||||
"101010110010000000001110101011"
|
||||
"111111111000000000001011111100"
|
||||
"000000110100000000001100000010"
|
||||
"101010010000000000001010101000"
|
||||
"111111001000000000001011111101"
|
||||
"000000100000000000001000000010"
|
||||
"101010100000000000001010101001"
|
||||
"111111000000000000000011111110"
|
||||
"000000100100000000011100000000"
|
||||
"001011110100000001110111111000"
|
||||
"000111000010110101110111101111"
|
||||
"001110100010110001001010110010"
|
||||
"110011000100101011100101101100"
|
||||
"101111101011010011111111100110"
|
||||
"010001100101111110101001111101"
|
||||
"001000011101100111100101110010"
|
||||
"110100001111010010010010001111"
|
||||
"100010011100101000100000101100"
|
||||
"110100100100100001111100000111"
|
||||
"011111011011101100100101001010"
|
||||
"000011101111000101100100011101"
|
||||
},
|
||||
/* 8*/ { -1, 6, -1, { 0, 0, "" }, "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\241\250\253\257\260\264\267\270\273\277\212\213\214\215\216\217\220\221\222\223\224", -1, "", 0, 33, 30, 1, "Mode 6 set D",
|
||||
"000000000000000000101010101011"
|
||||
@@ -890,40 +914,40 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"010110101111010110101010111100"
|
||||
"010100000000010110101010010100"
|
||||
},
|
||||
/* 17*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "¢£¤¥123456789", -1, "", 0, 33, 30, 1, "Mode 4 LCKE NS",
|
||||
"111110110101010101010101010111"
|
||||
"111010010000000000000000000000"
|
||||
"000010011010101010101010101000"
|
||||
"010101010101010101010101010100"
|
||||
"000000000000000000000000000001"
|
||||
/* 17*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "¢£¤¥123456789", -1, "", 0, 33, 30, 0, "Mode 4 LCKE NS; BWIPP different encodation (1 codeword longer)",
|
||||
"111110101010101010101010101011"
|
||||
"111010111111111111111111111100"
|
||||
"000010000000000000000000000011"
|
||||
"101010101010101010101010101010"
|
||||
"010101010101010101010101010101"
|
||||
"000000000000000000000000000000"
|
||||
"101010101010101010101010101001"
|
||||
"010101011111110100111001010110"
|
||||
"000000001001110110011100000010"
|
||||
"101010100110000000111010101010"
|
||||
"010101001010000000000101010101"
|
||||
"000000001000000000110100000000"
|
||||
"101010000100000000000110101011"
|
||||
"010101011000000000001101010110"
|
||||
"000000001000000000001000000000"
|
||||
"101010100000000000001010101000"
|
||||
"010101010100000000000101010100"
|
||||
"000000010000000000111100000010"
|
||||
"101010101100000000110010101001"
|
||||
"010101010110000001001001010100"
|
||||
"000000001110110001011000000000"
|
||||
"101010101010110101010010101010"
|
||||
"010101010101010101010000101101"
|
||||
"000000000000000000001110011100"
|
||||
"101010101010101010100111100010"
|
||||
"011101100110110110100011110010"
|
||||
"010001101101001001100100011011"
|
||||
"100011011110110000101000000010"
|
||||
"101101111000011101010000100101"
|
||||
"000000111100011110100001110000"
|
||||
"101000000010100111001011110101"
|
||||
"111111111111111111111111111101"
|
||||
"000000000000000000000000000010"
|
||||
"101010101010101010101010101011"
|
||||
"111111111111111111111111111100"
|
||||
"000000000000000000000000000011"
|
||||
"101010101111110100111010101000"
|
||||
"111111111001110110011111111101"
|
||||
"000000000110000000111000000000"
|
||||
"101010001010000000000110101011"
|
||||
"111111001000000000110111111110"
|
||||
"000000000100000000000100000011"
|
||||
"101010011000000000001110101010"
|
||||
"111111001000000000001011111101"
|
||||
"000000100000000000001000000000"
|
||||
"101010010100000000000110101001"
|
||||
"111111010000000000111111111100"
|
||||
"000000101100000000110000000001"
|
||||
"101010100110000001001010101010"
|
||||
"111111111110110001011011111101"
|
||||
"000000001010110101010000000010"
|
||||
"101010101010101010100110111001"
|
||||
"111111111111111111110110001100"
|
||||
"000000000000000000001100010001"
|
||||
"001110001011100101010100110000"
|
||||
"010000101010111000100010110100"
|
||||
"111011010110010000010100011000"
|
||||
"111100010011001010110101010101"
|
||||
"011100101001010011011100111100"
|
||||
"101101110111011101011010011101"
|
||||
},
|
||||
/* 18*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "ABCDE12abcde1ÀÁÂ⣤¥1àáâãabcde123A123456789àáâ㢣¤¥abc", -1, "", 0, 33, 30, 1, "Mode 4 mixed sets",
|
||||
"000000001111111100000000111111"
|
||||
@@ -960,7 +984,42 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"100011000001110011101110101000"
|
||||
"001001110010111101100100010001"
|
||||
},
|
||||
/* 19*/ { UNICODE_MODE, 4, -1, { 3, 7, "" }, "THIS IS A 91 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, APPENDED, MAXICODE SYMBOL...", -1, "", 0, 33, 30, 1, "Mode 4 Structured Append",
|
||||
/* 19*/ { UNICODE_MODE, 4, -1, { 0, 0, "" }, "A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789MNO123456789", -1, "", 0, 33, 30, 1, "Mode 4 spaced NSs",
|
||||
"001011111000100010111110001011"
|
||||
"101011101000111010111010101100"
|
||||
"110100001011111101000010001101"
|
||||
"100010111110001000101111100010"
|
||||
"111010101110101110101011101011"
|
||||
"110110000001111110100000011110"
|
||||
"001011111000100010111110001010"
|
||||
"101011101010111010111010011110"
|
||||
"110100001011111101000010001110"
|
||||
"100010110111101100010011100000"
|
||||
"110110100001111010011111101010"
|
||||
"111010000100000000101100011100"
|
||||
"001011101010000000001011100010"
|
||||
"101011111100000000110110100110"
|
||||
"110100001100000000010000100100"
|
||||
"101111011000000000000110001000"
|
||||
"101011001000000000001010101100"
|
||||
"100000001000000000001001111110"
|
||||
"001000101100000000000110111101"
|
||||
"011110001100000000111010111010"
|
||||
"111111100010000000000101000001"
|
||||
"111110000010000000001010001010"
|
||||
"101110101010000011011011111011"
|
||||
"000001110111001001101011001010"
|
||||
"100000001000101111100001000111"
|
||||
"101111111110101110101001010000"
|
||||
"101001111111010000100110111011"
|
||||
"101100110110010001111000100000"
|
||||
"111101100110001110010001110001"
|
||||
"000101001110100101000001111000"
|
||||
"101101001001111010110101100000"
|
||||
"011101000011011001001111111000"
|
||||
"111010010011100000100100111111"
|
||||
},
|
||||
/* 20*/ { UNICODE_MODE, 4, -1, { 3, 7, "" }, "THIS IS A 91 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, APPENDED, MAXICODE SYMBOL...", -1, "", 0, 33, 30, 1, "Mode 4 Structured Append",
|
||||
"010001111101000000100000100011"
|
||||
"000000010000000100000000101000"
|
||||
"001000101000110010011011001000"
|
||||
@@ -995,7 +1054,7 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||
"010101011101100110111011100100"
|
||||
"011001000011110011011110111010"
|
||||
},
|
||||
/* 20*/ { UNICODE_MODE, 3, -1, { 1, 8, "" }, "COMMISSION FOR EUROPEAN NORMALIZATION, RUE DE STASSART 36, B-1050 BRUXELLES", -1, "B1050056999", 0, 33, 30, 1, "Mode 3 Structured Append",
|
||||
/* 21*/ { UNICODE_MODE, 3, -1, { 1, 8, "" }, "COMMISSION FOR EUROPEAN NORMALIZATION, RUE DE STASSART 36, B-1050 BRUXELLES", -1, "B1050056999", 0, 33, 30, 1, "Mode 3 Structured Append",
|
||||
"010000000000001010000000010011"
|
||||
"001000111111010000011111001000"
|
||||
"101111111010101111101101000101"
|
||||
@@ -1269,7 +1328,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
||||
"010110101111010110101010111100"
|
||||
"010100000000010110101010010100"
|
||||
},
|
||||
/* 4*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("Pixel 4a 128 GB:$439.97"), -1, 3 }, { TU("Pixel 4a 128 GB:¥3149.79"), -1, 29 }, { TU("Pixel 4a 128 GB:444,90 €"), -1, 17 } }, "", 0, 33, 30, 0, "AIM ITS/04-023:2022 Annex A example (shortened)",
|
||||
/* 4*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("Pixel 4a 128 GB:$439.97"), -1, 3 }, { TU("Pixel 4a 128 GB:¥3149.79"), -1, 29 }, { TU("Pixel 4a 128 GB:444,90 €"), -1, 17 } }, "", 0, 33, 30, 0, "AIM ITS/04-023:2022 Annex A example (shortened); BWIPP different encodation, same codeword count",
|
||||
"011100110111111101000011011111"
|
||||
"001000110000000100100001101000"
|
||||
"000010110010010000110101000010"
|
||||
@@ -1409,7 +1468,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
||||
"101010010100011001011101100110"
|
||||
"111011110000111001101101111000"
|
||||
},
|
||||
/* 8*/ { UNICODE_MODE, -1, -1, { 1, 2, "" }, { { TU("αβ"), -1, 9 }, { TU("ÿ"), -1, 3 }, { TU("貫やぐ禁"), -1, 20 } }, "", 0, 33, 30, 1, "Structured Append",
|
||||
/* 8*/ { UNICODE_MODE, -1, -1, { 1, 2, "" }, { { TU("αβ"), -1, 9 }, { TU("ÿ"), -1, 3 }, { TU("貫やぐ禁"), -1, 20 } }, "", 0, 33, 30, 0, "Structured Append; BWIPP different encodation",
|
||||
"001101101011011110111111001111"
|
||||
"001110011011111100110011001110"
|
||||
"111000110010110010000110010011"
|
||||
@@ -1444,6 +1503,76 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
||||
"101010011010110110110010010100"
|
||||
"100101010111100011100010101000"
|
||||
},
|
||||
/* 9*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("ab"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU(""), 0, 0 } }, "", 0, 33, 30, 1, "Code Set B then A",
|
||||
"000000010101010101010101010111"
|
||||
"000010000000000000000000000010"
|
||||
"011100101010101010101010101001"
|
||||
"010101010101010101010101010110"
|
||||
"000000000000000000000000000010"
|
||||
"101010101010101010101010101010"
|
||||
"010101010101010101010101010100"
|
||||
"000000000000000000000000000000"
|
||||
"101010101010101010101010101011"
|
||||
"010101010111001000000001010100"
|
||||
"000000000111000110010000000000"
|
||||
"101010100010000000001010101010"
|
||||
"010101010010000000110001010110"
|
||||
"000000110000000000110100000010"
|
||||
"101010001000000000011110101011"
|
||||
"010101110000000000001101010110"
|
||||
"000000101000000000001000000001"
|
||||
"101010110000000000001010101000"
|
||||
"010101001100000000000101010101"
|
||||
"000000101100000000000000000010"
|
||||
"101010011010000000110110101001"
|
||||
"010101010000000001111101010100"
|
||||
"000000001010100111000100000010"
|
||||
"101010101010010001001110101010"
|
||||
"010101010101010101011110000100"
|
||||
"000000000000000000001100111010"
|
||||
"101010101010101010101100000000"
|
||||
"110000011010110101000110100010"
|
||||
"100100110111110111001111101011"
|
||||
"011111111011111001110100101100"
|
||||
"101000010001001011101111001010"
|
||||
"011011011101010101001101001000"
|
||||
"001010010110100000100111101000"
|
||||
},
|
||||
/* 10*/ { UNICODE_MODE, -1, -1, { 0, 0, "" }, { { TU("\004\004\004\004"), -1, 3 }, { TU("ABCD"), -1, 4 }, { TU("abcd"), -1, 5 } }, "", 0, 33, 30, 1, "Code Set E then A then B",
|
||||
"001100000000100011000000000111"
|
||||
"100100000010011011000000100000"
|
||||
"000110011100111011100111001010"
|
||||
"010101010101010101010101010100"
|
||||
"000000000000000000000000000011"
|
||||
"101010101010101010101010101010"
|
||||
"010101010101010101010101010111"
|
||||
"000000000000000000000000000010"
|
||||
"101010101010101010101010101000"
|
||||
"010101010111000000000001010110"
|
||||
"000000001001001010011100000011"
|
||||
"101010100100000000000110101010"
|
||||
"010101101010000000110101010100"
|
||||
"000000100100000000111000000010"
|
||||
"101010111100000000000010101001"
|
||||
"010101010000000000000001010110"
|
||||
"000000001000000000001000000001"
|
||||
"101010100000000000001010101010"
|
||||
"010101110100000000010101010110"
|
||||
"000000111000000000110100000000"
|
||||
"101010000110000000101010101011"
|
||||
"010101010000000001010101010110"
|
||||
"000000000110100011101100000011"
|
||||
"101010100011011101111110101010"
|
||||
"010101010101010101010101101000"
|
||||
"000000000000000000001001000010"
|
||||
"101010101010101010101010110111"
|
||||
"100010010101100011100111000100"
|
||||
"110110101110100010100011010011"
|
||||
"100001111011001010101000111000"
|
||||
"101100010110101111011111100011"
|
||||
"111010100101000101001011011000"
|
||||
"011111000111001010010000111100"
|
||||
},
|
||||
};
|
||||
const int data_size = ARRAY_SIZE(data);
|
||||
int i, j, seg_count, ret;
|
||||
@@ -1560,45 +1689,49 @@ static void test_best_supported_set(const testCtx *const p_ctx) {
|
||||
static const struct item data[] = {
|
||||
/* 0*/ { "am.//ab,\034TA# z\015!", 0, 100, 100, 0, 33, 30, "Different encodation than BWIPP, same number of codewords",
|
||||
"111010000101111000111101010111"
|
||||
"111110000000010100111000000000"
|
||||
"111110000000010100011000000000"
|
||||
"110000101100110100111010101011"
|
||||
"010101010101010101010101010100"
|
||||
"000000000000000000000000000000"
|
||||
"101010101010101010101010101000"
|
||||
"101010101010101010101010101010"
|
||||
"010101010101010101010101010110"
|
||||
"000000000000000000000000000000"
|
||||
"000000000000000000000000000010"
|
||||
"101010101010101010101010101011"
|
||||
"010101010111001100000101010110"
|
||||
"000000001011000010000000000010"
|
||||
"101010101100000000100110101010"
|
||||
"010101001100000000101101010101"
|
||||
"000000100000000000010000000010"
|
||||
"101010110000000000010010101010"
|
||||
"101010110000000000010010101011"
|
||||
"010101011000000000000101010110"
|
||||
"000000001000000000001000000010"
|
||||
"000000001000000000001000000011"
|
||||
"101010001000000000001010101000"
|
||||
"010101010000000000001101010101"
|
||||
"000000001100000000000000000010"
|
||||
"101010110010000000010110101010"
|
||||
"010101010100000001111001010100"
|
||||
"000000001110110111111100000011"
|
||||
"101010100110111101011010101010"
|
||||
"010101010101010101010011101000"
|
||||
"000000000000000000001101100000"
|
||||
"101010101010101010100000100110"
|
||||
"101001001101110001001011010000"
|
||||
"100100110110001010011000011100"
|
||||
"011011000001011011100100100110"
|
||||
"111001100000101101000111001000"
|
||||
"111100000110000011011101001110"
|
||||
"010100101001110111101010110010"
|
||||
"010101010100000001111001010110"
|
||||
"000000001110110111111100000000"
|
||||
"101010100110111101011010101000"
|
||||
"010101010101010101010001100011"
|
||||
"000000000000000000001110101000"
|
||||
"101010101010101010100010100010"
|
||||
"011000001001000010001111100000"
|
||||
"110111111010111010011000001100"
|
||||
"001011000101101010100000110110"
|
||||
"110001100010100101010101001101"
|
||||
"111000100110000011001110001100"
|
||||
"011100101001111011111001111100"
|
||||
},
|
||||
};
|
||||
const int data_size = ARRAY_SIZE(data);
|
||||
int i, length, ret;
|
||||
struct zint_symbol *symbol = NULL;
|
||||
|
||||
char escaped_data[1024];
|
||||
char escaped[1024];
|
||||
char cmp_buf[32768];
|
||||
char cmp_msg[1024];
|
||||
|
||||
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||
|
||||
testStartSymbol("test_best_supported_set", &symbol);
|
||||
|
||||
@@ -1616,7 +1749,7 @@ static void test_best_supported_set(const testCtx *const p_ctx) {
|
||||
|
||||
if (p_ctx->generate) {
|
||||
printf(" /*%2d*/ { \"%s\", %d, %.0f, %.0f, %d, %d, %d, \"%s\",\n",
|
||||
i, testUtilEscape(data[i].data, length, escaped_data, sizeof(escaped_data)), ret,
|
||||
i, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), ret,
|
||||
data[i].w, data[i].h, data[i].ret_vector, symbol->rows, symbol->width, data[i].comment);
|
||||
testUtilModulesPrint(symbol, " ", "\n");
|
||||
printf(" },\n");
|
||||
@@ -1631,6 +1764,20 @@ static void test_best_supported_set(const testCtx *const p_ctx) {
|
||||
|
||||
ret = ZBarcode_Buffer_Vector(symbol, 0);
|
||||
assert_equal(ret, data[i].ret_vector, "i:%d ZBarcode_Buffer_Vector ret %d != %d\n", i, ret, data[i].ret_vector);
|
||||
|
||||
if (ret < ZINT_ERROR) {
|
||||
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) {
|
||||
int cmp_len, ret_len;
|
||||
char modules_dump[33 * 33 + 1];
|
||||
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||
ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||
|
||||
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, symbol->primary, escaped, &ret_len);
|
||||
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ZBarcode_Delete(symbol);
|
||||
|
||||
Reference in New Issue
Block a user