5 #include "../qrinput.h"
10 #define MAX_LENGTH 7091
11 static char data[MAX_LENGTH];
12 static char check[MAX_LENGTH];
14 static const char *AN = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
16 #define drand(__scale__) ((__scale__) * (double)rand() / ((double)RAND_MAX + 1.0))
18 int fill8bitData(void)
22 len = 1 + (int)drand((MAX_LENGTH - 2));
23 for(i=0; i<len; i++) {
24 data[i] = (unsigned char)drand(255) + 1;
31 void test_split_an(int num)
37 len = 1 + (int)drand((MAX_LENGTH - 2));
38 for(i=0; i<len; i++) {
39 data[i] = AN[(int)drand(45)];
43 input = QRinput_new2(0, QR_ECLEVEL_L);
45 perror("test_split_an aborted at QRinput_new2():");
48 ret = Split_splitStringToQRinput(data, input, QR_MODE_8, 1);
50 perror("test_split_an aborted at Split_splitStringToQRinput():");
57 memcpy(check + i, list->data, list->size);
62 printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);
66 ret = memcmp(data, check, len);
68 printf("#%d: data mismatched.\n", num);
72 ret = memcmp(data + i, list->data, list->size);
73 printf("wrong chunk:\n");
74 printf(" position: %d\n", i);
75 printf(" mode : %d\n", list->mode);
76 printf(" size : %d\n", list->size);
77 printf(" data : %.*s\n", list->size, list->data);
86 void monkey_split_an(int loop)
90 puts("Monkey test: Split_splitStringToQRinput() - AlphaNumeric string.");
92 for(i=0; i<loop; i++) {
97 void test_split_8(int num)
103 len = fill8bitData();
105 input = QRinput_new2(0, QR_ECLEVEL_L);
107 perror("test_split_8 aborted at QRinput_new2():");
110 ret = Split_splitStringToQRinput(data, input, QR_MODE_8, 1);
112 perror("test_split_8 aborted at Split_splitStringToQRinput():");
118 while(list != NULL) {
119 memcpy(check + i, list->data, list->size);
124 printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);
128 ret = memcmp(data, check, len);
130 printf("#%d: data mismatched.\n", num);
133 while(list != NULL) {
134 ret = memcmp(data + i, list->data, list->size);
135 printf("wrong chunk:\n");
136 printf(" position: %d\n", i);
137 printf(" mode : %d\n", list->mode);
138 printf(" size : %d\n", list->size);
139 printf(" data : %.*s\n", list->size, list->data);
148 void monkey_split_8(int loop)
152 puts("Monkey test: Split_splitStringToQRinput() - 8bit char string.");
154 for(i=0; i<loop; i++) {
159 void test_split_kanji(int num)
165 len = fill8bitData();
167 input = QRinput_new2(0, QR_ECLEVEL_L);
169 perror("test_split_kanji aborted at QRinput_new2():");
172 ret = Split_splitStringToQRinput(data, input, QR_MODE_KANJI, 1);
174 perror("test_split_kanji aborted at Split_splitStringToQRinput():");
180 while(list != NULL) {
181 memcpy(check + i, list->data, list->size);
186 printf("#%d: length is not correct. (%d should be %d)\n", num, i, len);
190 ret = memcmp(data, check, len);
192 printf("#%d: data mismatched.\n", num);
195 while(list != NULL) {
196 ret = memcmp(data + i, list->data, list->size);
197 printf("wrong chunk:\n");
198 printf(" position: %d\n", i);
199 printf(" mode : %d\n", list->mode);
200 printf(" size : %d\n", list->size);
201 printf(" data : %.*s\n", list->size, list->data);
210 void monkey_split_kanji(int loop)
214 puts("Monkey test: Split_splitStringToQRinput() - kanji string.");
216 for(i=0; i<loop; i++) {
221 void test_split_structure(int num)
225 QRcode_List *codes, *list;
226 QRinput_InputList *il;
231 version = (int)drand(40) + 1;
232 level = (QRecLevel)drand(4);
234 len = fill8bitData();
236 input = QRinput_new2(version, level);
238 perror("test_split_structure aborted at QRinput_new2():");
241 ret = Split_splitStringToQRinput(data, input, QR_MODE_KANJI, 1);
243 perror("test_split_structure aborted at Split_splitStringToQRinput():");
247 s = QRinput_splitQRinputToStruct(input);
249 if(errno != 0 && errno != ERANGE) {
250 perror("test_split_structure aborted at QRinput_splitQRinputToStruct():");
258 if(il->input->version != version) {
259 printf("Test: version %d, level %c\n", version, levelChar[level]);
260 printf("wrong version number.\n");
261 printQRinputInfo(il->input);
267 codes = QRcode_encodeInputStructured(s);
269 perror("test_split_structure aborted at QRcode_encodeInputStructured():");
271 QRinput_Struct_free(s);
277 while(list != NULL) {
278 if(list->code->version != version) {
279 printf("#%d: data mismatched.\n", num);
280 printf("Test: version %d, level %c\n", version, levelChar[level]);
281 printf("code #%d\n", c);
282 printf("Version mismatch: %d should be %d\n", list->code->version, version);
283 printf("max bits: %d\n", QRspec_getDataLength(version, level) * 8 - 20);
284 printQRinputInfo(il->input);
294 QRinput_Struct_free(s);
295 QRcode_List_free(codes);
298 void monkey_split_structure(int loop)
302 puts("Monkey test: QRinput_splitQRinputToStruct.");
304 for(i=0; i<loop; i++) {
305 test_split_structure(i);
309 int main(int argc, char **argv)
313 loop = atoi(argv[1]);
315 monkey_split_an(loop);
316 monkey_split_8(loop);
317 monkey_split_kanji(loop);
318 monkey_split_structure(loop);