summaryrefslogtreecommitdiff
path: root/genqrcode/tests/test_estimatebit.c
diff options
context:
space:
mode:
Diffstat (limited to 'genqrcode/tests/test_estimatebit.c')
-rw-r--r--genqrcode/tests/test_estimatebit.c183
1 files changed, 183 insertions, 0 deletions
diff --git a/genqrcode/tests/test_estimatebit.c b/genqrcode/tests/test_estimatebit.c
new file mode 100644
index 0000000000..8392ed813a
--- /dev/null
+++ b/genqrcode/tests/test_estimatebit.c
@@ -0,0 +1,183 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "common.h"
+#include "../qrinput.h"
+
+static QRinput *gstream;
+
+static void test_numbit(void)
+{
+ QRinput *stream;
+ char num[9]="01234567";
+ int bits;
+
+ testStart("Estimation of Numeric stream (8 digits)");
+ stream = QRinput_new();
+ QRinput_append(stream, QR_MODE_NUM, 8, (unsigned char *)num);
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ testEndExp(bits == 41);
+
+ QRinput_append(gstream, QR_MODE_NUM, 8, (unsigned char *)num);
+ QRinput_free(stream);
+}
+
+static void test_numbit2(void)
+{
+ QRinput *stream;
+ char num[17]="0123456789012345";
+ int bits;
+
+ testStart("Estimation of Numeric stream (16 digits)");
+ stream = QRinput_new();
+ QRinput_append(stream, QR_MODE_NUM, 16, (unsigned char *)num);
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ testEndExp(bits == 68);
+
+ QRinput_append(gstream, QR_MODE_NUM, 16, (unsigned char *)num);
+ QRinput_free(stream);
+}
+
+static void test_numbit3(void)
+{
+ QRinput *stream;
+ char *num;
+ int bits;
+
+ testStart("Estimation of Numeric stream (400 digits)");
+ stream = QRinput_new();
+ num = (char *)malloc(401);
+ memset(num, '1', 400);
+ num[400] = '\0';
+ QRinput_append(stream, QR_MODE_NUM, 400, (unsigned char *)num);
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ /* 4 + 10 + 133*10 + 4 = 1348 */
+ testEndExp(bits == 1348);
+
+ QRinput_append(gstream, QR_MODE_NUM, 400, (unsigned char *)num);
+ QRinput_free(stream);
+ free(num);
+}
+
+static void test_an(void)
+{
+ QRinput *stream;
+ char str[6]="AC-42";
+ int bits;
+
+ testStart("Estimation of Alphabet-Numeric stream (5 chars)");
+ stream = QRinput_new();
+ QRinput_append(stream, QR_MODE_AN, 5, (unsigned char *)str);
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ testEndExp(bits == 41);
+
+ QRinput_append(gstream, QR_MODE_AN, 5, (unsigned char *)str);
+ QRinput_free(stream);
+}
+
+static void test_8(void)
+{
+ QRinput *stream;
+ char str[9]="12345678";
+ int bits;
+
+ testStart("Estimation of 8 bit data stream (8 bytes)");
+ stream = QRinput_new();
+ QRinput_append(stream, QR_MODE_8, 8, (unsigned char *)str);
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ testEndExp(bits == 76);
+
+ QRinput_append(gstream, QR_MODE_8, 8, (unsigned char *)str);
+ QRinput_free(stream);
+}
+
+static void test_structure(void)
+{
+ QRinput *stream;
+ int bits;
+
+ testStart("Estimation of a structure-append header");
+ stream = QRinput_new();
+ QRinput_insertStructuredAppendHeader(stream, 10, 1, 0);
+ bits = QRinput_estimateBitStreamSize(stream, 1);
+ testEndExp(bits == 20);
+
+ QRinput_insertStructuredAppendHeader(gstream, 10, 1, 0);
+ QRinput_free(stream);
+}
+
+static void test_kanji(void)
+{
+ int res;
+
+ QRinput *stream;
+ unsigned char str[4]= {0x93, 0x5f,0xe4, 0xaa};
+ int bits;
+
+ testStart("Estimation of Kanji stream (2 chars)");
+ stream = QRinput_new();
+ res = QRinput_append(stream, QR_MODE_KANJI, 4, (unsigned char *)str);
+ if(res < 0) {
+ printf("Failed to add.\n");
+ testEnd(1);
+ } else {
+ bits = QRinput_estimateBitStreamSize(stream, 0);
+ testEndExp(bits == 38);
+ QRinput_append(gstream, QR_MODE_KANJI, 4, (unsigned char *)str);
+ }
+
+ QRinput_free(stream);
+}
+
+static void test_mix(void)
+{
+ int bits;
+
+ testStart("Estimation of Mixed stream");
+ bits = QRinput_estimateBitStreamSize(gstream, 0);
+ testEndExp(bits == (41 + 68 + 1348 + 41 + 76 + 38 + 20));
+ QRinput_free(gstream);
+}
+
+/* Taken from JISX 0510:2018, p.23 */
+static void test_numbit1_mqr(void)
+{
+ QRinput *stream;
+ char *str = "0123456789012345";
+ int bits;
+
+ testStart("Estimation of Numeric stream for Micro QR Code (16 digits)");
+ stream = QRinput_newMQR(3, QR_ECLEVEL_M);
+ QRinput_append(stream, QR_MODE_NUM, 16, (const unsigned char *)str);
+ bits = QRinput_estimateBitStreamSize(stream, QRinput_getVersion(stream));
+ assert_equal(bits, 61, "Estimated bit length is wrong: %d, expected: %d.\n", bits, 61);
+ QRinput_free(stream);
+
+ stream = QRinput_newMQR(4, QR_ECLEVEL_M);
+ QRinput_append(stream, QR_MODE_NUM, 16, (const unsigned char *)str);
+ bits = QRinput_estimateBitStreamSize(stream, QRinput_getVersion(stream));
+ assert_equal(bits, 63, "Estimated bit length is wrong: %d, expected: %d.\n", bits, 63);
+ QRinput_free(stream);
+
+ testFinish();
+}
+
+int main()
+{
+ gstream = QRinput_new();
+
+ int tests = 9;
+ testInit(tests);
+ test_numbit();
+ test_numbit2();
+ test_numbit3();
+ test_an();
+ test_8();
+ test_kanji();
+ test_structure();
+ test_mix();
+ test_numbit1_mqr();
+ testReport(tests);
+
+ return 0;
+}