1
0
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:
gitlost
2024-11-08 16:54:38 +00:00
parent f1f283d6a1
commit 88155343bf
6 changed files with 403 additions and 231 deletions

View File

@@ -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);