14902524cSMatthias Ringwald #include "CppUTest/TestHarness.h"
24902524cSMatthias Ringwald #include "CppUTest/CommandLineTestRunner.h"
34902524cSMatthias Ringwald
44902524cSMatthias Ringwald #include "btstack_debug.h"
51d3bd1e5SMatthias Ringwald #include "btstack_util.h"
64902524cSMatthias Ringwald
TEST_GROUP(BTstackUtil)74902524cSMatthias Ringwald TEST_GROUP(BTstackUtil){
84902524cSMatthias Ringwald void setup(void){
94902524cSMatthias Ringwald }
104902524cSMatthias Ringwald void teardown(void){
114902524cSMatthias Ringwald }
124902524cSMatthias Ringwald };
134902524cSMatthias Ringwald
TEST(BTstackUtil,btstack_next_cid_ignoring_zero)144902524cSMatthias Ringwald TEST(BTstackUtil, btstack_next_cid_ignoring_zero){
154902524cSMatthias Ringwald CHECK_EQUAL(1, btstack_next_cid_ignoring_zero(0));
164902524cSMatthias Ringwald CHECK_EQUAL(5, btstack_next_cid_ignoring_zero(4));
174902524cSMatthias Ringwald CHECK_EQUAL(1, btstack_next_cid_ignoring_zero(0xFFFF));
184902524cSMatthias Ringwald }
194902524cSMatthias Ringwald
TEST(BTstackUtil,bd_addr_cmp)204902524cSMatthias Ringwald TEST(BTstackUtil, bd_addr_cmp){
214902524cSMatthias Ringwald bd_addr_t a = {0};
224902524cSMatthias Ringwald bd_addr_t b = {0};
234902524cSMatthias Ringwald CHECK_EQUAL(0, bd_addr_cmp(a, b));
244902524cSMatthias Ringwald
254902524cSMatthias Ringwald bd_addr_t a1 = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
264902524cSMatthias Ringwald bd_addr_t b1 = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
274902524cSMatthias Ringwald CHECK_EQUAL(0, bd_addr_cmp(a1, b1));
284902524cSMatthias Ringwald }
294902524cSMatthias Ringwald
TEST(BTstackUtil,bd_addr_copy)304902524cSMatthias Ringwald TEST(BTstackUtil, bd_addr_copy){
314902524cSMatthias Ringwald bd_addr_t a = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
324902524cSMatthias Ringwald bd_addr_t b = {0};
334902524cSMatthias Ringwald CHECK(0 != bd_addr_cmp(a, b));
344902524cSMatthias Ringwald
354902524cSMatthias Ringwald bd_addr_copy(a,b);
364902524cSMatthias Ringwald CHECK_EQUAL(0, bd_addr_cmp(a, b));
374902524cSMatthias Ringwald }
384902524cSMatthias Ringwald
TEST(BTstackUtil,little_endian_read)394902524cSMatthias Ringwald TEST(BTstackUtil, little_endian_read){
404902524cSMatthias Ringwald const uint8_t buffer[] = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
414902524cSMatthias Ringwald uint32_t value;
424902524cSMatthias Ringwald
434902524cSMatthias Ringwald value = little_endian_read_16(buffer, 0);
444902524cSMatthias Ringwald CHECK_EQUAL(0xECBC, value);
454902524cSMatthias Ringwald
464902524cSMatthias Ringwald value = little_endian_read_24(buffer, 0);
474902524cSMatthias Ringwald CHECK_EQUAL(0x5DECBC, value);
484902524cSMatthias Ringwald
494902524cSMatthias Ringwald value = little_endian_read_32(buffer, 0);
504902524cSMatthias Ringwald CHECK_EQUAL(0xE65DECBC, value);
514902524cSMatthias Ringwald }
524902524cSMatthias Ringwald
TEST(BTstackUtil,little_endian_store)534902524cSMatthias Ringwald TEST(BTstackUtil, little_endian_store){
544902524cSMatthias Ringwald uint8_t buffer[6];
554902524cSMatthias Ringwald uint32_t expected_value = 0xE65DECBC;
564902524cSMatthias Ringwald uint32_t value;
574902524cSMatthias Ringwald
584902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
594902524cSMatthias Ringwald little_endian_store_16(buffer, 0, expected_value);
604902524cSMatthias Ringwald value = little_endian_read_16(buffer, 0);
614902524cSMatthias Ringwald CHECK_EQUAL(0xECBC, value);
624902524cSMatthias Ringwald
634902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
644902524cSMatthias Ringwald little_endian_store_24(buffer, 0, expected_value);
654902524cSMatthias Ringwald value = little_endian_read_24(buffer, 0);
664902524cSMatthias Ringwald CHECK_EQUAL(0x5DECBC, value);
674902524cSMatthias Ringwald
684902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
694902524cSMatthias Ringwald little_endian_store_32(buffer, 0, expected_value);
704902524cSMatthias Ringwald value = little_endian_read_32(buffer, 0);
714902524cSMatthias Ringwald CHECK_EQUAL(0xE65DECBC, value);
724902524cSMatthias Ringwald }
734902524cSMatthias Ringwald
TEST(BTstackUtil,big_endian_read)744902524cSMatthias Ringwald TEST(BTstackUtil, big_endian_read){
754902524cSMatthias Ringwald const uint8_t buffer[] = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
764902524cSMatthias Ringwald uint32_t value;
774902524cSMatthias Ringwald
784902524cSMatthias Ringwald value = big_endian_read_16(buffer, 0);
794902524cSMatthias Ringwald CHECK_EQUAL(0xBCEC, value);
804902524cSMatthias Ringwald
814902524cSMatthias Ringwald value = big_endian_read_24(buffer, 0);
824902524cSMatthias Ringwald CHECK_EQUAL(0xBCEC5D, value);
834902524cSMatthias Ringwald
844902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
854902524cSMatthias Ringwald CHECK_EQUAL(0xBCEC5DE6, value);
864902524cSMatthias Ringwald }
874902524cSMatthias Ringwald
TEST(BTstackUtil,big_endian_store)884902524cSMatthias Ringwald TEST(BTstackUtil, big_endian_store){
894902524cSMatthias Ringwald uint8_t buffer[6];
904902524cSMatthias Ringwald uint32_t expected_value = 0xE65DECBC;
914902524cSMatthias Ringwald uint32_t value;
924902524cSMatthias Ringwald
934902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
944902524cSMatthias Ringwald big_endian_store_16(buffer, 0, expected_value);
954902524cSMatthias Ringwald value = big_endian_read_16(buffer, 0);
964902524cSMatthias Ringwald CHECK_EQUAL(0xECBC, value);
974902524cSMatthias Ringwald
984902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
994902524cSMatthias Ringwald big_endian_store_24(buffer, 0, expected_value);
1004902524cSMatthias Ringwald value = big_endian_read_24(buffer, 0);
1014902524cSMatthias Ringwald CHECK_EQUAL(0x5DECBC, value);
1024902524cSMatthias Ringwald
1034902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1044902524cSMatthias Ringwald big_endian_store_32(buffer, 0, expected_value);
1054902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1064902524cSMatthias Ringwald CHECK_EQUAL(0xE65DECBC, value);
1074902524cSMatthias Ringwald }
1084902524cSMatthias Ringwald
TEST(BTstackUtil,reverse_bytes)1094902524cSMatthias Ringwald TEST(BTstackUtil, reverse_bytes){
1104902524cSMatthias Ringwald uint8_t src[32];
1114902524cSMatthias Ringwald uint8_t buffer[32];
1124902524cSMatthias Ringwald uint32_t value;
1134902524cSMatthias Ringwald
1144902524cSMatthias Ringwald int i;
1154902524cSMatthias Ringwald for (i = 0; i < sizeof(src); i++){
1164902524cSMatthias Ringwald src[i] = i + 1;
1174902524cSMatthias Ringwald }
1184902524cSMatthias Ringwald
1194902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1204902524cSMatthias Ringwald reverse_bytes(src, buffer, sizeof(buffer));
1214902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1224902524cSMatthias Ringwald CHECK_EQUAL(0x201F1E1D, value);
1234902524cSMatthias Ringwald
1244902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1254902524cSMatthias Ringwald reverse_24(src, buffer);
1264902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1274902524cSMatthias Ringwald CHECK_EQUAL(0x03020100, value);
1284902524cSMatthias Ringwald
1294902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1304902524cSMatthias Ringwald reverse_48(src, buffer);
1314902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1324902524cSMatthias Ringwald CHECK_EQUAL(0x06050403, value);
1334902524cSMatthias Ringwald
1344902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1354902524cSMatthias Ringwald reverse_56(src, buffer);
1364902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1374902524cSMatthias Ringwald CHECK_EQUAL(0x07060504, value);
1384902524cSMatthias Ringwald
1394902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1404902524cSMatthias Ringwald reverse_64(src, buffer);
1414902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1424902524cSMatthias Ringwald CHECK_EQUAL(0x08070605, value);
1434902524cSMatthias Ringwald
1444902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1454902524cSMatthias Ringwald reverse_128(src, buffer);
1464902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1474902524cSMatthias Ringwald CHECK_EQUAL(0x100F0E0D, value);
1484902524cSMatthias Ringwald
1494902524cSMatthias Ringwald memset(buffer, 0, sizeof(buffer));
1504902524cSMatthias Ringwald reverse_256(src, buffer);
1514902524cSMatthias Ringwald value = big_endian_read_32(buffer, 0);
1524902524cSMatthias Ringwald CHECK_EQUAL(0x201F1E1D, value);
1534902524cSMatthias Ringwald }
1544902524cSMatthias Ringwald
TEST(BTstackUtil,reverse_bd_addr)1554902524cSMatthias Ringwald TEST(BTstackUtil, reverse_bd_addr){
1564902524cSMatthias Ringwald bd_addr_t src = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
1574902524cSMatthias Ringwald bd_addr_t dest = {0};
1584902524cSMatthias Ringwald reverse_bd_addr(src, dest);
1594902524cSMatthias Ringwald
1604902524cSMatthias Ringwald uint32_t value = big_endian_read_32(dest, 0);
1614902524cSMatthias Ringwald CHECK_EQUAL(0x0315E65D, value);
1624902524cSMatthias Ringwald }
1634902524cSMatthias Ringwald
TEST(BTstackUtil,btstack_min_max)1644902524cSMatthias Ringwald TEST(BTstackUtil, btstack_min_max){
1654902524cSMatthias Ringwald uint32_t a = 30;
1664902524cSMatthias Ringwald uint32_t b = 100;
1674902524cSMatthias Ringwald
1684902524cSMatthias Ringwald CHECK_EQUAL(a, btstack_min(a,b));
1694902524cSMatthias Ringwald CHECK_EQUAL(a, btstack_min(b,a));
1704902524cSMatthias Ringwald
1714902524cSMatthias Ringwald CHECK_EQUAL(b, btstack_max(a,b));
1724902524cSMatthias Ringwald CHECK_EQUAL(b, btstack_max(b,a));
1734902524cSMatthias Ringwald }
1744902524cSMatthias Ringwald
TEST(BTstackUtil,char_for_nibble)1754902524cSMatthias Ringwald TEST(BTstackUtil, char_for_nibble){
1764902524cSMatthias Ringwald CHECK_EQUAL('A', char_for_nibble(10));
1774902524cSMatthias Ringwald CHECK_EQUAL('?', char_for_nibble(20));
1784902524cSMatthias Ringwald // CHECK_EQUAL('?', char_for_nibble(-5));
1794902524cSMatthias Ringwald }
1804902524cSMatthias Ringwald
TEST(BTstackUtil,nibble_for_char)1814902524cSMatthias Ringwald TEST(BTstackUtil, nibble_for_char){
1824902524cSMatthias Ringwald CHECK_EQUAL(0, nibble_for_char('0'));
1834902524cSMatthias Ringwald CHECK_EQUAL(5, nibble_for_char('5'));
1844902524cSMatthias Ringwald CHECK_EQUAL(9, nibble_for_char('9'));
1854902524cSMatthias Ringwald
1864902524cSMatthias Ringwald CHECK_EQUAL(10, nibble_for_char('a'));
1874902524cSMatthias Ringwald CHECK_EQUAL(12, nibble_for_char('c'));
1884902524cSMatthias Ringwald CHECK_EQUAL(15, nibble_for_char('f'));
1894902524cSMatthias Ringwald
1904902524cSMatthias Ringwald CHECK_EQUAL(10, nibble_for_char('A'));
1914902524cSMatthias Ringwald CHECK_EQUAL(12, nibble_for_char('C'));
1924902524cSMatthias Ringwald CHECK_EQUAL(15, nibble_for_char('F'));
1934902524cSMatthias Ringwald
1944902524cSMatthias Ringwald CHECK_EQUAL(-1, nibble_for_char('-'));
1954902524cSMatthias Ringwald }
1964902524cSMatthias Ringwald
TEST(BTstackUtil,logging)1974902524cSMatthias Ringwald TEST(BTstackUtil, logging){
1984902524cSMatthias Ringwald uint8_t data[6 * 16 + 5] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6f};
1994902524cSMatthias Ringwald #ifdef ENABLE_LOG_DEBUG
2004902524cSMatthias Ringwald log_debug_hexdump(data, sizeof(data));
2014902524cSMatthias Ringwald #endif
2024902524cSMatthias Ringwald
2034902524cSMatthias Ringwald #ifdef ENABLE_LOG_INFO
2044902524cSMatthias Ringwald log_info_hexdump(data, sizeof(data));
2054902524cSMatthias Ringwald sm_key_t key = {0x54, 0x65, 0x73, 0x74, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x01, 0x014, 0xFF};
2064902524cSMatthias Ringwald log_info_key("test key", key);
2074902524cSMatthias Ringwald #endif
2084902524cSMatthias Ringwald }
2094902524cSMatthias Ringwald
TEST(BTstackUtil,uuids)2104902524cSMatthias Ringwald TEST(BTstackUtil, uuids){
2114902524cSMatthias Ringwald uint32_t shortUUID = 0x44445555;
2124902524cSMatthias Ringwald uint8_t uuid[16];
2134902524cSMatthias Ringwald uint8_t uuid128[] = {0x44, 0x44, 0x55, 0x55, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB};
2144902524cSMatthias Ringwald
2154902524cSMatthias Ringwald memset(uuid, 0, sizeof(uuid));
2164902524cSMatthias Ringwald uuid_add_bluetooth_prefix(uuid, shortUUID);
2174902524cSMatthias Ringwald MEMCMP_EQUAL(uuid128, uuid, sizeof(uuid));
2184902524cSMatthias Ringwald
2194902524cSMatthias Ringwald CHECK_EQUAL(1, uuid_has_bluetooth_prefix(uuid128));
2204902524cSMatthias Ringwald
2214902524cSMatthias Ringwald uuid128[5] = 0xff;
2224902524cSMatthias Ringwald CHECK(1 != uuid_has_bluetooth_prefix(uuid128));
2234902524cSMatthias Ringwald
2244902524cSMatthias Ringwald char * uuid128_str = uuid128_to_str(uuid128);
2254902524cSMatthias Ringwald STRCMP_EQUAL("44445555-00FF-1000-8000-00805F9B34FB", uuid128_str);
2264902524cSMatthias Ringwald }
2274902524cSMatthias Ringwald
TEST(BTstackUtil,bd_addr_utils)2284902524cSMatthias Ringwald TEST(BTstackUtil, bd_addr_utils){
2294902524cSMatthias Ringwald const bd_addr_t addr = {0xBC, 0xEC, 0x5D, 0xE6, 0x15, 0x03};
2304902524cSMatthias Ringwald char * device_addr_string = (char *)"BC:EC:5D:E6:15:03";
2314902524cSMatthias Ringwald
2324902524cSMatthias Ringwald char * addr_str = bd_addr_to_str(addr);
2334902524cSMatthias Ringwald STRCMP_EQUAL(device_addr_string, addr_str);
2344902524cSMatthias Ringwald
2354902524cSMatthias Ringwald uint8_t device_name[50];
2364902524cSMatthias Ringwald strcpy((char *)device_name, "Device name 00:00:00:00:00:00");
2374902524cSMatthias Ringwald btstack_replace_bd_addr_placeholder(device_name, strlen((const char*) device_name), addr);
2384902524cSMatthias Ringwald STRCMP_EQUAL("Device name BC:EC:5D:E6:15:03", (const char *) device_name);
2394902524cSMatthias Ringwald
2404902524cSMatthias Ringwald bd_addr_t device_addr;
2414902524cSMatthias Ringwald CHECK_EQUAL(1, sscanf_bd_addr(device_addr_string, device_addr));
2424902524cSMatthias Ringwald MEMCMP_EQUAL(addr, device_addr, sizeof(addr));
2434902524cSMatthias Ringwald
2444902524cSMatthias Ringwald CHECK_EQUAL(1, sscanf_bd_addr("BC EC 5D E6 15 03", device_addr));
2454902524cSMatthias Ringwald CHECK_EQUAL(1, sscanf_bd_addr("BC-EC-5D-E6-15-03", device_addr));
2464902524cSMatthias Ringwald
2474902524cSMatthias Ringwald CHECK_EQUAL(0, sscanf_bd_addr("", device_addr));
2484902524cSMatthias Ringwald CHECK_EQUAL(0, sscanf_bd_addr("GG-EC-5D-E6-15-03", device_addr));
2494902524cSMatthias Ringwald CHECK_EQUAL(0, sscanf_bd_addr("8G-EC-5D-E6-15-03", device_addr));
2504902524cSMatthias Ringwald CHECK_EQUAL(0, sscanf_bd_addr("BCxECx5DxE6:15:03", device_addr));
2514902524cSMatthias Ringwald
2524902524cSMatthias Ringwald }
2534902524cSMatthias Ringwald
TEST(BTstackUtil,atoi)2544902524cSMatthias Ringwald TEST(BTstackUtil, atoi){
2554902524cSMatthias Ringwald CHECK_EQUAL(102, btstack_atoi("102"));
2564902524cSMatthias Ringwald CHECK_EQUAL(0, btstack_atoi("-102"));
2574902524cSMatthias Ringwald CHECK_EQUAL(1, btstack_atoi("1st"));
2584902524cSMatthias Ringwald CHECK_EQUAL(1, btstack_atoi("1st2"));
2594902524cSMatthias Ringwald }
2604902524cSMatthias Ringwald
TEST(BTstackUtil,string_len_for_uint32)2614902524cSMatthias Ringwald TEST(BTstackUtil, string_len_for_uint32){
2624902524cSMatthias Ringwald CHECK_EQUAL(1, string_len_for_uint32(9));
2634902524cSMatthias Ringwald CHECK_EQUAL(2, string_len_for_uint32(19));
2644902524cSMatthias Ringwald CHECK_EQUAL(3, string_len_for_uint32(109));
2654902524cSMatthias Ringwald CHECK_EQUAL(4, string_len_for_uint32(1009));
2664902524cSMatthias Ringwald CHECK_EQUAL(5, string_len_for_uint32(10009));
2674902524cSMatthias Ringwald CHECK_EQUAL(6, string_len_for_uint32(100009));
2684902524cSMatthias Ringwald CHECK_EQUAL(7, string_len_for_uint32(1000009));
2694902524cSMatthias Ringwald CHECK_EQUAL(8, string_len_for_uint32(10000009));
2704902524cSMatthias Ringwald CHECK_EQUAL(9, string_len_for_uint32(100000009));
2714902524cSMatthias Ringwald CHECK_EQUAL(10, string_len_for_uint32(1000000000));
2724902524cSMatthias Ringwald }
2734902524cSMatthias Ringwald
TEST(BTstackUtil,count_set_bits_uint32)2744902524cSMatthias Ringwald TEST(BTstackUtil, count_set_bits_uint32){
2754902524cSMatthias Ringwald CHECK_EQUAL(4, count_set_bits_uint32(0x0F));
2764902524cSMatthias Ringwald }
2774902524cSMatthias Ringwald
TEST(BTstackUtil,crc8)2784902524cSMatthias Ringwald TEST(BTstackUtil, crc8){
2794902524cSMatthias Ringwald uint8_t data[] = {1,2,3,4,5,6,7,8,9};
2804902524cSMatthias Ringwald CHECK_EQUAL(84, btstack_crc8_calc(data, sizeof(data)));
2814902524cSMatthias Ringwald
2824902524cSMatthias Ringwald CHECK_EQUAL(0, btstack_crc8_check(data, sizeof(data), 84));
2834902524cSMatthias Ringwald CHECK_EQUAL(1, btstack_crc8_check(data, sizeof(data), 74));
2844902524cSMatthias Ringwald }
2854902524cSMatthias Ringwald
TEST(BTstackUtil,strcat)2861179ff0cSMatthias Ringwald TEST(BTstackUtil, strcat){
2871179ff0cSMatthias Ringwald char summaries[3][7 * 8 + 1];
2881179ff0cSMatthias Ringwald CHECK_EQUAL((7*8+1), sizeof(summaries[0]));
2891179ff0cSMatthias Ringwald summaries[0][0] = 0;
2901179ff0cSMatthias Ringwald char item_text[10];
2911179ff0cSMatthias Ringwald sprintf(item_text, "%04x:%02d ", 1 ,2);
2921179ff0cSMatthias Ringwald btstack_strcat(summaries[0], sizeof(summaries[0]), item_text);
2931179ff0cSMatthias Ringwald sprintf(item_text, "%04x:%02d ", 3 ,4);
2941179ff0cSMatthias Ringwald btstack_strcat(summaries[0], sizeof(summaries[0]), item_text);
2951179ff0cSMatthias Ringwald STRCMP_EQUAL("0001:02 0003:04 ", summaries[0]);
2961179ff0cSMatthias Ringwald }
2974902524cSMatthias Ringwald
TEST(BTstackUtil,btstack_is_null)298*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_is_null){
299*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_is_null(NULL, 0), true);
300*cb92fd34SMilanka Ringwald
301*cb92fd34SMilanka Ringwald const uint8_t addr[] = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa};
302*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_is_null(addr, sizeof(addr)), false);
303*cb92fd34SMilanka Ringwald
304*cb92fd34SMilanka Ringwald const uint8_t null_addr[] = {0,0,0,0,0,0};
305*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_is_null(null_addr, sizeof(null_addr)), true);
306*cb92fd34SMilanka Ringwald
307*cb92fd34SMilanka Ringwald }
308*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,btstack_is_null_bd_addr)309*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_is_null_bd_addr){
310*cb92fd34SMilanka Ringwald const bd_addr_t addr = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa};
311*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_is_null_bd_addr(addr), false);
312*cb92fd34SMilanka Ringwald
313*cb92fd34SMilanka Ringwald const bd_addr_t null_addr = {0,0,0,0,0,0};
314*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_is_null_bd_addr(null_addr), true);
315*cb92fd34SMilanka Ringwald }
316*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,btstack_time16_delta)317*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_time16_delta){
318*cb92fd34SMilanka Ringwald CHECK_EQUAL(btstack_time16_delta(25, 26), -1);
319*cb92fd34SMilanka Ringwald }
320*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,btstack_strcpy)321*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_strcpy){
322*cb92fd34SMilanka Ringwald static char * field_data = "btstack";
323*cb92fd34SMilanka Ringwald char buffer[10];
324*cb92fd34SMilanka Ringwald
325*cb92fd34SMilanka Ringwald btstack_strcpy(buffer, sizeof(buffer), field_data);
326*cb92fd34SMilanka Ringwald MEMCMP_EQUAL(buffer, field_data, strlen(field_data));
327*cb92fd34SMilanka Ringwald }
328*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,btstack_virtual_memcpy)329*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_virtual_memcpy){
330*cb92fd34SMilanka Ringwald uint16_t bytes_copied;
331*cb92fd34SMilanka Ringwald const uint8_t field_data[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
332*cb92fd34SMilanka Ringwald uint16_t field_len = sizeof(field_data);
333*cb92fd34SMilanka Ringwald uint16_t field_offset = 0;
334*cb92fd34SMilanka Ringwald
335*cb92fd34SMilanka Ringwald uint8_t buffer[100];
336*cb92fd34SMilanka Ringwald
337*cb92fd34SMilanka Ringwald btstack_virtual_memcpy(field_data, field_len, 0, buffer, sizeof(buffer), 0);
338*cb92fd34SMilanka Ringwald MEMCMP_EQUAL(buffer, field_data, field_len);
339*cb92fd34SMilanka Ringwald
340*cb92fd34SMilanka Ringwald btstack_virtual_memcpy(field_data, field_len, 3, buffer, sizeof(buffer), 0);
341*cb92fd34SMilanka Ringwald MEMCMP_EQUAL(buffer, field_data, field_len - 3);
342*cb92fd34SMilanka Ringwald
343*cb92fd34SMilanka Ringwald // bail before buffer
344*cb92fd34SMilanka Ringwald bytes_copied = btstack_virtual_memcpy(field_data, field_len, 0, buffer, sizeof(buffer), sizeof(buffer));
345*cb92fd34SMilanka Ringwald CHECK_EQUAL(bytes_copied, 0);
346*cb92fd34SMilanka Ringwald
347*cb92fd34SMilanka Ringwald // bail after buffer
348*cb92fd34SMilanka Ringwald bytes_copied = btstack_virtual_memcpy(field_data, field_len, sizeof(field_data), buffer, 0, 0);
349*cb92fd34SMilanka Ringwald CHECK_EQUAL(bytes_copied, 0);
350*cb92fd34SMilanka Ringwald }
351*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,btstack_virtual_memcpy_two)352*cb92fd34SMilanka Ringwald TEST(BTstackUtil, btstack_virtual_memcpy_two){
353*cb92fd34SMilanka Ringwald uint16_t bytes_copied;
354*cb92fd34SMilanka Ringwald const uint8_t field_data[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
355*cb92fd34SMilanka Ringwald uint16_t field_len = sizeof(field_data);
356*cb92fd34SMilanka Ringwald uint16_t field_offset = 0;
357*cb92fd34SMilanka Ringwald
358*cb92fd34SMilanka Ringwald uint8_t buffer[14];
359*cb92fd34SMilanka Ringwald uint16_t buffer_size = sizeof(buffer);
360*cb92fd34SMilanka Ringwald uint16_t records_offset = 0;
361*cb92fd34SMilanka Ringwald
362*cb92fd34SMilanka Ringwald bytes_copied = btstack_virtual_memcpy(field_data, field_len, records_offset, buffer, sizeof(buffer), 0);
363*cb92fd34SMilanka Ringwald records_offset += bytes_copied;
364*cb92fd34SMilanka Ringwald CHECK_EQUAL(bytes_copied, field_len);
365*cb92fd34SMilanka Ringwald
366*cb92fd34SMilanka Ringwald bytes_copied = btstack_virtual_memcpy(field_data, field_len, records_offset, buffer, sizeof(buffer), 0);
367*cb92fd34SMilanka Ringwald records_offset += bytes_copied;
368*cb92fd34SMilanka Ringwald CHECK_EQUAL(bytes_copied, field_len);
369*cb92fd34SMilanka Ringwald
370*cb92fd34SMilanka Ringwald // buffer can store only a fragment of the record, and will skip remaining bytes
371*cb92fd34SMilanka Ringwald // skip_at_end
372*cb92fd34SMilanka Ringwald bytes_copied = btstack_virtual_memcpy(field_data, field_len, records_offset, buffer, sizeof(buffer), 0);
373*cb92fd34SMilanka Ringwald records_offset += bytes_copied;
374*cb92fd34SMilanka Ringwald CHECK_EQUAL(bytes_copied, 2);
375*cb92fd34SMilanka Ringwald }
376*cb92fd34SMilanka Ringwald
TEST(BTstackUtil,crc_updated)377*cb92fd34SMilanka Ringwald TEST(BTstackUtil, crc_updated){
378*cb92fd34SMilanka Ringwald uint32_t crc_initial = btstack_crc32_init();
379*cb92fd34SMilanka Ringwald CHECK_EQUAL(crc_initial, 0xffffffff);
380*cb92fd34SMilanka Ringwald
381*cb92fd34SMilanka Ringwald const uint8_t data[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
382*cb92fd34SMilanka Ringwald uint32_t crc_updated = btstack_crc32_update(crc_initial, data, sizeof(data));
383*cb92fd34SMilanka Ringwald CHECK_EQUAL(crc_updated, 1648583859);
384*cb92fd34SMilanka Ringwald
385*cb92fd34SMilanka Ringwald uint32_t crc_final = btstack_crc32_finalize(crc_updated);
386*cb92fd34SMilanka Ringwald CHECK_EQUAL(crc_final, crc_updated ^ 0xffffffff);
387*cb92fd34SMilanka Ringwald }
388*cb92fd34SMilanka Ringwald
main(int argc,const char * argv[])3894902524cSMatthias Ringwald int main (int argc, const char * argv[]){
3904902524cSMatthias Ringwald return CommandLineTestRunner::RunAllTests(argc, argv);
3914902524cSMatthias Ringwald }
392