void test_padding2(void) { QRinput *input; BitStream *bstream; int i, size, ret; char data[] = "0123456789ABCDeF"; char correct[153]; unsigned char c; testStart("Padding bit check. (1 or 2 padding bytes)"); /* 16 byte data (4 bit terminator and 1 byte padding) */ memset(correct, 0, 153); memcpy(correct, "010000010000", 12); for(size=0; size<16; size++) { c = 0x80; for(i=0; i<8; i++) { correct[size * 8 + i + 12] = (data[size]&c)?'1':'0'; c = c >> 1; } } memcpy(correct + 140, "000011101100", 12); input = QRinput_new2(1, QR_ECLEVEL_L); QRinput_append(input, QR_MODE_8, 16, (unsigned char *)data); bstream = BitStream_new(); QRinput_getBitStream(input, bstream); size = BitStream_size(bstream); assert_equal(size, 152, "16byte: # of bit is incorrect (%d != 152).\n", size); ret = ncmpBin(correct, bstream, 152); assert_zero(ret, "Padding bits incorrect.\n"); printBstream(bstream); QRinput_free(input); BitStream_free(bstream); /* 15 byte data (4 bit terminator and 2 byte paddings) */ memcpy(correct, "010000001111", 12); memcpy(correct + 132, "00001110110000010001", 20); input = QRinput_new2(1, QR_ECLEVEL_L); QRinput_append(input, QR_MODE_8, 15, (unsigned char *)data); bstream = BitStream_new(); QRinput_getBitStream(input, bstream); size = BitStream_size(bstream); assert_equal(size, 152, "15byte: # of bit is incorrect (%d != 152).\n", size); ret = ncmpBin(correct, bstream, 152); assert_zero(ret, "Padding bits incorrect.\n"); printBstream(bstream); testFinish(); QRinput_free(input); BitStream_free(bstream); }
void test_size(void) { BitStream *bstream; testStart("size check"); bstream = BitStream_new(); assert_equal(BitStream_size(bstream), 0, "Initialized BitStream is not 0 length"); BitStream_appendNum(bstream, 1, 0); assert_equal(BitStream_size(bstream), 1, "Size incorrect. (first append)"); BitStream_appendNum(bstream, 2, 0); assert_equal(BitStream_size(bstream), 3, "Size incorrect. (second append)"); testFinish(); BitStream_free(bstream); }
void test_padding(void) { QRinput *input; BitStream *bstream; int i, size; char data[] = "0123456789ABCDeFG"; unsigned char c; testStart("Padding bit check. (less than 5 bits)"); input = QRinput_new2(1, QR_ECLEVEL_L); QRinput_append(input, QR_MODE_8, 17, (unsigned char *)data); bstream = BitStream_new(); QRinput_getBitStream(input, bstream); size = BitStream_size(bstream); assert_equal(size, 152, "# of bit is incorrect (%d != 152).\n", size); c = 0; for(i=0; i<4; i++) { c += bstream->data[size - i - 1]; } assert_zero(c, "Padding bits are not zero."); testFinish(); QRinput_free(input); BitStream_free(bstream); }
int encodeURLandCompare(char *url, int expected_length) { QRinput *input; BitStream *bstream; int ret = 0; input = QRinput_new2(0, QR_ECLEVEL_L); Split_splitStringToQRinput(url, input, QR_MODE_8, 1); bstream = BitStream_new(); QRinput_mergeBitStream(input, bstream); int length = BitStream_size(bstream); if(length > expected_length) { printf("The length of the encode stream is longer than expected: %d over %d\n", length, expected_length); printQRinput(input); ret = 1; } else if(length < expected_length) { printf("The length of the encode stream is shorter than expected: %d under %d\n", length, expected_length); printQRinput(input); ret = 1; } QRinput_free(input); BitStream_free(bstream); return ret; }
int inputSize(QRinput *input) { BitStream *bstream; int size; bstream = QRinput_mergeBitStream(input); size = BitStream_size(bstream); BitStream_free(bstream); return size; }
void test_null(void) { BitStream *bstream; testStart("Empty stream"); bstream = BitStream_new(); assert_zero(BitStream_size(bstream), "Size of empty BitStream is not 0.\n"); assert_null(BitStream_toByte(bstream), "BitStream_toByte returned non-NULL.\n"); assert_nothing(BitStream_free(NULL), "Checking BitStream_free(NULL).\n"); testFinish(); BitStream_free(bstream); }
void test_encodeAnNum(void) { QRinput *input; BitStream *bstream; testStart("Bit length check of alpha-numeric stream. (11 + 12)"); input = QRinput_new(); QRinput_append(input, QR_MODE_AN, 11, (unsigned char *)"ABCDEFGHIJK"); QRinput_append(input, QR_MODE_NUM, 12, (unsigned char *)"123456789012"); bstream = QRinput_mergeBitStream(input); testEndExp(BitStream_size(bstream) == 128); QRinput_free(input); BitStream_free(bstream); testStart("Bit length check of alphabet stream. (23)"); input = QRinput_new(); QRinput_append(input, QR_MODE_AN, 23, (unsigned char *)"ABCDEFGHIJK123456789012"); bstream = QRinput_mergeBitStream(input); testEndExp(BitStream_size(bstream) == 140); QRinput_free(input); BitStream_free(bstream); }
void test_split1(void) { QRinput *input; BitStream *stream; testStart("Split test: null string"); input = QRinput_new2(0, QR_ECLEVEL_L); Split_splitStringToQRinput("", input, QR_MODE_8, 0); stream = QRinput_mergeBitStream(input); testEndExp(BitStream_size(stream) == 0); QRinput_free(input); BitStream_free(stream); }
void encodeURLandPrint(char *url) { QRinput *input; BitStream *bstream; input = QRinput_new2(0, QR_ECLEVEL_L); Split_splitStringToQRinput(url, input, QR_MODE_8, 1); bstream = BitStream_new(); QRinput_mergeBitStream(input, bstream); printf("{%d,\"%s\"},\n", BitStream_size(bstream), url); QRinput_free(input); BitStream_free(bstream); }
static int check_lengthOfCode(QRencodeMode mode, char *data, int size, int version) { QRinput *input; BitStream *b; int bits; int bytes; input = QRinput_new(); QRinput_setVersion(input, version); QRinput_append(input, mode, size, (unsigned char *)data); b = QRinput_mergeBitStream(input); bits = BitStream_size(b); bytes = QRinput_lengthOfCode(mode, version, bits); QRinput_free(input); BitStream_free(b); return bytes; }
unsigned char *BitStream_toByte(BitStream *bstream) { int i, j, size, bytes, oddbits; unsigned char *data, v; unsigned char *p; size = BitStream_size(bstream); if(size == 0) { return NULL; } data = (unsigned char *)malloc((size + 7) / 8); if(data == NULL) { return NULL; } bytes = size / 8; p = bstream->data; for(i = 0; i < bytes; i++) { v = 0; for(j = 0; j < 8; j++) { v = v << 1; v |= *p; p++; } data[i] = v; } oddbits = size & 7; if(oddbits > 0) { v = 0; for(j = 0; j < oddbits; j++) { v = v << 1; v |= *p; p++; } data[bytes] = v << (8 - oddbits); } return data; }