void test_oddBitCalcMQR(void) { /* test issue #25 (odd bits calculation bug) */ /* test pattern contributed by vlad417 */ TestString tests[] = { {"46194", 1, QR_ECLEVEL_L, QR_MODE_8, 1}, {"WBA5Y47YPQQ", 3, QR_ECLEVEL_L, QR_MODE_8, 1} }; QRcode *qrcode; QRdata *qrdata; int i; testStart("Odd bits calculation bug checking (MQR)."); for(i=0; i<_countof(tests); i++) { qrcode = QRcode_encodeStringMQR(tests[i].str, tests[i].version, tests[i].level, tests[i].hint, tests[i].casesensitive); assert_nonnull(qrcode, "Failed to encode: %s\n", tests[i].str); if(qrcode == NULL) continue; qrdata = QRcode_decodeMQR(qrcode); assert_nonnull(qrdata, "Failed to decode.\n"); assert_zero(strcmp((char *)qrdata->data, tests[i].str), "Decoded data (%s) mismatched (%s)\n", (char *)qrdata->data, tests[i].str); if(qrdata != NULL) QRdata_free(qrdata); QRcode_free(qrcode); } testFinish(); }
void test_struct_listop(void) { QRinput_Struct *s; QRinput *inputs[5]; QRinput_InputList *l; int i, ret; testStart("QRinput_Struct list operation test."); s = QRinput_Struct_new(); QRinput_Struct_setParity(s, 10); assert_nonnull(s, "QRinput_Struct_new() failed."); assert_equal(s->parity, 10, "QRinput_Struct_setParity() failed."); for(i=0; i<5; i++) { inputs[i] = QRinput_new(); QRinput_append(inputs[i], QR_MODE_AN, 5, (unsigned char *)"ABCDE"); ret = QRinput_Struct_appendInput(s, inputs[i]); } assert_equal(ret, 5, "QRinput_Struct_appendInput() returns wrong num?"); assert_equal(s->size, 5, "QRiput_Struct.size counts wrong number."); l = s->head; i = 0; while(l != NULL) { assert_equal(l->input, inputs[i], "QRinput_Struct input list order would be wrong?"); l = l->next; i++; } QRinput_Struct_free(s); testFinish(); }
void test_decodeVeryLong(void) { char str[4000]; int i; QRcode *qrcode; QRdata *qrdata; testStart("Test code words (very long string)."); for(i=0; i<3999; i++) { str[i] = decodeAnTable[(int)drand(45)]; } str[3999] = '\0'; qrcode = QRcode_encodeString(str, 0, QR_ECLEVEL_L, QR_MODE_8, 0); qrdata = QRcode_decode(qrcode); assert_nonnull(qrdata, "Failed to decode.\n"); if(qrdata != NULL) { assert_equal(strlen(str), qrdata->size, "Lengths of input/output mismatched.\n"); assert_zero(strncmp(str, (char *)(qrdata->data), qrdata->size), "Decoded data %s is different from the original %s\n", qrdata->data, str); } if(qrdata != NULL) QRdata_free(qrdata); if(qrcode != NULL) QRcode_free(qrcode); testFinish(); }
void test_fillerMQR(void) { unsigned char *frame; int i, j, w, e, length; testStart("Micro QR Code Frame filler test"); for(i=1; i<=MQRSPEC_VERSION_MAX; i++) { length = MQRspec_getDataLengthBit(i, QR_ECLEVEL_L) + MQRspec_getECCLength(i, QR_ECLEVEL_L) * 8; frame = FrameFiller_testMQR(i); if(frame == NULL) { assert_nonnull(frame, "Something wrong in version %d\n", i); } else { w = MQRspec_getWidth(i); e = 0; for(j=0; j<w*w; j++) { if(frame[j] == 0) e++; } assert_zero(e, "Not filled bit is found. (%d,%d)\n", j%w,j/w); if(i & 1) { e = w * 9 + 1; } else { e = w * (w - 1) + 1; } assert_equal(frame[e], (unsigned char)((length - 1) & 127) | 0x80, "Number of cell does not match in version %d.\n", i); free(frame); } } testFinish(); }
void test_encodeECI(void) { QRinput *input; BitStream *bstream; unsigned char str[] = {0xa1, 0xa2, 0xa3, 0xa4, 0xa5}; char *correct = "0111 00001001 0100 00000101 10100001 10100010 10100011 10100100 10100101"; int ret; testStart("Encoding characters with ECI header."); input = QRinput_new(); ret = QRinput_appendECIheader(input, 9); assert_zero(ret, "Valid ECI header rejected.\n"); ret = QRinput_append(input, QR_MODE_8, 5, str); assert_zero(ret, "Failed to append characters.\n"); bstream = BitStream_new(); QRinput_mergeBitStream(input, bstream); assert_nonnull(bstream, "Failed to merge.\n"); if(bstream != NULL) { ret = ncmpBin(correct, bstream, 64); assert_zero(ret, "Encodation of ECI header was invalid.\n"); BitStream_free(bstream); } QRinput_free(input); testFinish(); }
void test_encodeLongData(void) { QRinput *stream; unsigned char data[7090]; int maxlength[4][4] = {{7089,5596,3993,3057}, {4296,3391,2420,1852}, {2953,2331,1663,1273}, {1817*2,1435*2,1024*2, 784*2}}; int i, l, len, ret; QRcode *qrcode; testStart("Encoding long data."); for(i=QR_MODE_NUM; i<=QR_MODE_KANJI; i++) { if(i != QR_MODE_KANJI) { memset(data, '0', maxlength[i][0] + 1); } else { for(l=0; l<=maxlength[i][0]/2+1; l++) { data[l*2] = 0x93; data[l*2+1] = 0x5f; } } for(l=QR_ECLEVEL_L; l<=QR_ECLEVEL_H; l++) { stream = QRinput_new2(0, l); ret = QRinput_append(stream, i, maxlength[i][l], data); assert_zero(ret, "Failed to add %d-byte %s to a QRinput\n", maxlength[i][l], modeStr[i]); qrcode = QRcode_encodeInput(stream); assert_nonnull(qrcode, "(QRcode_encodeInput) failed to encode %d-byte %s in level %d.\n", maxlength[i][l], modeStr[i], l); if(qrcode != NULL) { QRcode_free(qrcode); } QRinput_free(stream); stream = QRinput_new2(0, l); len = maxlength[i][l]; if(i == QR_MODE_KANJI) { len += 2; } else { len += 1; } ret = QRinput_append(stream, i, len, data); if(ret == 0) { qrcode = QRcode_encodeInput(stream); assert_null(qrcode, "(QRcode_encodeInput) incorrectly succeeded to encode %d-byte %s in level %d.\n", len, modeStr[i], l); if(qrcode != NULL) { printf("version: %d\n", qrcode->version); QRcode_free(qrcode); } } QRinput_free(stream); } } testFinish(); }
void test_newWithBits_size0(void) { BitStream *bstream; testStart("New with bits (size = 0)"); bstream = BitStream_newWithBits(0, NULL); assert_equal(bstream->length, 0, "Internal bit length is incorrect.\n"); assert_nonzero(bstream->datasize, "Internal buffer size is incorrect.\n"); assert_nonnull(bstream->data, "Internal buffer not allocated.\n"); testFinish(); }
void test_encodeData(void) { QRcode *qrcode; testStart("Test QRencode_encodeData."); qrcode = QRcode_encodeData(0, NULL, 0, QR_ECLEVEL_H); assert_null(qrcode, "QRcode_encodeData(NULL, 0) returned something.\n"); if(qrcode != NULL) QRcode_free(qrcode); qrcode = QRcode_encodeData(10, (unsigned char*)"test\0\0test", 0, QR_ECLEVEL_H); assert_nonnull(qrcode, "QRcode_encodeData() failed.\n"); if(qrcode != NULL) QRcode_free(qrcode); testFinish(); }
void test_insertStructuredAppendHeader(void) { QRinput *stream; char correct[] = "0011000011111010010101000000000101000001"; BitStream *bstream; int ret; testStart("Insert a structured-append header"); stream = QRinput_new(); QRinput_append(stream, QR_MODE_8, 1, (unsigned char *)"A"); ret = QRinput_insertStructuredAppendHeader(stream, 16, 1, 0xa5); assert_zero(ret, "QRinput_insertStructuredAppendHeader() returns nonzero.\n"); bstream = QRinput_mergeBitStream(stream); assert_nonnull(bstream->data, "Bstream->data is null."); assert_zero(cmpBin(correct, bstream), "bitstream is wrong."); testFinish(); QRinput_free(stream); BitStream_free(bstream); }
void test_decodeLong(void) { char *str = "12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ?????????????"; QRcode *qrcode; QRdata *qrdata; testStart("Test code words (long, splitted)."); qrcode = QRcode_encodeString(str, 0, QR_ECLEVEL_H, QR_MODE_8, 1); qrdata = QRcode_decode(qrcode); assert_nonnull(qrdata, "Failed to decode.\n"); if(qrdata != NULL) { assert_equal(strlen(str), qrdata->size, "Lengths of input/output mismatched.\n"); assert_zero(strncmp(str, (char *)(qrdata->data), qrdata->size), "Decoded data %s is different from the original %s\n", qrdata->data, str); } if(qrdata != NULL) QRdata_free(qrdata); if(qrcode != NULL) QRcode_free(qrcode); testFinish(); }
void test_decodeSimple(void) { char *str = "AC-42"; QRcode *qrcode; QRdata *qrdata; testStart("Test code words."); qrcode = QRcode_encodeString(str, 1, QR_ECLEVEL_H, QR_MODE_8, 1); qrdata = QRcode_decode(qrcode); assert_nonnull(qrdata, "Failed to decode.\n"); if(qrdata != NULL) { assert_equal(strlen(str), qrdata->size, "Lengths of input/output mismatched: %d, expected %d.\n", qrdata->size, (int)strlen(str)); assert_zero(strncmp(str, (char *)(qrdata->data), qrdata->size), "Decoded data %s is different from the original %s\n", qrdata->data, str); } if(qrdata != NULL) QRdata_free(qrdata); if(qrcode != NULL) QRcode_free(qrcode); testFinish(); }
void test_decodeShortMQR(void) { char str[]="55"; QRcode *qrcode; QRdata *qrdata; int i; testStart("Test code words (MQR)."); for(i=0; i<8; i++) { qrcode = QRcode_encodeStringMQR(str, MQRformat[i].version, MQRformat[i].level, QR_MODE_8, 1); qrdata = QRcode_decodeMQR(qrcode); assert_nonnull(qrdata, "Failed to decode.\n"); assert_zero(strcmp((char *)qrdata->data, str), "Decoded data (%s) mismatched (%s)\n", (char *)qrdata->data, str); if(qrdata != NULL) QRdata_free(qrdata); if(qrcode != NULL) QRcode_free(qrcode); } testFinish(); }
void test_mqrraw_new(void) { QRinput *stream; char *num = "01234"; unsigned char datacode[] = {0xa0, 0x62, 0x02}; MQRRawCode *raw; testStart("Test MQRRaw_new()"); stream = QRinput_newMQR(1, QR_ECLEVEL_L); QRinput_append(stream, QR_MODE_NUM, 5, (unsigned char *)num); raw = MQRraw_new(stream); assert_nonnull(raw, "Failed MQRraw_new().\n"); assert_zero(raw->count, "MQRraw.count = %d != 0\n", raw->count); assert_equal(raw->version, 1, "MQRraw.version was not as expected. (%d)\n", raw->version); assert_equal(raw->dataLength, 3, "MQRraw.dataLength was not as expected.\n"); assert_equal(raw->eccLength, 2, "MQRraw.eccLength was not as expected.\n"); assert_zero(memcmp(raw->datacode, datacode, 3), "Datacode doesn't match.\n"); QRinput_free(stream); MQRraw_free(raw); testFinish(); }
void test_qrraw_new(void) { int i; QRinput *stream; char num[9] = "01234567"; QRRawCode *raw; testStart("Test QRRaw_new()"); stream = QRinput_new(); QRinput_setVersion(stream, 10); QRinput_setErrorCorrectionLevel(stream, QR_ECLEVEL_Q); QRinput_append(stream, QR_MODE_NUM, 8, (unsigned char *)num); raw = QRraw_new(stream); assert_nonnull(raw, "Failed QRraw_new().\n"); assert_zero(raw->count, "QRraw.count = %d != 0\n", raw->count); assert_equal(raw->version, 10, "QRraw.version was not as expected. (%d)\n", raw->version); assert_equal(raw->dataLength, 19 * 6 + 20 * 2, "QRraw.dataLength was not as expected.\n"); assert_equal(raw->eccLength, 24 * 8, "QRraw.eccLength was not as expected.\n"); assert_equal(raw->b1, 6, "QRraw.b1 was not as expected.\n"); assert_equal(raw->blocks, 8, "QRraw.blocks was not as expected.\n"); for(i=0; i<raw->b1; i++) { assert_equal(raw->rsblock[i].dataLength, 19, "QRraw.rsblock[].dataLength was not as expected.\n"); } for(i=raw->b1; i<raw->blocks; i++) { assert_equal(raw->rsblock[i].dataLength, 20, "QRraw.rsblock[].dataLength was not as expected.\n"); } for(i=0; i<raw->blocks; i++) { assert_equal(raw->rsblock[i].eccLength, 24, "QRraw.rsblock[].eccLength was not as expected.\n"); } QRinput_free(stream); QRraw_free(raw); testFinish(); }