Files
2025-07-18 22:45:08 +02:00

176 lines
3.8 KiB
C

#include <check.h>
#include "ucore/string.h"
START_TEST (test_2bcd_1234567890)
{
char ascii[] = "1234567890";
unsigned char bcd[5];
size_t len = uc_ascii2bcd(ascii, bcd, 0);
ck_assert_int_eq(len, 5);
ck_assert_int_eq(bcd[0], 0x21);
ck_assert_int_eq(bcd[1], 0x43);
ck_assert_int_eq(bcd[2], 0x65);
ck_assert_int_eq(bcd[3], 0x87);
ck_assert_int_eq(bcd[4], 0x09);
}
END_TEST
START_TEST (test_2bcd_empty)
{
char ascii[] = "";
unsigned char bcd[1];
size_t len = uc_ascii2bcd(ascii, bcd, 3);
ck_assert_int_eq(len, 0);
}
END_TEST
START_TEST (test_2bcd_1_filler)
{
char ascii[] = "1";
unsigned char bcd[1];
size_t len = uc_ascii2bcd(ascii, bcd, 0xa);
ck_assert_int_eq(len, 1);
ck_assert_int_ne(bcd[0], 0);
}
END_TEST
START_TEST (test_2bcd_2_filler)
{
char ascii[] = "123";
unsigned char bcd[2];
size_t len = uc_ascii2bcd(ascii, bcd, 0xf);
ck_assert_int_eq(len , 2);
ck_assert_int_eq(bcd[0] , 0x21);
ck_assert_int_eq(bcd[1] , 0xf3);
ck_assert_int_eq(UC_BCD_LEN(strlen(ascii)) , len);
}
END_TEST
START_TEST (test_2bcd_3_filler)
{
char ascii[] = "123";
unsigned char bcd[2];
size_t len = uc_ascii2bcd(ascii, bcd, 0x0);
ck_assert_int_eq(len , 2);
ck_assert_int_eq(bcd[0] , 0x21);
ck_assert_int_eq(bcd[1] , 0x03);
}
END_TEST
START_TEST (test_2bcd_non_digits)
{
char ascii[] = "a,b{ }=";
unsigned char bcd[10];
size_t len = uc_ascii2bcd(ascii, bcd, 0x0);
ck_assert_int_eq(len , 0);
}
END_TEST
START_TEST (test_2bcd_phoneno)
{
char ascii[] = "0047-3233-4";
unsigned char bcd[24];
size_t len = uc_ascii2bcd(ascii, bcd, 0xf);
ck_assert_int_eq(len , 5);
ck_assert_int_eq(bcd[0] , 0x00);
ck_assert_int_eq(bcd[1] , 0x74);
ck_assert_int_eq(bcd[2] , 0x23);
ck_assert_int_eq(bcd[3] , 0x33);
ck_assert_int_eq(bcd[4] , 0xf4);
}
END_TEST
START_TEST (test_2bcd_binary)
{
char ascii[] = {0x32,0x01,0xAF,0xFF,0x00};
unsigned char bcd[24];
size_t len = uc_ascii2bcd(ascii, bcd, 0xf);
ck_assert_int_eq(len , 1);
ck_assert_int_eq(bcd[0], 0xf2);
}
END_TEST
START_TEST (test_2hex_1)
{
unsigned char bcd[] = {0x21, 0x43 };
char ascii[sizeof bcd * 2 + 1];
size_t len = uc_bcd2ascii(bcd, sizeof bcd, ascii);
ck_assert_int_eq(len, 4);
ck_assert_int_eq(ascii[0], '1');
ck_assert_int_eq(ascii[1], '2');
ck_assert_int_eq(ascii[2], '3');
ck_assert_int_eq(ascii[3], '4');
ck_assert_int_eq(ascii[4], 0);
ck_assert_int_eq(UC_ASCII_LEN(sizeof bcd) , len);
}
END_TEST
START_TEST (test_2hex_2)
{
unsigned char bcd[] = {0xF0, 0xFF, 0x00};
char ascii[sizeof bcd * 2 + 1];
size_t len = uc_bcd2ascii(bcd, sizeof bcd, ascii);
ck_assert_int_eq(len , 6);
ck_assert_int_eq(ascii[0] , '0');
ck_assert_int_eq(ascii[1] , 'F');
ck_assert_int_eq(ascii[2] , 'F');
ck_assert_int_eq(ascii[3] , 'F');
ck_assert_int_eq(ascii[4] , '0');
ck_assert_int_eq(ascii[5] , '0');
ck_assert_int_eq(ascii[6] , 0);
}
END_TEST
START_TEST (test_2hex_empty)
{
unsigned char bcd[] = {0xF0, 0xFF, 0x00};
char ascii[sizeof bcd * 2 + 1];
ascii[0] = 0xFF;
size_t len = uc_bcd2ascii(bcd, 0, ascii);
ck_assert_int_eq(len, 0);
ck_assert_int_eq(ascii[0], 0);
}
END_TEST
Suite *bcd_suite(void)
{
Suite *s = suite_create("bcd");
TCase *tc = tcase_create("bcd tests");
tcase_add_test(tc, test_2bcd_1234567890);
tcase_add_test(tc, test_2bcd_empty);
tcase_add_test(tc, test_2bcd_1_filler);
tcase_add_test(tc, test_2bcd_2_filler);
tcase_add_test(tc, test_2bcd_3_filler);
tcase_add_test(tc, test_2bcd_non_digits);
tcase_add_test(tc, test_2bcd_phoneno);
tcase_add_test(tc, test_2bcd_binary);
tcase_add_test(tc, test_2hex_1);
tcase_add_test(tc, test_2hex_2);
tcase_add_test(tc, test_2hex_empty);
suite_add_tcase(s, tc);
return s;
}