zint/backend/tests/test_gs1.c

926 lines
59 KiB
C

/*
libzint - the open source barcode library
Copyright (C) 2019 - 2020 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the project nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
/* vim: set ts=4 sw=4 et : */
#include "testcommon.h"
/*
* Check that EAN128 and RSS_EXP based symbologies reduce GS1 data
*/
static void test_gs1_reduce(int index, int generate, int debug) {
testStart("");
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise
int ret;
struct item {
int symbology;
int input_mode;
unsigned char *data;
unsigned char *composite;
int ret;
char *comment;
unsigned char *expected;
};
struct item data[] = {
/* 0*/ { BARCODE_EAN128, -1, "12345678901234", "", ZINT_ERROR_INVALID_DATA, "GS1 data required", "" },
/* 1*/ { BARCODE_EAN128, -1, "[01]12345678901234", "", 0, "Input mode ignored; verified manually against tec-it",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110010001011000111010111101100011101011"
},
/* 2*/ { BARCODE_EAN128, GS1_MODE, "[01]12345678901234", "", 0, "Input mode ignored",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110010001011000111010111101100011101011"
},
/* 3*/ { BARCODE_EAN128, UNICODE_MODE, "[01]12345678901234", "", 0, "Input mode ignored",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110010001011000111010111101100011101011"
},
/* 4*/ { BARCODE_EAN128_CC, -1, "[01]12345678901234", "[21]1234", 0, "Input mode ignored",
"0000000000000000000001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010000000000000000000000000"
"0000000000000000000001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010000000000000000000000000"
"0000000000000000000001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010000000000000000000000000"
"0010110001100001010001001100100110100110001101110100111000111010010011110101100100001001010011000110111010011100010100001011010000110011100010100"
"1101001110011110101110110011011001011001110010001011000111000101101100001010011011110110101100111001000101100011101011110100101111001100011101011"
},
/* 5*/ { BARCODE_EAN128_CC, GS1_MODE, "[01]12345678901234", "[21]1234", 0, "Input mode ignored",
"0000000000000000000001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010000000000000000000000000"
"0000000000000000000001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010000000000000000000000000"
"0000000000000000000001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010000000000000000000000000"
"0010110001100001010001001100100110100110001101110100111000111010010011110101100100001001010011000110111010011100010100001011010000110011100010100"
"1101001110011110101110110011011001011001110010001011000111000101101100001010011011110110101100111001000101100011101011110100101111001100011101011"
},
/* 6*/ { BARCODE_EAN128_CC, UNICODE_MODE, "[01]12345678901234", "[21]1234", 0, "Input mode ignored",
"0000000000000000000001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010000000000000000000000000"
"0000000000000000000001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010000000000000000000000000"
"0000000000000000000001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010000000000000000000000000"
"0010110001100001010001001100100110100110001101110100111000111010010011110101100100001001010011000110111010011100010100001011010000110011100010100"
"1101001110011110101110110011011001011001110010001011000111000101101100001010011011110110101100111001000101100011101011110100101111001100011101011"
},
/* 7*/ { BARCODE_EAN14, -1, "1234567890123", "", 0, "Input mode ignored; verified manually against tec-it",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110011011000110100001100101100011101011"
},
/* 8*/ { BARCODE_EAN14, GS1_MODE, "1234567890123", "", 0, "Input mode ignored",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110011011000110100001100101100011101011"
},
/* 9*/ { BARCODE_EAN14, UNICODE_MODE, "1234567890123", "", 0, "Input mode ignored",
"11010011100111101011101100110110010110011100100010110001110001011011000010100110111101101011001110011011000110100001100101100011101011"
},
/*10*/ { BARCODE_NVE18, -1, "12345678901234567", "", 0, "Input mode ignored; verified manually against tec-it",
"110100111001111010111011011001100101100111001000101100011100010110110000101001101111011010110011100100010110001110001011011000010010101101110001100011101011"
},
/*11*/ { BARCODE_NVE18, GS1_MODE, "12345678901234567", "", 0, "Input mode ignored",
"110100111001111010111011011001100101100111001000101100011100010110110000101001101111011010110011100100010110001110001011011000010010101101110001100011101011"
},
/*12*/ { BARCODE_NVE18, UNICODE_MODE, "12345678901234567", "", 0, "Input mode ignored",
"110100111001111010111011011001100101100111001000101100011100010110110000101001101111011010110011100100010110001110001011011000010010101101110001100011101011"
},
/*13*/ { BARCODE_RSS_EXP, -1, "2012", "", ZINT_ERROR_INVALID_DATA, "GS1 data required", "" },
/*14*/ { BARCODE_RSS_EXP, -1, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*15*/ { BARCODE_RSS_EXP, GS1_MODE, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*16*/ { BARCODE_RSS_EXP, UNICODE_MODE, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*17*/ { BARCODE_RSS_EXP_CC, -1, "[20]12", "[21]1234", 0, "Input mode ignored; verified manually against tec-it",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
/*18*/ { BARCODE_RSS_EXP_CC, GS1_MODE, "[20]12", "[21]1234", 0, "Input mode ignored",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
/*19*/ { BARCODE_RSS_EXP_CC, UNICODE_MODE, "[20]12", "[21]1234", 0, "Input mode ignored",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
/*20*/ { BARCODE_RSS_EXPSTACK, -1, "12", "", ZINT_ERROR_INVALID_DATA, "GS1 data required", "" },
/*21*/ { BARCODE_RSS_EXPSTACK, -1, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*22*/ { BARCODE_RSS_EXPSTACK, GS1_MODE, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*23*/ { BARCODE_RSS_EXPSTACK, UNICODE_MODE, "[20]12", "", 0, "Input mode ignored",
"010010000010000101101111111100001010000010000110010101111100101110001011110000000010101111100001011101"
},
/*24*/ { BARCODE_RSS_EXPSTACK_CC, -1, "12", "[21]1234", ZINT_ERROR_INVALID_DATA, "GS1 data required", "" },
/*25*/ { BARCODE_RSS_EXPSTACK_CC, -1, "[20]12", "[21]1234", 0, "Input mode ignored; verified manually against tec-it (same as BARCODE_RSS_EXP_CC above)",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
/*26*/ { BARCODE_RSS_EXPSTACK_CC, GS1_MODE, "[20]12", "[21]1234", 0, "Input mode ignored",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
/*27*/ { BARCODE_RSS_EXPSTACK_CC, UNICODE_MODE, "[20]12", "[21]1234", 0, "Input mode ignored",
"001101101110110100001000001101001100111011000010011101001100001010001100010010011011000000110110001010"
"001101101100111110100010011001101011100100000010011001001001111001011110011101011001000000110010001010"
"001101101000101111100110000101001111010000001010011001101011101110011110010011110110000110111010001010"
"000001111111010110010000000010100100111001100001011010000011010001110100001010101001010000011110100000"
"010010000000101001101111111100001011000110011110100101111100101110001011110000000010101111100001011101"
},
};
int data_size = sizeof(data) / sizeof(struct item);
char *text;
char bwipp_buf[8196];
char bwipp_msg[1024];
for (int i = 0; i < data_size; i++) {
if (index != -1 && i != index) continue;
struct zint_symbol *symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
symbol->symbology = data[i].symbology;
if (data[i].input_mode != -1) {
symbol->input_mode = data[i].input_mode;
}
symbol->debug |= debug;
if (strlen(data[i].composite)) {
text = data[i].composite;
strcpy(symbol->primary, data[i].data);
} else {
text = data[i].data;
}
int length = strlen(text);
ret = ZBarcode_Encode(symbol, text, length);
if (generate) {
if (data[i].ret == 0) {
printf(" /*%2d*/ { %s, %s, \"%s\", \"%s\", %d, \"%s\",\n",
i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].data, data[i].composite, data[i].ret, data[i].comment);
testUtilModulesDump(symbol, " ", "\n");
printf(" },\n");
} else {
printf(" /*%2d*/ { %s, %s, \"%s\", \"%s\", %s, \"%s\", \"\" },\n",
i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].data, data[i].composite, testUtilErrorName(data[i].ret), data[i].comment);
}
} else {
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d %s\n", i, ret, data[i].ret, symbol->errtxt);
if (ret == 0) {
int width, row;
ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row);
assert_zero(ret, "i:%d %s testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, width, row, data[i].data);
if (do_bwipp && testUtilCanBwipp(symbol->symbology, -1, -1, -1, debug)) {
ret = testUtilBwipp(symbol, -1, -1, -1, text, length, symbol->primary, bwipp_buf, sizeof(bwipp_buf));
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), ret);
ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected);
assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n",
i, testUtilBarcodeName(data[i].symbology), ret, bwipp_msg, bwipp_buf, data[i].expected);
}
}
}
ZBarcode_Delete(symbol);
}
testFinish();
}
static void test_hrt(int index, int debug) {
testStart("");
int ret;
struct item {
int symbology;
unsigned char *data;
unsigned char *composite;
unsigned char *expected;
};
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
struct item data[] = {
/* 0*/ { BARCODE_EAN128, "[01]12345678901234[20]12", "", "(01)12345678901234(20)12" },
/* 1*/ { BARCODE_EAN128_CC, "[01]12345678901234[20]12", "[21]12345", "(01)12345678901234(20)12" },
/* 2*/ { BARCODE_EAN14, "1234567890123", "", "(01)12345678901231" },
/* 3*/ { BARCODE_NVE18, "12345678901234567", "", "(00)123456789012345675" },
/* 4*/ { BARCODE_RSS_EXP, "[01]12345678901234[20]12", "", "(01)12345678901234(20)12" },
/* 5*/ { BARCODE_RSS_EXP_CC, "[01]12345678901234", "[21]12345", "(01)12345678901234" },
/* 6*/ { BARCODE_RSS_EXPSTACK, "[01]12345678901234[20]12", "", "" },
/* 7*/ { BARCODE_RSS_EXPSTACK_CC, "[01]12345678901234[20]12", "[21]12345", "" },
};
int data_size = sizeof(data) / sizeof(struct item);
char *text;
for (int i = 0; i < data_size; i++) {
if (index != -1 && i != index) continue;
struct zint_symbol *symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
symbol->symbology = data[i].symbology;
symbol->debug |= debug;
if (strlen(data[i].composite)) {
text = data[i].composite;
strcpy(symbol->primary, data[i].data);
} else {
text = data[i].data;
}
int length = strlen(text);
ret = ZBarcode_Encode(symbol, text, length);
assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt);
assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected);
ZBarcode_Delete(symbol);
}
testFinish();
}
extern int gs1_verify(struct zint_symbol *symbol, const unsigned char source[], const size_t src_len, char reduced[]);
static void test_gs1_verify(int index) {
testStart("");
int ret;
struct item {
unsigned char *data;
int ret;
char *expected;
};
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
struct item data[] = {
/* 0*/ { "", ZINT_ERROR_INVALID_DATA, "" },
/* 1*/ { "[", ZINT_ERROR_INVALID_DATA, "" },
/* 2*/ { "[]12", ZINT_ERROR_INVALID_DATA, "" },
/* 3*/ { "[12345]12", ZINT_ERROR_INVALID_DATA, "" },
/* 4*/ { "[9999]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 5*/ { "[[01]]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 6*/ { "[90]\n", ZINT_ERROR_INVALID_DATA, "" },
/* 7*/ { "[90]\x7F", ZINT_ERROR_INVALID_DATA, "" },
/* 8*/ { "[90]\x80", ZINT_ERROR_INVALID_DATA, "" },
/* 9*/ { "[00]123456789012345678", 0, "00123456789012345678" },
/* 10*/ { "[00]12345678901234567", ZINT_ERROR_INVALID_DATA, "" },
/* 11*/ { "[01]12345678901234", 0, "0112345678901234" },
/* 12*/ { "[01]123456789012345", ZINT_ERROR_INVALID_DATA, "" },
/* 13*/ { "[02]12345678901234", 0, "0212345678901234" },
/* 14*/ { "[02]1234567890123", ZINT_ERROR_INVALID_DATA, "" },
/* 15*/ { "[03]12345678901234", ZINT_ERROR_INVALID_DATA, "" },
/* 16*/ { "[04]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 17*/ { "[05]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 18*/ { "[06]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 19*/ { "[07]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 20*/ { "[08]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 21*/ { "[09]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 22*/ { "[10]ABCD123456", 0, "10ABCD123456" },
/* 23*/ { "[10]123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/* 24*/ { "[100]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 25*/ { "[11]990102", 0, "11990102" },
/* 26*/ { "[11]9901023", ZINT_ERROR_INVALID_DATA, "" },
/* 27*/ { "[12]000100", 0, "12000100" },
/* 28*/ { "[12]00010", ZINT_ERROR_INVALID_DATA, "" },
/* 29*/ { "[13]991301", 0, "13991301" },
/* 30*/ { "[13]9913011", ZINT_ERROR_INVALID_DATA, "" },
/* 31*/ { "[14]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 32*/ { "[15]021231", 0, "15021231" },
/* 33*/ { "[15]02123", ZINT_ERROR_INVALID_DATA, "" },
/* 34*/ { "[16]000000", 0, "16000000" },
/* 35*/ { "[16]00000", ZINT_ERROR_INVALID_DATA, "" },
/* 36*/ { "[17]010200", 0, "17010200" },
/* 37*/ { "[17]0102000", ZINT_ERROR_INVALID_DATA, "" },
/* 38*/ { "[18]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 39*/ { "[19]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 40*/ { "[20]12", 0, "2012" },
/* 41*/ { "[20]1", ZINT_ERROR_INVALID_DATA, "" },
/* 42*/ { "[200]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 43*/ { "[21]A12345678", 0, "21A12345678" },
/* 44*/ { "[21]123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/* 45*/ { "[22]abcdefghijklmnopqrst", 0, "22abcdefghijklmnopqrst" },
/* 46*/ { "[22]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/* 47*/ { "[23]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 48*/ { "[235]1abcdefghijklmnopqrstuvwxyz0", 0, "2351abcdefghijklmnopqrstuvwxyz0" },
/* 49*/ { "[235]1abcdefghijklmnopqrstuvwxyz01", ZINT_ERROR_INVALID_DATA, "" },
/* 50*/ { "[24]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 51*/ { "[240]abcdefghijklmnopqrstuvwxyz1234", 0, "240abcdefghijklmnopqrstuvwxyz1234" },
/* 52*/ { "[240]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/* 53*/ { "[241]abcdefghijklmnopqrstuvwxyz1234", 0, "241abcdefghijklmnopqrstuvwxyz1234" },
/* 54*/ { "[241]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/* 55*/ { "[242]12345", 0, "24212345" },
/* 56*/ { "[242]1234567", ZINT_ERROR_INVALID_DATA, "" },
/* 57*/ { "[243]abcdefghijklmnopqrst", 0, "243abcdefghijklmnopqrst" },
/* 58*/ { "[243]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/* 59*/ { "[244]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 60*/ { "[249]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 61*/ { "[25]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 62*/ { "[250]abcdefghijklmnopqrstuvwxyz1234", 0, "250abcdefghijklmnopqrstuvwxyz1234" },
/* 63*/ { "[250]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/* 64*/ { "[251]abcdefghijklmnopqrstuvwxyz1234", 0, "251abcdefghijklmnopqrstuvwxyz1234" },
/* 65*/ { "[251]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/* 66*/ { "[252]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 67*/ { "[253]131313131313", ZINT_ERROR_INVALID_DATA, "" },
/* 68*/ { "[253]1313131313134", 0, "2531313131313134" },
/* 69*/ { "[253]131313131313412345678901234567", 0, "253131313131313412345678901234567" },
/* 70*/ { "[253]1313131313134123456789012345678", ZINT_ERROR_INVALID_DATA, "" },
/* 71*/ { "[254]abcdefghijklmnopqrst", 0, "254abcdefghijklmnopqrst" },
/* 72*/ { "[254]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/* 73*/ { "[255]131313131313", ZINT_ERROR_INVALID_DATA, "" },
/* 74*/ { "[255]1313131313134", 0, "2551313131313134" },
/* 75*/ { "[255]1313131313134123456789012", 0, "2551313131313134123456789012" },
/* 76*/ { "[255]13131313131341234567890123", ZINT_ERROR_INVALID_DATA, "" },
/* 77*/ { "[256]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 78*/ { "[259]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 79*/ { "[26]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 80*/ { "[27]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 81*/ { "[28]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 82*/ { "[29]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 83*/ { "[30]12345678", 0, "3012345678" },
/* 84*/ { "[30]123456789", ZINT_ERROR_INVALID_DATA, "" },
/* 85*/ { "[3000]1234", ZINT_ERROR_INVALID_DATA, "" },
/* 86*/ { "[31]123456", ZINT_ERROR_INVALID_DATA, "" },
/* 87*/ { "[3100]123456", 0, "3100123456" },
/* 88*/ { "[3100]12345", ZINT_ERROR_INVALID_DATA, "" },
/* 89*/ { "[3101]123456", 0, "3101123456" },
/* 90*/ { "[3101]12345", ZINT_ERROR_INVALID_DATA, "" },
/* 91*/ { "[3109]123456", 0, "3109123456" },
/* 92*/ { "[3110]123456", 0, "3110123456" },
/* 93*/ { "[3110]12345", ZINT_ERROR_INVALID_DATA, "" },
/* 94*/ { "[3119]123456", 0, "3119123456" },
/* 95*/ { "[3120]123456", 0, "3120123456" },
/* 96*/ { "[3120]1234567", ZINT_ERROR_INVALID_DATA, "" },
/* 97*/ { "[3129]123456", 0, "3129123456" },
/* 98*/ { "[3130]123456", 0, "3130123456" },
/* 99*/ { "[3130]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*100*/ { "[3139]123456", 0, "3139123456" },
/*101*/ { "[3140]123456", 0, "3140123456" },
/*102*/ { "[3140]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*103*/ { "[3149]123456", 0, "3149123456" },
/*104*/ { "[3150]123456", 0, "3150123456" },
/*105*/ { "[3150]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*106*/ { "[3159]123456", 0, "3159123456" },
/*107*/ { "[3160]123456", 0, "3160123456" },
/*108*/ { "[3160]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*109*/ { "[3169]123456", 0, "3169123456" },
/*110*/ { "[3170]123456", ZINT_ERROR_INVALID_DATA, "" },
/*111*/ { "[3180]123456", ZINT_ERROR_INVALID_DATA, "" },
/*112*/ { "[3190]123456", ZINT_ERROR_INVALID_DATA, "" },
/*113*/ { "[32]123456", ZINT_ERROR_INVALID_DATA, "" },
/*114*/ { "[3200]123456", 0, "3200123456" },
/*115*/ { "[3200]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*116*/ { "[3210]123456", 0, "3210123456" },
/*117*/ { "[3210]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*118*/ { "[3220]123456", 0, "3220123456" },
/*119*/ { "[3220]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*120*/ { "[3230]123456", 0, "3230123456" },
/*121*/ { "[3240]123456", 0, "3240123456" },
/*122*/ { "[3250]123456", 0, "3250123456" },
/*123*/ { "[3260]123456", 0, "3260123456" },
/*124*/ { "[3270]123456", 0, "3270123456" },
/*125*/ { "[3280]123456", 0, "3280123456" },
/*126*/ { "[3290]123456", 0, "3290123456" },
/*127*/ { "[3290]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*128*/ { "[3299]123456", 0, "3299123456" },
/*129*/ { "[33]123456", ZINT_ERROR_INVALID_DATA, "" },
/*130*/ { "[3300]123456", 0, "3300123456" },
/*131*/ { "[3300]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*132*/ { "[3310]123456", 0, "3310123456" },
/*133*/ { "[3310]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*134*/ { "[3320]123456", 0, "3320123456" },
/*135*/ { "[3330]123456", 0, "3330123456" },
/*136*/ { "[3340]123456", 0, "3340123456" },
/*137*/ { "[3350]123456", 0, "3350123456" },
/*138*/ { "[3360]123456", 0, "3360123456" },
/*139*/ { "[3370]123456", 0, "3370123456" },
/*140*/ { "[3370]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*141*/ { "[3379]123456", 0, "3379123456" },
/*142*/ { "[3380]123456", ZINT_ERROR_INVALID_DATA, "" },
/*143*/ { "[3390]123456", ZINT_ERROR_INVALID_DATA, "" },
/*144*/ { "[34]123456", ZINT_ERROR_INVALID_DATA, "" },
/*145*/ { "[3400]123456", 0, "3400123456" },
/*146*/ { "[3400]12345", ZINT_ERROR_INVALID_DATA, "" },
/*147*/ { "[3410]123456", 0, "3410123456" },
/*148*/ { "[3410]12345", ZINT_ERROR_INVALID_DATA, "" },
/*149*/ { "[3420]123456", 0, "3420123456" },
/*150*/ { "[3430]123456", 0, "3430123456" },
/*151*/ { "[3440]123456", 0, "3440123456" },
/*152*/ { "[3450]123456", 0, "3450123456" },
/*153*/ { "[3460]123456", 0, "3460123456" },
/*154*/ { "[3470]123456", 0, "3470123456" },
/*155*/ { "[3480]123456", 0, "3480123456" },
/*156*/ { "[3490]123456", 0, "3490123456" },
/*157*/ { "[3490]12345", ZINT_ERROR_INVALID_DATA, "" },
/*158*/ { "[3499]123456", 0, "3499123456" },
/*159*/ { "[35]123456", ZINT_ERROR_INVALID_DATA, "" },
/*160*/ { "[3500]123456", 0, "3500123456" },
/*161*/ { "[3500]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*162*/ { "[3510]123456", 0, "3510123456", },
/*163*/ { "[3510]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*164*/ { "[3520]123456", 0, "3520123456", },
/*165*/ { "[3530]123456", 0, "3530123456", },
/*166*/ { "[3540]123456", 0, "3540123456", },
/*167*/ { "[3550]123456", 0, "3550123456", },
/*168*/ { "[3560]123456", 0, "3560123456", },
/*169*/ { "[3570]123456", 0, "3570123456", },
/*170*/ { "[3579]123456", 0, "3579123456" },
/*171*/ { "[3580]123456", ZINT_ERROR_INVALID_DATA, "" },
/*172*/ { "[3590]123456", ZINT_ERROR_INVALID_DATA, "" },
/*173*/ { "[36]123456", ZINT_ERROR_INVALID_DATA, "" },
/*174*/ { "[3600]123456", 0, "3600123456" },
/*175*/ { "[3600]12345", ZINT_ERROR_INVALID_DATA, "" },
/*176*/ { "[3610]123456", 0, "3610123456" },
/*177*/ { "[3610]12345", ZINT_ERROR_INVALID_DATA, "" },
/*178*/ { "[3620]123456", 0, "3620123456", },
/*179*/ { "[3630]123456", 0, "3630123456", },
/*180*/ { "[3640]123456", 0, "3640123456", },
/*181*/ { "[3650]123456", 0, "3650123456", },
/*182*/ { "[3660]123456", 0, "3660123456", },
/*183*/ { "[3670]123456", 0, "3670123456", },
/*184*/ { "[3680]123456", 0, "3680123456", },
/*185*/ { "[3680]123456", 0, "3680123456", },
/*186*/ { "[3680]12345", ZINT_ERROR_INVALID_DATA, "" },
/*187*/ { "[3690]123456", 0, "3690123456" },
/*188*/ { "[3699]123456", 0, "3699123456" },
/*189*/ { "[37]12345678", 0, "3712345678" },
/*190*/ { "[37]123456789", ZINT_ERROR_INVALID_DATA, "" },
/*191*/ { "[3700]12345678", ZINT_ERROR_INVALID_DATA, "" },
/*192*/ { "[38]123456", ZINT_ERROR_INVALID_DATA, "" },
/*193*/ { "[3800]123456", ZINT_ERROR_INVALID_DATA, "" },
/*194*/ { "[39]123456", ZINT_ERROR_INVALID_DATA, "" },
/*195*/ { "[3900]123456789012345", 0, "3900123456789012345" },
/*196*/ { "[3900]1234567890123456", ZINT_ERROR_INVALID_DATA, "" },
/*197*/ { "[3909]123456789012345", 0, "3909123456789012345" },
/*198*/ { "[3910]123123456789012345", 0, "3910123123456789012345" },
/*199*/ { "[3910]1231234567890123456", ZINT_ERROR_INVALID_DATA, "" },
/*200*/ { "[3910]123", ZINT_ERROR_INVALID_DATA, "" },
/*201*/ { "[3920]123456789012345", 0, "3920123456789012345" },
/*202*/ { "[3920]1234567890123456", ZINT_ERROR_INVALID_DATA, "" },
/*203*/ { "[3930]123123456789012345", 0, "3930123123456789012345" },
/*204*/ { "[3930]1231234567890123456", ZINT_ERROR_INVALID_DATA, "" },
/*205*/ { "[3930]123", ZINT_ERROR_INVALID_DATA, "" },
/*206*/ { "[3940]1234", 0, "39401234" },
/*207*/ { "[3940]12345", ZINT_ERROR_INVALID_DATA, "" },
/*208*/ { "[3940]123", ZINT_ERROR_INVALID_DATA, "" },
/*209*/ { "[3949]1234", 0, "39491234" },
/*210*/ { "[3950]1234", ZINT_ERROR_INVALID_DATA, "" },
/*211*/ { "[3960]1234", ZINT_ERROR_INVALID_DATA, "" },
/*212*/ { "[3970]1234", ZINT_ERROR_INVALID_DATA, "" },
/*213*/ { "[3980]1234", ZINT_ERROR_INVALID_DATA, "" },
/*214*/ { "[3999]1234", ZINT_ERROR_INVALID_DATA, "" },
/*215*/ { "[40]1234", ZINT_ERROR_INVALID_DATA, "" },
/*216*/ { "[400]123456789012345678901234567890", 0, "400123456789012345678901234567890" },
/*217*/ { "[400]1234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*218*/ { "[401]1234abcdefghijklmnopqrstuvwxyz", 0, "4011234abcdefghijklmnopqrstuvwxyz" },
/*219*/ { "[401]1234abcdefghijklmnopqrstuvwxyz1", ZINT_ERROR_INVALID_DATA, "" },
/*220*/ { "[402]13131313131313132", 0, "40213131313131313132" },
/*221*/ { "[402]1313131313131313", ZINT_ERROR_INVALID_DATA, "" },
/*222*/ { "[403]abcdefghijklmnopqrstuvwxyz1234", 0, "403abcdefghijklmnopqrstuvwxyz1234" },
/*223*/ { "[403]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/*224*/ { "[404]1234", ZINT_ERROR_INVALID_DATA, "" },
/*225*/ { "[409]1234", ZINT_ERROR_INVALID_DATA, "" },
/*226*/ { "[410]3898765432108", 0, "4103898765432108" },
/*227*/ { "[410]12345678901234", ZINT_ERROR_INVALID_DATA, "" },
/*228*/ { "[411]1313131313134", 0, "4111313131313134" },
/*229*/ { "[411]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*230*/ { "[412]1313131313134", 0, "4121313131313134" },
/*231*/ { "[412]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*232*/ { "[413]1313131313134", 0, "4131313131313134" },
/*233*/ { "[413]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*234*/ { "[414]1313131313134", 0, "4141313131313134" },
/*235*/ { "[414]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*236*/ { "[415]1313131313134", 0, "4151313131313134" },
/*237*/ { "[415]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*238*/ { "[416]1313131313134", 0, "4161313131313134" },
/*239*/ { "[416]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*240*/ { "[417]1313131313134", 0, "4171313131313134" },
/*241*/ { "[417]13131313131", ZINT_ERROR_INVALID_DATA, "" },
/*242*/ { "[418]1234", ZINT_ERROR_INVALID_DATA, "" },
/*243*/ { "[419]1234", ZINT_ERROR_INVALID_DATA, "" },
/*244*/ { "[420]abcdefghijklmnopqrst", 0, "420abcdefghijklmnopqrst" },
/*245*/ { "[420]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*246*/ { "[421]123abcdefghi", 0, "421123abcdefghi" },
/*247*/ { "[421]123abcdefghij", ZINT_ERROR_INVALID_DATA, "" },
/*248*/ { "[422]123", 0, "422123" },
/*249*/ { "[422]1234", ZINT_ERROR_INVALID_DATA, "" },
/*250*/ { "[422]12", ZINT_ERROR_INVALID_DATA, "" },
/*251*/ { "[423]123123123123123", 0, "423123123123123123" },
/*252*/ { "[423]1231231231231231", ZINT_ERROR_INVALID_DATA, "" },
/*253*/ { "[423]12", ZINT_ERROR_INVALID_DATA, "" },
/*254*/ { "[424]123", 0, "424123" },
/*255*/ { "[424]1234", ZINT_ERROR_INVALID_DATA, "" },
/*256*/ { "[424]12", ZINT_ERROR_INVALID_DATA, "" },
/*257*/ { "[425]123123123123123", 0, "425123123123123123" },
/*258*/ { "[425]1231231231231231", ZINT_ERROR_INVALID_DATA, "" },
/*259*/ { "[425]12", ZINT_ERROR_INVALID_DATA, "" },
/*260*/ { "[426]123", 0, "426123" },
/*261*/ { "[426]1234", ZINT_ERROR_INVALID_DATA, "" },
/*262*/ { "[426]12", ZINT_ERROR_INVALID_DATA, "" },
/*263*/ { "[427]abc", 0, "427abc" },
/*264*/ { "[427]abcd", ZINT_ERROR_INVALID_DATA, "" },
/*265*/ { "[428]1234", ZINT_ERROR_INVALID_DATA, "" },
/*266*/ { "[429]1234", ZINT_ERROR_INVALID_DATA, "" },
/*267*/ { "[430]1234", ZINT_ERROR_INVALID_DATA, "" },
/*268*/ { "[499]1234", ZINT_ERROR_INVALID_DATA, "" },
/*269*/ { "[50]1234", ZINT_ERROR_INVALID_DATA, "" },
/*270*/ { "[500]1234", ZINT_ERROR_INVALID_DATA, "" },
/*271*/ { "[5000]1234", ZINT_ERROR_INVALID_DATA, "" },
/*272*/ { "[51]1234", ZINT_ERROR_INVALID_DATA, "" },
/*273*/ { "[59]1234", ZINT_ERROR_INVALID_DATA, "" },
/*274*/ { "[60]1234", ZINT_ERROR_INVALID_DATA, "" },
/*275*/ { "[600]1234", ZINT_ERROR_INVALID_DATA, "" },
/*276*/ { "[6000]1234", ZINT_ERROR_INVALID_DATA, "" },
/*277*/ { "[61]1234", ZINT_ERROR_INVALID_DATA, "" },
/*278*/ { "[69]1234", ZINT_ERROR_INVALID_DATA, "" },
/*279*/ { "[70]1234", ZINT_ERROR_INVALID_DATA, "" },
/*280*/ { "[700]1234", ZINT_ERROR_INVALID_DATA, "" },
/*281*/ { "[7000]1234", ZINT_ERROR_INVALID_DATA, "" },
/*282*/ { "[7001]1234567890123", 0, "70011234567890123" },
/*283*/ { "[7001]123456789012", ZINT_ERROR_INVALID_DATA, "" },
/*284*/ { "[7002]abcdefghijklmnopqrstuvwxyz1234", 0, "7002abcdefghijklmnopqrstuvwxyz1234" },
/*285*/ { "[7002]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/*286*/ { "[7003]1212121212", 0, "70031212121212" },
/*287*/ { "[7003]121212121", ZINT_ERROR_INVALID_DATA, "" },
/*288*/ { "[7004]1234", 0, "70041234" },
/*289*/ { "[7004]12345", ZINT_ERROR_INVALID_DATA, "" },
/*290*/ { "[7005]abcdefghijkl", 0, "7005abcdefghijkl" },
/*291*/ { "[7005]abcdefghijklm", ZINT_ERROR_INVALID_DATA, "" },
/*292*/ { "[7006]200132", 0, "7006200132" },
/*293*/ { "[7006]2001320", ZINT_ERROR_INVALID_DATA, "" },
/*294*/ { "[7007]010101121212", 0, "7007010101121212" },
/*295*/ { "[7007]01010112121", ZINT_ERROR_INVALID_DATA, "" },
/*296*/ { "[7007]121212", 0, "7007121212" },
/*297*/ { "[7007]12121", ZINT_ERROR_INVALID_DATA, "" },
/*298*/ { "[7007]1212121", ZINT_ERROR_INVALID_DATA, "" },
/*299*/ { "[7008]abc", 0, "7008abc" },
/*300*/ { "[7008]abcd", ZINT_ERROR_INVALID_DATA, "" },
/*301*/ { "[7009]abcdefghij", 0, "7009abcdefghij" },
/*302*/ { "[7009]abcdefghijk", ZINT_ERROR_INVALID_DATA, "" },
/*303*/ { "[7010]01", 0, "701001" },
/*304*/ { "[7010]1", 0, "70101" },
/*305*/ { "[7010]012", ZINT_ERROR_INVALID_DATA, "" },
/*306*/ { "[7011]1234", ZINT_ERROR_INVALID_DATA, "" },
/*307*/ { "[7012]1234", ZINT_ERROR_INVALID_DATA, "" },
/*308*/ { "[7019]1234", ZINT_ERROR_INVALID_DATA, "" },
/*309*/ { "[7020]abcdefghijklmnopqrst", 0, "7020abcdefghijklmnopqrst" },
/*310*/ { "[7020]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*311*/ { "[7021]abcdefghijklmnopqrst", 0, "7021abcdefghijklmnopqrst" },
/*312*/ { "[7021]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*313*/ { "[7022]abcdefghijklmnopqrst", 0, "7022abcdefghijklmnopqrst" },
/*314*/ { "[7022]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*315*/ { "[7023]1234abcdefghijklmnopqrstuvwxyz", 0, "70231234abcdefghijklmnopqrstuvwxyz" },
/*316*/ { "[7023]1234abcdefghijklmnopqrstuvwxyza", ZINT_ERROR_INVALID_DATA, "" },
/*317*/ { "[7024]1234", ZINT_ERROR_INVALID_DATA, "" },
/*318*/ { "[7025]1234", ZINT_ERROR_INVALID_DATA, "" },
/*319*/ { "[7029]1234", ZINT_ERROR_INVALID_DATA, "" },
/*320*/ { "[7030]123abcdefghijklmnopqrstuvwxyza", 0, "7030123abcdefghijklmnopqrstuvwxyza" },
/*321*/ { "[7030]123abcdefghijklmnopqrstuvwxyzab", ZINT_ERROR_INVALID_DATA, "" },
/*322*/ { "[7031]123abcdefghijklmnopqrstuvwxyza", 0, "7031123abcdefghijklmnopqrstuvwxyza" },
/*323*/ { "[7031]123abcdefghijklmnopqrstuvwxyzab", ZINT_ERROR_INVALID_DATA, "" },
/*324*/ { "[7032]123abcdefghijklmnopqrstuvwxyza", 0, "7032123abcdefghijklmnopqrstuvwxyza" },
/*325*/ { "[7033]123abcdefghijklmnopqrstuvwxyza", 0, "7033123abcdefghijklmnopqrstuvwxyza" },
/*326*/ { "[7034]123abcdefghijklmnopqrstuvwxyza", 0, "7034123abcdefghijklmnopqrstuvwxyza" },
/*327*/ { "[7035]123abcdefghijklmnopqrstuvwxyza", 0, "7035123abcdefghijklmnopqrstuvwxyza" },
/*328*/ { "[7036]123abcdefghijklmnopqrstuvwxyza", 0, "7036123abcdefghijklmnopqrstuvwxyza" },
/*329*/ { "[7037]123abcdefghijklmnopqrstuvwxyza", 0, "7037123abcdefghijklmnopqrstuvwxyza" },
/*330*/ { "[7038]123abcdefghijklmnopqrstuvwxyza", 0, "7038123abcdefghijklmnopqrstuvwxyza" },
/*331*/ { "[7039]123abcdefghijklmnopqrstuvwxyza", 0, "7039123abcdefghijklmnopqrstuvwxyza" },
/*332*/ { "[7039]123abcdefghijklmnopqrstuvwxyzab", ZINT_ERROR_INVALID_DATA, "" },
/*333*/ { "[7040]1abc", 0, "70401abc" },
/*334*/ { "[7040]1ab", ZINT_ERROR_INVALID_DATA, "" },
/*335*/ { "[7040]1abcd", ZINT_ERROR_INVALID_DATA, "" },
/*336*/ { "[7041]1234", ZINT_ERROR_INVALID_DATA, "" },
/*337*/ { "[7042]1234", ZINT_ERROR_INVALID_DATA, "" },
/*338*/ { "[7050]1234", ZINT_ERROR_INVALID_DATA, "" },
/*339*/ { "[7090]1234", ZINT_ERROR_INVALID_DATA, "" },
/*340*/ { "[7099]1234", ZINT_ERROR_INVALID_DATA, "" },
/*341*/ { "[71]1234", ZINT_ERROR_INVALID_DATA, "" },
/*342*/ { "[710]abcdefghijklmnopqrst", 0, "710abcdefghijklmnopqrst" },
/*343*/ { "[710]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*344*/ { "[711]abcdefghijklmnopqrst", 0, "711abcdefghijklmnopqrst" },
/*345*/ { "[711]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*346*/ { "[712]abcdefghijklmnopqrst", 0, "712abcdefghijklmnopqrst" },
/*347*/ { "[712]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*348*/ { "[713]abcdefghijklmnopqrst", 0, "713abcdefghijklmnopqrst" },
/*349*/ { "[713]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*350*/ { "[714]abcdefghijklmnopqrst", 0, "714abcdefghijklmnopqrst" },
/*351*/ { "[714]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*352*/ { "[715]1234", ZINT_ERROR_INVALID_DATA, "" },
/*353*/ { "[716]1234", ZINT_ERROR_INVALID_DATA, "" },
/*354*/ { "[719]1234", ZINT_ERROR_INVALID_DATA, "" },
/*355*/ { "[7100]1234", ZINT_ERROR_INVALID_DATA, "" },
/*356*/ { "[72]1234", ZINT_ERROR_INVALID_DATA, "" },
/*357*/ { "[7200]1234", ZINT_ERROR_INVALID_DATA, "" },
/*358*/ { "[7210]1234", ZINT_ERROR_INVALID_DATA, "" },
/*359*/ { "[7220]1234", ZINT_ERROR_INVALID_DATA, "" },
/*360*/ { "[7230]EMabcdefghijklmnopqrstuvwxyzab", 0, "7230EMabcdefghijklmnopqrstuvwxyzab" },
/*361*/ { "[7230]EMabcdefghijklmnopqrstuvwxyzabc", ZINT_ERROR_INVALID_DATA, "" },
/*362*/ { "[7230]EM", ZINT_ERROR_INVALID_DATA, "" },
/*363*/ { "[7231]EMabcdefghijklmnopqrstuvwxyzab", 0, "7231EMabcdefghijklmnopqrstuvwxyzab" },
/*364*/ { "[7232]EMabcdefghijklmnopqrstuvwxyzab", 0, "7232EMabcdefghijklmnopqrstuvwxyzab" },
/*365*/ { "[7233]EMabcdefghijklmnopqrstuvwxyzab", 0, "7233EMabcdefghijklmnopqrstuvwxyzab" },
/*366*/ { "[7234]EMabcdefghijklmnopqrstuvwxyzab", 0, "7234EMabcdefghijklmnopqrstuvwxyzab" },
/*367*/ { "[7235]EMabcdefghijklmnopqrstuvwxyzab", 0, "7235EMabcdefghijklmnopqrstuvwxyzab" },
/*368*/ { "[7236]EMabcdefghijklmnopqrstuvwxyzab", 0, "7236EMabcdefghijklmnopqrstuvwxyzab" },
/*369*/ { "[7237]EMabcdefghijklmnopqrstuvwxyzab", 0, "7237EMabcdefghijklmnopqrstuvwxyzab" },
/*370*/ { "[7238]EMabcdefghijklmnopqrstuvwxyzab", 0, "7238EMabcdefghijklmnopqrstuvwxyzab" },
/*371*/ { "[7239]EMabcdefghijklmnopqrstuvwxyzab", 0, "7239EMabcdefghijklmnopqrstuvwxyzab" },
/*372*/ { "[7239]E", ZINT_ERROR_INVALID_DATA, "" },
/*373*/ { "[7240]abcdefghijklmnopqrst", 0, "7240abcdefghijklmnopqrst" },
/*374*/ { "[7240]abcdefghijklmnopqrstu", ZINT_ERROR_INVALID_DATA, "" },
/*375*/ { "[7241]1234", ZINT_ERROR_INVALID_DATA, "" },
/*376*/ { "[7249]1234", ZINT_ERROR_INVALID_DATA, "" },
/*377*/ { "[7250]1234", ZINT_ERROR_INVALID_DATA, "" },
/*378*/ { "[7299]1234", ZINT_ERROR_INVALID_DATA, "" },
/*379*/ { "[73]1234", ZINT_ERROR_INVALID_DATA, "" },
/*380*/ { "[7300]1234", ZINT_ERROR_INVALID_DATA, "" },
/*381*/ { "[74]1234", ZINT_ERROR_INVALID_DATA, "" },
/*382*/ { "[7400]1234", ZINT_ERROR_INVALID_DATA, "" },
/*383*/ { "[79]1234", ZINT_ERROR_INVALID_DATA, "" },
/*384*/ { "[7900]1234", ZINT_ERROR_INVALID_DATA, "" },
/*385*/ { "[7999]1234", ZINT_ERROR_INVALID_DATA, "" },
/*386*/ { "[80]1234", ZINT_ERROR_INVALID_DATA, "" },
/*387*/ { "[800]1234", ZINT_ERROR_INVALID_DATA, "" },
/*388*/ { "[8000]1234", ZINT_ERROR_INVALID_DATA, "" },
/*389*/ { "[8001]12345678901234", 0, "800112345678901234" },
/*390*/ { "[8001]1234123456789012345", ZINT_ERROR_INVALID_DATA, "" },
/*391*/ { "[8002]abcdefghijklmnopqrst", 0, "8002abcdefghijklmnopqrst" },
/*392*/ { "[8002]abcdefghijklmnopqrstuv", ZINT_ERROR_INVALID_DATA, "" },
/*393*/ { "[8003]01234567890123abcdefghijklmnop", 0, "800301234567890123abcdefghijklmnop" },
/*394*/ { "[8004]abcdefghijklmnopqrstuvwxyz1234", 0, "8004abcdefghijklmnopqrstuvwxyz1234" },
/*395*/ { "[8004]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/*396*/ { "[8005]123456", 0, "8005123456" },
/*397*/ { "[8005]12345", ZINT_ERROR_INVALID_DATA, "" },
/*398*/ { "[8005]1234567", ZINT_ERROR_INVALID_DATA, "" },
/*399*/ { "[8006]123456789012341212", 0, "8006123456789012341212" },
/*400*/ { "[8006]12345678901234121", ZINT_ERROR_INVALID_DATA, "" },
/*401*/ { "[8006]1234567890123412123", ZINT_ERROR_INVALID_DATA, "" },
/*402*/ { "[8007]abcdefghijklmnopqrstuvwxyz12345678", 0, "8007abcdefghijklmnopqrstuvwxyz12345678" },
/*403*/ { "[8007]abcdefghijklmnopqrstuvwxyz123456789", ZINT_ERROR_INVALID_DATA, "" },
/*404*/ { "[8008]123456121212", 0, "8008123456121212" },
/*405*/ { "[8008]1234561212", 0, "80081234561212" },
/*406*/ { "[8008]12345612", 0, "800812345612" },
/*407*/ { "[8008]1234561", ZINT_ERROR_INVALID_DATA, "" },
/*408*/ { "[8008]123456121", ZINT_ERROR_INVALID_DATA, "" },
/*409*/ { "[8008]12345612121", ZINT_ERROR_INVALID_DATA, "" },
/*410*/ { "[8008]1234561212123", ZINT_ERROR_INVALID_DATA, "" },
/*411*/ { "[8009]12345678901234567890123456789012345678901234567890", 0, "800912345678901234567890123456789012345678901234567890" },
/*412*/ { "[8009]123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*413*/ { "[8010]1234abcdefghijklmnopqrstuvwxyz1", ZINT_ERROR_INVALID_DATA, "" },
/*414*/ { "[8011]123456789012", 0, "8011123456789012" },
/*415*/ { "[8011]1234567890123", ZINT_ERROR_INVALID_DATA, "" },
/*416*/ { "[8012]abcdefghijklmnopqrst", 0, "8012abcdefghijklmnopqrst" },
/*417*/ { "[8012]abcdefghijklmnopqrstuv", ZINT_ERROR_INVALID_DATA, "" },
/*418*/ { "[8013]1234abcdefghijklmnopqrstuvwxyz", 0, "80131234abcdefghijklmnopqrstuvwxyz" },
/*419*/ { "[8013]1234abcdefghijklmnopqrstuvwxyz1", ZINT_ERROR_INVALID_DATA, "" },
/*420*/ { "[8014]1234", ZINT_ERROR_INVALID_DATA, "" },
/*421*/ { "[8016]1234", ZINT_ERROR_INVALID_DATA, "" },
/*422*/ { "[8017]313131313131313139", 0, "8017313131313131313139" },
/*423*/ { "[8017]31313131313131313", ZINT_ERROR_INVALID_DATA, "" },
/*424*/ { "[8017]3131313131313131390", ZINT_ERROR_INVALID_DATA, "" },
/*425*/ { "[8018]313131313131313139", 0, "8018313131313131313139" },
/*426*/ { "[8018]31313131313131313", ZINT_ERROR_INVALID_DATA, "" },
/*427*/ { "[8018]3131313131313131390", ZINT_ERROR_INVALID_DATA, "" },
/*428*/ { "[8019]1234567890", 0, "80191234567890" },
/*429*/ { "[8019]12345678901", ZINT_ERROR_INVALID_DATA, "" },
/*430*/ { "[8020]abcdefghijklmnopqrstuvwxy", 0, "8020abcdefghijklmnopqrstuvwxy" },
/*431*/ { "[8020]abcdefghijklmnopqrstuvwxyz", ZINT_ERROR_INVALID_DATA, "" },
/*432*/ { "[8021]1234", ZINT_ERROR_INVALID_DATA, "" },
/*433*/ { "[8025]1234", ZINT_ERROR_INVALID_DATA, "" },
/*434*/ { "[8026]123456789012341212", 0, "8026123456789012341212" },
/*435*/ { "[8026]1234567890123451212", ZINT_ERROR_INVALID_DATA, "" },
/*436*/ { "[8026]12345678901234512", ZINT_ERROR_INVALID_DATA, "" },
/*437*/ { "[8027]1234", ZINT_ERROR_INVALID_DATA, "" },
/*438*/ { "[8030]1234", ZINT_ERROR_INVALID_DATA, "" },
/*439*/ { "[8040]1234", ZINT_ERROR_INVALID_DATA, "" },
/*440*/ { "[8090]1234", ZINT_ERROR_INVALID_DATA, "" },
/*441*/ { "[8099]1234", ZINT_ERROR_INVALID_DATA, "" },
/*442*/ { "[81]1234", ZINT_ERROR_INVALID_DATA, "" },
/*443*/ { "[8100]1234", ZINT_ERROR_INVALID_DATA, "" },
/*444*/ { "[8109]1234", ZINT_ERROR_INVALID_DATA, "" },
/*445*/ { "[8110]1234567890123456789012345678901234567890123456789012345678901234567890", 0, "81101234567890123456789012345678901234567890123456789012345678901234567890" },
/*446*/ { "[8110]12345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*447*/ { "[8111]1234", 0, "81111234" },
/*448*/ { "[8111]12345", ZINT_ERROR_INVALID_DATA, "" },
/*449*/ { "[8111]123", ZINT_ERROR_INVALID_DATA, "" },
/*450*/ { "[8112]1234567890123456789012345678901234567890123456789012345678901234567890", 0, "81121234567890123456789012345678901234567890123456789012345678901234567890" },
/*451*/ { "[8112]12345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*452*/ { "[8113]1234", ZINT_ERROR_INVALID_DATA, "" },
/*453*/ { "[8120]1234", ZINT_ERROR_INVALID_DATA, "" },
/*454*/ { "[8190]1234", ZINT_ERROR_INVALID_DATA, "" },
/*455*/ { "[8199]1234", ZINT_ERROR_INVALID_DATA, "" },
/*456*/ { "[82]1234", ZINT_ERROR_INVALID_DATA, "" },
/*457*/ { "[8200]1234567890123456789012345678901234567890123456789012345678901234567890", 0, "82001234567890123456789012345678901234567890123456789012345678901234567890" },
/*458*/ { "[8201]1234", ZINT_ERROR_INVALID_DATA, "" },
/*459*/ { "[8210]1234", ZINT_ERROR_INVALID_DATA, "" },
/*460*/ { "[8290]1234", ZINT_ERROR_INVALID_DATA, "" },
/*461*/ { "[8299]1234", ZINT_ERROR_INVALID_DATA, "" },
/*462*/ { "[83]1234", ZINT_ERROR_INVALID_DATA, "" },
/*463*/ { "[8300]1234", ZINT_ERROR_INVALID_DATA, "" },
/*464*/ { "[89]1234", ZINT_ERROR_INVALID_DATA, "" },
/*465*/ { "[8900]1234", ZINT_ERROR_INVALID_DATA, "" },
/*466*/ { "[90]abcdefghijklmnopqrstuvwxyz1234", 0, "90abcdefghijklmnopqrstuvwxyz1234" },
/*467*/ { "[9000]1234", ZINT_ERROR_INVALID_DATA, "" },
/*468*/ { "[90]abcdefghijklmnopqrstuvwxyz12345", ZINT_ERROR_INVALID_DATA, "" },
/*469*/ { "[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "91123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*470*/ { "[91]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*471*/ { "[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "92123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*472*/ { "[92]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*473*/ { "[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "93123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*474*/ { "[93]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*475*/ { "[94]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "94123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*476*/ { "[94]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*477*/ { "[98]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "98123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*478*/ { "[98]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*479*/ { "[99]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", 0, "99123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" },
/*480*/ { "[99]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901", ZINT_ERROR_INVALID_DATA, "" },
/*481*/ { "[9900]1234", ZINT_ERROR_INVALID_DATA, "" },
/*482*/ { "[9999]1234", ZINT_ERROR_INVALID_DATA, "" },
/*483*/ { "[01]12345678901234[7006]200101", 0, "01123456789012347006200101" },
/*484*/ { "[3900]1234567890[01]12345678901234", 0, "39001234567890[0112345678901234" },
/*485*/ { "[253]12345678901234[3901]12345678901234[20]12", 0, "25312345678901234[390112345678901234[2012" },
/*486*/ { "[253]12345678901234[01]12345678901234[3901]12345678901234[20]12", 0, "25312345678901234[0112345678901234390112345678901234[2012" },
};
int data_size = sizeof(data) / sizeof(struct item);
char reduced[1024];
for (int i = 0; i < data_size; i++) {
if (index != -1 && i != index) continue;
struct zint_symbol *symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
int length = strlen(data[i].data);
ret = gs1_verify(symbol, data[i].data, length, reduced);
assert_equal(ret, data[i].ret, "i:%d ret %d != %d (length %d \"%s\") %s\n", i, ret, data[i].ret, length, data[i].data, symbol->errtxt);
if (ret == 0) {
assert_zero(strcmp(reduced, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, reduced, data[i].expected);
}
ZBarcode_Delete(symbol);
}
testFinish();
}
static void test_input_mode(int index, int debug) {
testStart("");
int ret;
struct item {
int symbology;
unsigned char *data;
unsigned char *composite;
int input_mode;
int output_options;
int ret;
int compare_previous;
};
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
struct item data[] = {
/* 0*/ { BARCODE_AZTEC, "[01]12345678901234", "", GS1_MODE, -1 , 0, 0 },
/* 1*/ { BARCODE_AZTEC, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 2*/ { BARCODE_AZTEC, "[01]12345678901234", "", GS1_MODE, READER_INIT, ZINT_ERROR_INVALID_OPTION, 0 },
/* 3*/ { BARCODE_AZTEC, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, READER_INIT, ZINT_ERROR_INVALID_OPTION, 0 },
/* 4*/ { BARCODE_AZTEC, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 5*/ { BARCODE_AZTEC, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 6*/ { BARCODE_CODABLOCKF, "[01]12345678901234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_OPTION, 0 },
/* 7*/ { BARCODE_CODABLOCKF, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_OPTION, 0 },
/* 8*/ { BARCODE_CODABLOCKF, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_OPTION, 0 },
/* 9*/ { BARCODE_CODABLOCKF, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_OPTION, 0 },
/* 10*/ { BARCODE_CODEONE, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 11*/ { BARCODE_CODEONE, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 12*/ { BARCODE_CODEONE, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 13*/ { BARCODE_CODEONE, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 14*/ { BARCODE_CODE16K, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 15*/ { BARCODE_CODE16K, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 16*/ { BARCODE_CODE16K, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 17*/ { BARCODE_CODE16K, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 18*/ { BARCODE_CODE49, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 19*/ { BARCODE_CODE49, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 20*/ { BARCODE_CODE49, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 21*/ { BARCODE_CODE49, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 22*/ { BARCODE_DATAMATRIX, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 23*/ { BARCODE_DATAMATRIX, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 24*/ { BARCODE_DATAMATRIX, "[01]12345678901234", "", GS1_MODE, READER_INIT, ZINT_ERROR_INVALID_OPTION, 0 },
/* 25*/ { BARCODE_DATAMATRIX, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, READER_INIT, ZINT_ERROR_INVALID_OPTION, 0 },
/* 26*/ { BARCODE_DATAMATRIX, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 27*/ { BARCODE_DATAMATRIX, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 28*/ { BARCODE_DOTCODE, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 29*/ { BARCODE_DOTCODE, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 30*/ { BARCODE_DOTCODE, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 31*/ { BARCODE_DOTCODE, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 32*/ { BARCODE_QRCODE, "[01]12345678901234", "", GS1_MODE, -1, 0, 0 },
/* 33*/ { BARCODE_QRCODE, "[01]12345678901234", "", GS1_MODE | ESCAPE_MODE, -1, 0, 1 },
/* 34*/ { BARCODE_QRCODE, "1234", "", GS1_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
/* 35*/ { BARCODE_QRCODE, "1234", "", GS1_MODE | ESCAPE_MODE, -1, ZINT_ERROR_INVALID_DATA, 0 },
};
int data_size = sizeof(data) / sizeof(struct item);
char *text;
struct zint_symbol previous_symbol;
for (int i = 0; i < data_size; i++) {
if (index != -1 && i != index) continue;
struct zint_symbol *symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n");
symbol->symbology = data[i].symbology;
symbol->input_mode = data[i].input_mode;
if (data[i].output_options != -1) {
symbol->output_options = data[i].output_options;
}
symbol->debug |= debug;
if (strlen(data[i].composite)) {
text = data[i].composite;
strcpy(symbol->primary, data[i].data);
} else {
text = data[i].data;
}
int length = strlen(text);
ret = ZBarcode_Encode(symbol, text, length);
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d %s\n", i, ret, data[i].ret, symbol->errtxt);
if (index == -1 && data[i].compare_previous) {
ret = testUtilSymbolCmp(symbol, &previous_symbol);
assert_zero(ret, "i:%d testUtilSymbolCmp ret %d != 0\n", i, ret);
}
memcpy(&previous_symbol, symbol, sizeof(previous_symbol));
ZBarcode_Delete(symbol);
}
testFinish();
}
int main(int argc, char *argv[]) {
testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */
{ "test_gs1_reduce", test_gs1_reduce, 1, 1, 1 },
{ "test_hrt", test_hrt, 1, 0, 1 },
{ "test_gs1_verify", test_gs1_verify, 1, 0, 0 },
{ "test_input_mode", test_input_mode, 1, 0, 1 },
};
testRun(argc, argv, funcs, ARRAY_SIZE(funcs));
testReport();
return 0;
}