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

📄 test_monkey.c

📁 二维码QR的编码实现。C语言实现。希望各位一起学习。一起做条码开发
💻 C
字号:
#include <stdio.h>#include <string.h>#include "common.h"#include "../qrinput.h"#include "../qrencode_inner.h"#include "../split.h"#include "../qrspec.h"#define MAX_LENGTH 7091static char data[MAX_LENGTH];static char check[MAX_LENGTH];static const char *AN = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";#define drand(__scale__) ((__scale__) * (double)rand() / ((double)RAND_MAX + 1.0))int fill8bitData(void){	int len, i;	len = 1 + (int)drand((MAX_LENGTH - 2));	for(i=0; i<len; i++) {		data[i] = (unsigned char)drand(255) + 1;	}	data[len] = '\0';	return len;}void test_split_an(int num){	QRinput *input;	QRinput_List *list;	int len, i, ret;	len = 1 + (int)drand((MAX_LENGTH - 2));	for(i=0; i<len; i++) {		data[i] = AN[(int)drand(45)];	}	data[len] = '\0';	input = QRinput_new2(0, QR_ECLEVEL_L);	Split_splitStringToQRinput(data, input, QR_MODE_8, 1);	list = input->head;	i = 0;	while(list != NULL) {		memcpy(check + i, list->data, list->size);		i += list->size;		list = list->next;	}	if(i != len) {		printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);	}	check[i] = '\0';	ret = memcmp(data, check, len);	if(ret != 0) {		printf("#%d: data mismatched.\n", num);		list = input->head;		i = 0;		while(list != NULL) {			ret = memcmp(data + i, list->data, list->size);			printf("wrong chunk:\n");			printf(" position: %d\n", i);			printf(" mode    : %d\n", list->mode);			printf(" size    : %d\n", list->size);			printf(" data    : %.*s\n", list->size, list->data);			i += list->size;			list = list->next;		}		exit(1);	}	QRinput_free(input);}void monkey_split_an(int loop){	int i;	puts("Monkey test: Split_splitStringToQRinput() - AlphaNumeric string.");	srand(0);	for(i=0; i<loop; i++) {		test_split_an(i);	}}void test_split_8(int num){	QRinput *input;	QRinput_List *list;	int len, i, ret;	len = fill8bitData();	input = QRinput_new2(0, QR_ECLEVEL_L);	Split_splitStringToQRinput(data, input, QR_MODE_8, 1);	list = input->head;	i = 0;	while(list != NULL) {		memcpy(check + i, list->data, list->size);		i += list->size;		list = list->next;	}	if(i != len) {		printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);	}	check[i] = '\0';	ret = memcmp(data, check, len);	if(ret != 0) {		printf("#%d: data mismatched.\n", num);		list = input->head;		i = 0;		while(list != NULL) {			ret = memcmp(data + i, list->data, list->size);			printf("wrong chunk:\n");			printf(" position: %d\n", i);			printf(" mode    : %d\n", list->mode);			printf(" size    : %d\n", list->size);			printf(" data    : %.*s\n", list->size, list->data);			i += list->size;			list = list->next;		}		exit(1);	}	QRinput_free(input);}void monkey_split_8(int loop){	int i;	puts("Monkey test: Split_splitStringToQRinput() - 8bit char string.");	srand(0);	for(i=0; i<loop; i++) {		test_split_8(i);	}}void test_split_kanji(int num){	QRinput *input;	QRinput_List *list;	int len, i, ret;	len = fill8bitData();	input = QRinput_new2(0, QR_ECLEVEL_L);	Split_splitStringToQRinput(data, input, QR_MODE_KANJI, 1);	list = input->head;	i = 0;	while(list != NULL) {		memcpy(check + i, list->data, list->size);		i += list->size;		list = list->next;	}	if(i != len) {		printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);	}	check[i] = '\0';	ret = memcmp(data, check, len);	if(ret != 0) {		printf("#%d: data mismatched.\n", num);		list = input->head;		i = 0;		while(list != NULL) {			ret = memcmp(data + i, list->data, list->size);			printf("wrong chunk:\n");			printf(" position: %d\n", i);			printf(" mode    : %d\n", list->mode);			printf(" size    : %d\n", list->size);			printf(" data    : %.*s\n", list->size, list->data);			i += list->size;			list = list->next;		}		exit(1);	}	QRinput_free(input);}void monkey_split_kanji(int loop){	int i;	puts("Monkey test: Split_splitStringToQRinput() - kanji string.");	srand(0);	for(i=0; i<loop; i++) {		test_split_kanji(i);	}}void test_split_structure(void){	QRinput *input;	QRinput_Struct *s;	QRcode_List *codes, *list;	QRinput_InputList *il;	int version;	QRecLevel level;	int len, c, i;	version = (int)drand(40) + 1;	level = (QRecLevel)drand(4);	len = fill8bitData();	input = QRinput_new2(version, level);	Split_splitStringToQRinput(data, input, QR_MODE_KANJI, 1);	s = QRinput_splitQRinputToStruct(input);	if(s == NULL) {		QRinput_free(input);		return;	}	il = s->head;	i = 0;	while(il != NULL) {		if(il->input->version != version) {			printf("Test: version %d, level %c\n", version, levelChar[level]);			printf("wrong version number.\n");			printQRinput(il->input);			exit(1);		}		i++;		il = il->next;	}	codes = QRcode_encodeInputStructured(s);	list = codes;	il = s->head;	c = 0;	while(list != NULL) {		if(list->code->version != version) {			printf("Test: version %d, level %c\n", version, levelChar[level]);			printf("code #%d\n", c);			printf("Version mismatch: %d should be %d\n", list->code->version, version);			printf("max bits: %d\n", QRspec_getDataLength(version, level) * 8 - 20);			printQRinput(il->input);			exit(1);		}		list = list->next;		il = il->next;		c++;	}	QRinput_free(input);	QRinput_Struct_free(s);	QRcode_List_free(codes);}void monkey_split_structure(int loop){	int i;	puts("Monkey test: QRinput_splitQRinputToStruct.");	srand(0);	for(i=0; i<loop; i++) {		test_split_structure();	}}int main(int argc, char **argv){	int loop = 1000;	if(argc == 2) {		loop = atoi(argv[1]);	}	monkey_split_an(loop);	monkey_split_8(loop);	monkey_split_kanji(loop);	monkey_split_structure(loop);	QRspec_clearCache();	report();	return 0;}

⌨️ 快捷键说明

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