⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_qrinput.c

📁 二维码QR的编码实现。C语言实现。希望各位一起学习。一起做条码开发
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>#include <string.h>#include <errno.h>#include "common.h"#include "../qrinput.h"#include "../qrencode_inner.h"#include "../split.h"void test_encodeKanji(void){	QRinput *stream;	unsigned char str[4]= {0x93, 0x5f,0xe4, 0xaa};	unsigned char *buf;	char correct[] = "10000000001001101100111111101010101010";	BitStream *bstream;	testStart("Encoding kanji stream.");	buf = (unsigned char *)malloc(4);	memcpy(buf, str, 4);	stream = QRinput_new();	QRinput_append(stream, QR_MODE_KANJI, 4, buf);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);	free(buf);}void test_encode8(void){	QRinput *stream;	char str[] = "AC-42";	char correct[] = "0100000001010100000101000011001011010011010000110010";	BitStream *bstream;	testStart("Encoding 8bit stream.");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_8, 5, (unsigned char *)str);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);}void test_encode8_versionup(void){	QRinput *stream;	BitStream *bstream;	char *str;	int version;	testStart("Encoding 8bit stream. (auto-version up test)");	str = (char *)malloc(2900);	memset(str, 0xff, 2900);	stream = QRinput_new();	QRinput_append(stream, QR_MODE_8, 2900, (unsigned char *)str);	bstream = QRinput_mergeBitStream(stream);	version = QRinput_getVersion(stream);	assert_equal(version, 40, "Version is %d (40 expected).\n", version);	testFinish();	QRinput_free(stream);	BitStream_free(bstream);	free(str);}void test_encodeAn(void){	QRinput *stream;	char str[] = "AC-42";	char correct[] = "00100000001010011100111011100111001000010";	BitStream *bstream;	testStart("Encoding alphabet-numeric stream.");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_AN, 5, (unsigned char *)str);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeAn2(void){	QRinput *stream;	char str[] = "!,;$%";	int ret;	testStart("Encoding INVALID alphabet-numeric stream.");	stream = QRinput_new();	ret = QRinput_append(stream, QR_MODE_AN, 5, (unsigned char *)str);	testEnd(!ret);	QRinput_free(stream);}void test_encodeNumeric(void){	QRinput *stream;	char num[9] = "01234567";	char correct[] = "00010000001000000000110001010110011000011";	BitStream *bstream;	testStart("Encoding numeric stream. (8 digits)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_NUM, 8, (unsigned char *)num);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeNumeric_versionup(void){	QRinput *stream;	BitStream *bstream;	char *str;	int version;	testStart("Encoding numeric stream. (auto-version up test)");	str = (char *)malloc(1050);	memset(str, '1', 1050);	stream = QRinput_new2(0, QR_ECLEVEL_L);	QRinput_append(stream, QR_MODE_NUM, 1050, (unsigned char *)str);	bstream = QRinput_mergeBitStream(stream);	version = QRinput_getVersion(stream);	assert_equal(version, 14, "Version is %d (14 expected).", version);	testFinish();	QRinput_free(stream);	BitStream_free(bstream);	free(str);}void test_encodeNumericPadded(void){	QRinput *stream;	char num[9] = "01234567";	char correct[] = "000100000010000000001100010101100110000110000000";	BitStream *bstream;	int flag;	testStart("Encoding numeric stream. (8 digits)(padded)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_NUM, 8, (unsigned char *)num);	bstream = QRinput_getBitStream(stream);	flag = strncmp(correct, bstream->data, 48);	if(strlen(bstream->data) != 19 * 8)		flag |= 0x80;	testEnd(flag);	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeNumericPadded2(void){	QRinput *stream;	char num[8] = "0123456";	char correct[] = "000100000001110000001100010101100101100000000000";	BitStream *bstream;	int flag;	testStart("Encoding numeric stream. (7 digits)(padded)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_NUM, 7, (unsigned char *)num);	bstream = QRinput_getBitStream(stream);	flag = strncmp(correct, bstream->data, 48);	if(strlen(bstream->data) != 19 * 8)		flag |= 0x80;	testEnd(flag);	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeNumeric2(void){	QRinput *stream;	char num[] = "0123456789012345";	char correct[] = "00010000010000000000110001010110011010100110111000010100111010100101";	BitStream *bstream;	testStart("Encoding numeric stream. (16 digits)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_NUM, 16, (unsigned char *)num);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeNumeric3(void){	QRinput *stream;	char num[9] = "0123456";	char correct[] = "0001""0000000111""0000001100""0101011001""0110";	BitStream *bstream;	testStart("Encoding numeric stream. (7 digits)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_NUM, 7, (unsigned char *)num);	bstream = QRinput_mergeBitStream(stream);	printf("%s\n", correct);	printf("%s\n", bstream->data);	testEnd(strcmp(correct, bstream->data));	QRinput_free(stream);	BitStream_free(bstream);}void test_encodeTooLong(void){	QRinput *stream;	unsigned char *data;	BitStream *bstream;	data = (unsigned char *)malloc(4297);	memset(data, 'A', 4297);	testStart("Encoding long string. (4297 bytes of alphanumeric)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_AN, 4297, data);	bstream = QRinput_mergeBitStream(stream);	testEndExp(bstream == NULL);	QRinput_free(stream);	if(bstream != NULL) {		BitStream_free(bstream);	}	free(data);}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(strlen(bstream->data) == 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(strlen(bstream->data) == 140);	QRinput_free(input);	BitStream_free(bstream);}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_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(strcmp(correct, bstream->data), "bitstream is wrong.");	testFinish();	QRinput_free(stream);	BitStream_free(bstream);}void test_insertStructuredAppendHeader_error(void){	QRinput *stream;	int ret;	testStart("Insert a structured-append header (errors expected)");	stream = QRinput_new();	QRinput_append(stream, QR_MODE_8, 1, (unsigned char *)"A");	ret = QRinput_insertStructuredAppendHeader(stream, 17, 1, 0xa5);	assert_equal(-1, ret, "QRinput_insertStructuredAppendHeader() returns 0.");	assert_equal(EINVAL, errno, "errno is not set correctly (%d returned).", errno);	ret = QRinput_insertStructuredAppendHeader(stream, 16, 17, 0xa5);	assert_equal(-1, ret, "QRinput_insertStructuredAppendHeader() returns 0.");	assert_equal(EINVAL, errno, "errno is not set correctly (%d returned).", errno);	ret = QRinput_insertStructuredAppendHeader(stream, 16, 0, 0xa5);	assert_equal(-1, ret, "QRinput_insertStructuredAppendHeader() returns 0.");	assert_equal(EINVAL, errno, "errno is not set correctly (%d returned).", errno);	testFinish();	QRinput_free(stream);}void test_struct_insertStructuredAppendHeaders(void){	QRinput *input;	QRinput_Struct *s;	QRinput_InputList *p;	int i;	testStart("Insert structured-append headers to a QRinput_Struct.");	s = QRinput_Struct_new();	for(i=0; i<10; i++) {		input = QRinput_new();		QRinput_append(input, QR_MODE_8, 1, (unsigned char *)"A");		QRinput_Struct_appendInput(s, input);	}	QRinput_Struct_insertStructuredAppendHeaders(s);	p = s->head;	i = 1;	while(p != NULL) {		assert_equal(p->input->head->mode, QR_MODE_STRUCTURE, "a structured-append header is not inserted.");		assert_equal(p->input->head->data[0], 10, "size of the structured-header is wrong: #%d, %d should be %d\n", i, p->input->head->data[0], 10);		assert_equal(p->input->head->data[1], i, "index of the structured-header is wrong: #%d, %d should be %d\n", i, p->input->head->data[1], i);		assert_equal(p->input->head->data[2], 0, "parity of the structured-header is wrong: #%d\n", i);		p = p->next;		i++;	}	testFinish();	QRinput_Struct_free(s);}static int check_lengthOfCode(QRencodeMode mode, char *data, int size, int version){	QRinput *input;	BitStream *b;	int bits;	int bytes;	input = QRinput_new();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -