2020-05-22 05:22:28 +12:00
/*
libzint - the open source barcode library
2024-09-18 14:40:45 +12:00
Copyright ( C ) 2020 - 2024 Robin Stuart < rstuart114 @ gmail . com >
2020-05-22 05:22:28 +12:00
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 .
*/
2022-09-13 06:26:04 +12:00
/* SPDX-License-Identifier: BSD-3-Clause */
2020-05-22 05:22:28 +12:00
# include "testcommon.h"
2022-09-13 06:26:04 +12:00
static void test_large ( const testCtx * const p_ctx ) {
int debug = p_ctx - > debug ;
2020-05-22 05:22:28 +12:00
struct item {
2020-10-04 10:51:08 +13:00
char * pattern ;
2020-05-22 05:22:28 +12:00
int length ;
int ret ;
int expected_rows ;
int expected_width ;
2024-10-28 10:33:33 +13:00
char * expected_errtxt ;
2020-05-22 05:22:28 +12:00
} ;
2022-09-13 06:26:04 +12:00
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
2024-10-28 10:33:33 +13:00
static const struct item data [ ] = {
/* 0*/ { " A " , 49 , 0 , 8 , 70 , " " } , /* ANSI/AIM BC6-2000 Table 1 */
/* 1*/ { " A " , 50 , ZINT_ERROR_TOO_LONG , - 1 , - 1 , " Error 432: Input too long, requires 50 codewords (maximum 49) " } ,
/* 2*/ { " 0 " , 81 , 0 , 8 , 70 , " " } , /* ANSI/AIM BC6-2000 Table 1 */
/* 3*/ { " 0 " , 82 , ZINT_ERROR_TOO_LONG , - 1 , - 1 , " Error 430: Input length 82 too long (maximum 81) " } ,
2020-05-22 05:22:28 +12:00
} ;
2024-10-28 10:33:33 +13:00
const int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , length , ret ;
2024-10-28 10:33:33 +13:00
struct zint_symbol * symbol = NULL ;
2020-05-22 05:22:28 +12:00
char data_buf [ 4096 ] ;
2024-10-28 10:33:33 +13:00
testStartSymbol ( " test_large " , & symbol ) ;
2021-06-24 02:00:49 +12:00
for ( i = 0 ; i < data_size ; i + + ) {
2020-05-22 05:22:28 +12:00
2022-09-13 06:26:04 +12:00
if ( testContinue ( p_ctx , i ) ) continue ;
2020-05-22 05:22:28 +12:00
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-05-22 05:22:28 +12:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
testUtilStrCpyRepeat ( data_buf , data [ i ] . pattern , data [ i ] . length ) ;
assert_equal ( data [ i ] . length , ( int ) strlen ( data_buf ) , " i:%d length %d != strlen(data_buf) %d \n " , i , data [ i ] . length , ( int ) strlen ( data_buf ) ) ;
2021-06-24 02:00:49 +12:00
length = testUtilSetSymbol ( symbol , BARCODE_CODE49 , - 1 /*input_mode*/ , - 1 /*eci*/ , - 1 /*option_1*/ , - 1 , - 1 , - 1 /*output_options*/ , data_buf , data [ i ] . length , debug ) ;
2020-05-22 05:22:28 +12:00
2020-10-04 10:51:08 +13:00
ret = ZBarcode_Encode ( symbol , ( unsigned char * ) data_buf , length ) ;
2020-05-22 05:22:28 +12:00
assert_equal ( ret , data [ i ] . ret , " i:%d ZBarcode_Encode ret %d != %d (%s) \n " , i , ret , data [ i ] . ret , symbol - > errtxt ) ;
2024-10-28 10:33:33 +13:00
assert_equal ( symbol - > errtxt [ 0 ] = = ' \0 ' , ret = = 0 , " i:%d symbol->errtxt not %s (%s) \n " , i , ret ? " set " : " empty " , symbol - > errtxt ) ;
assert_zero ( strcmp ( symbol - > errtxt , data [ i ] . expected_errtxt ) , " i:%d strcmp(%s, %s) != 0 \n " , i , symbol - > errtxt , data [ i ] . expected_errtxt ) ;
2020-05-22 05:22:28 +12:00
2021-02-23 13:01:15 +13:00
if ( ret < ZINT_ERROR ) {
2020-05-22 05:22:28 +12:00
assert_equal ( symbol - > rows , data [ i ] . expected_rows , " i:%d symbol->rows %d != %d \n " , i , symbol - > rows , data [ i ] . expected_rows ) ;
assert_equal ( symbol - > width , data [ i ] . expected_width , " i:%d symbol->width %d != %d \n " , i , symbol - > width , data [ i ] . expected_width ) ;
}
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
2022-09-13 06:26:04 +12:00
static void test_input ( const testCtx * const p_ctx ) {
int debug = p_ctx - > debug ;
2020-05-22 05:22:28 +12:00
struct item {
int input_mode ;
2021-11-21 00:32:30 +13:00
int option_1 ;
2020-10-04 10:51:08 +13:00
char * data ;
2020-05-22 05:22:28 +12:00
int length ;
int ret ;
int expected_rows ;
int expected_width ;
char * expected ;
char * comment ;
} ;
2022-09-13 06:26:04 +12:00
/*
NUL U + 0000 , S1 SP ( 39 )
US U + 001F ( \ 037 , 31 ) , S1 5
*/
2024-10-28 10:33:33 +13:00
static const struct item data [ ] = {
/* 0*/ { UNICODE_MODE , - 1 , " é " , - 1 , ZINT_ERROR_INVALID_DATA , 0 , 0 , " Error 431: Invalid character at position 1 in input, extended ASCII not allowed " , " ASCII only " } ,
2021-11-21 00:32:30 +13:00
/* 1*/ { UNICODE_MODE , - 1 , " EXAMPLE 2 " , - 1 , 0 , 2 , 70 , " (16) 14 33 10 22 25 21 14 41 38 2 35 14 18 13 0 22 " , " 2.3.7 Symbol Example " } ,
/* 2*/ { UNICODE_MODE , - 1 , " 12345 " , - 1 , 0 , 2 , 70 , " (16) 5 17 9 48 48 48 48 27 48 48 13 23 0 13 2 0 " , " 2.3 Example 1: Numeric Encodation (Start 2, Numeric) " } ,
/* 3*/ { UNICODE_MODE , - 1 , " 123456 " , - 1 , 0 , 2 , 70 , " (16) 5 17 9 6 48 48 48 34 48 48 36 9 23 41 2 11 " , " 2.3 Example 1: Numeric Encodation " } ,
/* 4*/ { UNICODE_MODE , - 1 , " 12345678 " , - 1 , 0 , 2 , 70 , " (16) 5 17 9 14 6 48 48 0 48 48 25 42 2 17 2 37 " , " 2.3 Example 1: Numeric Encodation " } ,
/* 5*/ { UNICODE_MODE , - 1 , " 123456789 " , - 1 , 0 , 2 , 70 , " (16) 5 17 9 46 16 37 48 31 48 48 7 26 9 39 2 32 " , " 2.3 Example 1: Numeric Encodation " } ,
/* 6*/ { UNICODE_MODE , - 1 , " 1234567 " , - 1 , 0 , 2 , 70 , " (16) 43 45 2 11 39 48 48 40 48 48 33 36 38 6 2 15 " , " 2.3 Example 1: Numeric Encodation " } ,
/* 7*/ { UNICODE_MODE , - 1 , " \037 " , - 1 , 0 , 2 , 70 , " (16) 5 48 48 48 48 48 48 48 48 48 4 33 13 15 4 18 " , " US (Start 4, Alphanumeric S1) " } ,
/* 8*/ { UNICODE_MODE , - 1 , " \000 \037 " , 2 , 0 , 2 , 70 , " (16) 38 43 5 48 48 48 48 33 48 48 45 7 38 43 4 37 " , " NUL S1 US (Start 4, Alphanumeric S1) " } ,
/* 9*/ { UNICODE_MODE , - 1 , " a \000 " , 2 , 0 , 2 , 70 , " (16) 10 43 38 48 48 48 48 38 48 48 32 33 14 15 5 48 " , " a S1 NUL (Start 5, Alphanumeric S2) " } ,
/* 10*/ { UNICODE_MODE , - 1 , " ab " , - 1 , 0 , 2 , 70 , " (16) 10 44 11 48 48 48 48 12 48 48 27 39 42 0 5 13 " , " a S2 b (Start 5, Alphanumeric S2) " } ,
/* 11*/ { UNICODE_MODE , - 1 , " \000 A \000 a \000 " , 5 , 0 , 2 , 70 , " (16) 38 10 43 38 44 10 43 30 38 48 25 23 38 32 4 12 " , " NUL A S1 NUL S2 a S1 (C18 30) NUL (Start 4, Alphanumeric S1) " } ,
/* 12*/ { UNICODE_MODE , - 1 , " 1234 \037 aA12345A " , - 1 , 0 , 3 , 70 , " (24) 1 2 3 4 43 5 44 4 10 10 48 5 17 9 48 0 10 48 19 2 13 32 7 33 " , " 1 2 3 4 S1 US S2 (C18 4) a A NS 12345 NS (C28 0) A (Start 0, Alpha) " } ,
/* 13*/ { GS1_MODE , - 1 , " [90]12345[91]AB12345 " , - 1 , 0 , 4 , 70 , " (32) 45 48 47 15 4 7 9 28 48 45 9 1 10 11 48 25 5 17 9 48 48 48 48 27 48 48 37 39 26 8 14 " , " FNC1 NS 9012345 (C18 28) NS FNC1 9 1 A B NS (C28 25) 12345 Pad (4) (C38 27) (Start 0, Alpha) " } ,
/* 14*/ { GS1_MODE | GS1PARENS_MODE , - 1 , " (90)12345(91)AB12345 " , - 1 , 0 , 4 , 70 , " (32) 45 48 47 15 4 7 9 28 48 45 9 1 10 11 48 25 5 17 9 48 48 48 48 27 48 48 37 39 26 8 14 " , " FNC1 NS 9012345 (C18 28) NS FNC1 9 1 A B NS (C28 25) 12345 Pad (4) (C38 27) (Start 0, Alpha) " } ,
/* 15*/ { UNICODE_MODE , - 1 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 5 , 70 , " (40) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
2022-11-11 11:13:41 +13:00
/* 16*/ { UNICODE_MODE , 1 , " 1234567890123456789012345678901234567890 " , - 1 , ZINT_ERROR_INVALID_OPTION , - 1 , - 1 , " Error 433: Minimum number of rows out of range (2 to 8) " , " " } ,
/* 17*/ { UNICODE_MODE , 9 , " 1234567890123456789012345678901234567890 " , - 1 , ZINT_ERROR_INVALID_OPTION , - 1 , - 1 , " Error 433: Minimum number of rows out of range (2 to 8) " , " " } ,
2021-11-21 00:32:30 +13:00
/* 18*/ { UNICODE_MODE , 2 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 5 , 70 , " (40) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 19*/ { UNICODE_MODE , 3 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 5 , 70 , " (40) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 20*/ { UNICODE_MODE , 4 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 5 , 70 , " (40) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 21*/ { UNICODE_MODE , 5 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 5 , 70 , " (40) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 22*/ { UNICODE_MODE , 6 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 6 , 70 , " (48) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 23*/ { UNICODE_MODE , 7 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 7 , 70 , " (56) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
/* 24*/ { UNICODE_MODE , 8 , " 1234567890123456789012345678901234567890 " , - 1 , 0 , 8 , 70 , " (64) 5 17 9 29 22 18 5 7 17 9 29 22 18 5 17 19 9 29 22 18 5 17 9 11 29 22 18 48 48 48 48 16 " , " " } ,
2024-09-18 14:40:45 +12:00
/* 25*/ { UNICODE_MODE , - 1 , " ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW " , - 1 , 0 , 8 , 70 , " (64) 10 11 12 13 14 15 16 42 17 18 19 20 21 22 23 42 24 25 26 27 28 29 30 42 31 32 33 34 35 " , " " } ,
2024-10-28 10:33:33 +13:00
/* 26*/ { UNICODE_MODE , - 1 , " ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX " , - 1 , ZINT_ERROR_TOO_LONG , 0 , 0 , " Error 432: Input too long, requires 50 codewords (maximum 49) " , " " } ,
2020-05-22 05:22:28 +12:00
} ;
2024-10-28 10:33:33 +13:00
const int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , length , ret ;
2024-10-28 10:33:33 +13:00
struct zint_symbol * symbol = NULL ;
2020-05-22 05:22:28 +12:00
char escaped [ 1024 ] ;
2022-10-14 01:33:59 +13:00
char cmp_buf [ 8192 ] ;
char cmp_msg [ 1024 ] ;
int do_bwipp = ( debug & ZINT_DEBUG_TEST_BWIPP ) & & testUtilHaveGhostscript ( ) ; /* Only do BWIPP test if asked, too slow otherwise */
2020-05-22 05:22:28 +12:00
2024-10-28 10:33:33 +13:00
testStartSymbol ( " test_input " , & symbol ) ;
2021-06-24 02:00:49 +12:00
for ( i = 0 ; i < data_size ; i + + ) {
2020-05-22 05:22:28 +12:00
2022-09-13 06:26:04 +12:00
if ( testContinue ( p_ctx , i ) ) continue ;
2020-05-22 05:22:28 +12:00
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-05-22 05:22:28 +12:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
2022-09-13 06:26:04 +12:00
symbol - > debug = ZINT_DEBUG_TEST ; /* Needed to get codeword dump in errtxt */
2020-05-22 05:22:28 +12:00
2021-11-21 00:32:30 +13:00
length = testUtilSetSymbol ( symbol , BARCODE_CODE49 , data [ i ] . input_mode , - 1 /*eci*/ , data [ i ] . option_1 , - 1 , - 1 , - 1 /*output_options*/ , data [ i ] . data , data [ i ] . length , debug ) ;
2020-05-22 05:22:28 +12:00
2020-10-04 10:51:08 +13:00
ret = ZBarcode_Encode ( symbol , ( unsigned char * ) data [ i ] . data , length ) ;
2020-05-22 05:22:28 +12:00
assert_equal ( ret , data [ i ] . ret , " i:%d ZBarcode_Encode ret %d != %d (%s) \n " , i , ret , data [ i ] . ret , symbol - > errtxt ) ;
2022-09-13 06:26:04 +12:00
if ( p_ctx - > generate ) {
2021-11-21 00:32:30 +13:00
printf ( " /*%3d*/ { %s, %d, \" %s \" , %d, %s, %d, %d, \" %s \" , \" %s \" }, \n " ,
i , testUtilInputModeName ( data [ i ] . input_mode ) , data [ i ] . option_1 ,
testUtilEscape ( data [ i ] . data , length , escaped , sizeof ( escaped ) ) , data [ i ] . length ,
2020-05-22 05:22:28 +12:00
testUtilErrorName ( data [ i ] . ret ) , symbol - > rows , symbol - > width , symbol - > errtxt , data [ i ] . comment ) ;
} else {
2022-10-14 01:33:59 +13:00
assert_zero ( strcmp ( ( char * ) symbol - > errtxt , data [ i ] . expected ) , " i:%d strcmp(%s, %s) != 0 \n " , i , symbol - > errtxt , data [ i ] . expected ) ;
2021-02-23 13:01:15 +13:00
if ( ret < ZINT_ERROR ) {
2020-05-22 05:22:28 +12:00
assert_equal ( symbol - > rows , data [ i ] . expected_rows , " i:%d symbol->rows %d != %d (%s) \n " , i , symbol - > rows , data [ i ] . expected_rows , data [ i ] . data ) ;
assert_equal ( symbol - > width , data [ i ] . expected_width , " i:%d symbol->width %d != %d (%s) \n " , i , symbol - > width , data [ i ] . expected_width , data [ i ] . data ) ;
2022-10-14 01:33:59 +13:00
if ( do_bwipp & & testUtilCanBwipp ( i , symbol , data [ i ] . option_1 , - 1 , - 1 , debug ) ) {
char modules_dump [ 4096 ] ;
assert_notequal ( testUtilModulesDump ( symbol , modules_dump , sizeof ( modules_dump ) ) , - 1 , " i:%d testUtilModulesDump == -1 \n " , i ) ;
ret = testUtilBwipp ( i , symbol , data [ i ] . option_1 , - 1 , - 1 , data [ i ] . data , length , NULL , cmp_buf , sizeof ( cmp_buf ) , NULL ) ;
assert_zero ( ret , " i:%d %s testUtilBwipp ret %d != 0 \n " , i , testUtilBarcodeName ( symbol - > symbology ) , ret ) ;
ret = testUtilBwippCmp ( symbol , cmp_msg , cmp_buf , modules_dump ) ;
assert_zero ( ret , " i:%d %s testUtilBwippCmp %d != 0 %s \n actual: %s \n expected: %s \n " ,
i , testUtilBarcodeName ( symbol - > symbology ) , ret , cmp_msg , cmp_buf , modules_dump ) ;
}
2020-05-22 05:22:28 +12:00
}
}
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
2022-09-13 06:26:04 +12:00
static void test_encode ( const testCtx * const p_ctx ) {
int debug = p_ctx - > debug ;
2020-05-22 05:22:28 +12:00
struct item {
int input_mode ;
2021-11-21 00:32:30 +13:00
int option_1 ;
2020-10-04 10:51:08 +13:00
char * data ;
2020-05-22 05:22:28 +12:00
int ret ;
int expected_rows ;
int expected_width ;
char * comment ;
char * expected ;
} ;
2024-10-28 10:33:33 +13:00
static const struct item data [ ] = {
2021-11-21 00:32:30 +13:00
/* 0*/ { UNICODE_MODE , - 1 , " MULTIPLE ROWS IN CODE 49 " , 0 , 5 , 70 , " ANSI/AIM BC6-2000 Figure 1 " ,
2020-05-22 05:22:28 +12:00
" 1011111011001011101011100110000110111101011011111010111101000100001111 "
" 1010100001000010001001111000101110100110001111010010001011100011001111 "
" 1011001100000101101101110111000010110010110000111011101011110001101111 "
" 1010011001100100001111010010001100101011101111110011010001001111101111 "
" 1011001111001011101000000101001110111110111010001011010001101111101111 "
} ,
2021-11-21 00:32:30 +13:00
/* 1*/ { UNICODE_MODE , - 1 , " EXAMPLE 2 " , 0 , 2 , 70 , " ANSI/AIM BC6-2000 Figure 3 " ,
2020-05-22 05:22:28 +12:00
" 1011000111011100101111001001000110110011110010100010001111000100101111 "
" 1011000100110010001100010110010000100001101001111010000001001011101111 "
} ,
2021-11-21 00:32:30 +13:00
/* 2*/ { UNICODE_MODE , 3 , " EXAMPLE 2 " , 0 , 3 , 70 , " Min 3 rows " ,
" 1011000111011100101111001001000110110011110010100010001111000100101111 "
" 1011000100110010001010111011111100110011110010111010111011001111101111 "
" 1011001111001011101110011111001010100001000010001010111001111001101111 "
} ,
/* 3*/ { UNICODE_MODE , 8 , " EXAMPLE 2 " , 0 , 8 , 70 , " Min 8 rows " ,
" 1011000111011100101111001001000110110011110010100010001111000100101111 "
" 1011000100110010001010111011111100110011110010111010111011001111101111 "
" 1010101110111111001010111011111100110011110010111011001110110001001111 "
" 1011001111001011101100111100101110101011101111110010111001000001101111 "
" 1010101110111111001100111100101110101011101111110011001110110001001111 "
" 1011001111001011101010111011111100101011101111110011001110110001001111 "
" 1010101110111111001010111011111100101011101111110010111001000001101111 "
" 1011110110100100001010000100010000111010010011111011001000111011001111 "
} ,
2020-05-22 05:22:28 +12:00
} ;
2024-10-28 10:33:33 +13:00
const int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , length , ret ;
2024-10-28 10:33:33 +13:00
struct zint_symbol * symbol = NULL ;
2020-05-22 05:22:28 +12:00
char escaped [ 1024 ] ;
2020-10-01 00:19:12 +13:00
char bwipp_buf [ 8192 ] ;
char bwipp_msg [ 1024 ] ;
2020-05-22 05:22:28 +12:00
2022-09-13 06:26:04 +12:00
int do_bwipp = ( debug & ZINT_DEBUG_TEST_BWIPP ) & & testUtilHaveGhostscript ( ) ; /* Only do BWIPP test if asked, too slow otherwise */
2021-06-24 02:00:49 +12:00
2024-10-28 10:33:33 +13:00
testStartSymbol ( " test_encode " , & symbol ) ;
2021-06-24 02:00:49 +12:00
for ( i = 0 ; i < data_size ; i + + ) {
2020-05-22 05:22:28 +12:00
2022-09-13 06:26:04 +12:00
if ( testContinue ( p_ctx , i ) ) continue ;
2020-05-22 05:22:28 +12:00
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-05-22 05:22:28 +12:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
2021-11-21 00:32:30 +13:00
length = testUtilSetSymbol ( symbol , BARCODE_CODE49 , data [ i ] . input_mode , - 1 /*eci*/ , data [ i ] . option_1 , - 1 , - 1 , - 1 /*output_options*/ , data [ i ] . data , - 1 , debug ) ;
2020-05-22 05:22:28 +12:00
2020-10-04 10:51:08 +13:00
ret = ZBarcode_Encode ( symbol , ( unsigned char * ) data [ i ] . data , length ) ;
2020-05-22 05:22:28 +12:00
assert_equal ( ret , data [ i ] . ret , " i:%d ZBarcode_Encode ret %d != %d (%s) \n " , i , ret , data [ i ] . ret , symbol - > errtxt ) ;
2022-09-13 06:26:04 +12:00
if ( p_ctx - > generate ) {
2021-11-21 00:32:30 +13:00
printf ( " /*%3d*/ { %s, %d, \" %s \" , %s, %d, %d, \" %s \" , \n " ,
i , testUtilInputModeName ( data [ i ] . input_mode ) , data [ i ] . option_1 ,
testUtilEscape ( data [ i ] . data , length , escaped , sizeof ( escaped ) ) ,
2020-05-22 05:22:28 +12:00
testUtilErrorName ( data [ i ] . ret ) , symbol - > rows , symbol - > width , data [ i ] . comment ) ;
2021-02-23 13:01:15 +13:00
testUtilModulesPrint ( symbol , " " , " \n " ) ;
2020-05-22 05:22:28 +12:00
printf ( " }, \n " ) ;
} else {
2021-02-23 13:01:15 +13:00
if ( ret < ZINT_ERROR ) {
2021-06-24 02:00:49 +12:00
int width , row ;
2020-05-22 05:22:28 +12:00
assert_equal ( symbol - > rows , data [ i ] . expected_rows , " i:%d symbol->rows %d != %d (%s) \n " , i , symbol - > rows , data [ i ] . expected_rows , data [ i ] . data ) ;
assert_equal ( symbol - > width , data [ i ] . expected_width , " i:%d symbol->width %d != %d (%s) \n " , i , symbol - > width , data [ i ] . expected_width , data [ i ] . data ) ;
2020-10-01 00:19:12 +13:00
ret = testUtilModulesCmp ( symbol , data [ i ] . expected , & width , & row ) ;
assert_zero ( ret , " i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s) \n " , i , ret , width , row , data [ i ] . data ) ;
2021-11-21 00:32:30 +13:00
if ( do_bwipp & & testUtilCanBwipp ( i , symbol , data [ i ] . option_1 , - 1 , - 1 , debug ) ) {
Add multiple segments support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
GRIDMATRIX, HANXIN, MAXICODE, MICROPDF417, PDF417, QRCODE, RMQR, ULTRA
RMQR: fix ECI encoding (wrong bit length for indicator)
MICROQR: check versions M1 and M2 for allowed characters so as to give
better error messages
DOTCODE: some small optimizations
common.c: add is_chr(), segs_length(), segs_cpy()
CODEONE/CODE128/DOTCODE/GRIDMATRIX/HANXIN/MAXICODE/QRCODE/ULTRA: add
namespace prefixes to static funcs/data
includes: use Z_ prefix, unuse double underscore prefixes (guard defines)
manual.txt: compress some tables using double/treble column sets
2022-05-10 06:50:50 +12:00
ret = testUtilBwipp ( i , symbol , data [ i ] . option_1 , - 1 , - 1 , data [ i ] . data , length , NULL , bwipp_buf , sizeof ( bwipp_buf ) , NULL ) ;
2020-10-01 00:19:12 +13:00
assert_zero ( ret , " i:%d %s testUtilBwipp ret %d != 0 \n " , i , testUtilBarcodeName ( symbol - > 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 \n expected: %s \n " ,
i , testUtilBarcodeName ( symbol - > symbology ) , ret , bwipp_msg , bwipp_buf , data [ i ] . expected ) ;
2020-05-22 05:22:28 +12:00
}
}
}
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
int main ( int argc , char * argv [ ] ) {
2022-09-13 06:26:04 +12:00
testFunction funcs [ ] = { /* name, func */
{ " test_large " , test_large } ,
{ " test_input " , test_input } ,
{ " test_encode " , test_encode } ,
2020-05-22 05:22:28 +12:00
} ;
testRun ( argc , argv , funcs , ARRAY_SIZE ( funcs ) ) ;
testReport ( ) ;
return 0 ;
}
Add multiple segments support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
GRIDMATRIX, HANXIN, MAXICODE, MICROPDF417, PDF417, QRCODE, RMQR, ULTRA
RMQR: fix ECI encoding (wrong bit length for indicator)
MICROQR: check versions M1 and M2 for allowed characters so as to give
better error messages
DOTCODE: some small optimizations
common.c: add is_chr(), segs_length(), segs_cpy()
CODEONE/CODE128/DOTCODE/GRIDMATRIX/HANXIN/MAXICODE/QRCODE/ULTRA: add
namespace prefixes to static funcs/data
includes: use Z_ prefix, unuse double underscore prefixes (guard defines)
manual.txt: compress some tables using double/treble column sets
2022-05-10 06:50:50 +12:00
/* vim: set ts=4 sw=4 et : */