#include #include "tkc/mem.h" #include "tkc/utils.h" #include "tkc/object_default.h" #include "tkc/object_array.h" #include "gtest/gtest.h" using std::string; TEST(Utils, basic) { char str[32]; ASSERT_EQ(tk_atoi("0015"), 15); ASSERT_EQ(tk_atoi("100"), 100); ASSERT_EQ(tk_atoi("0xff"), 0xff); ASSERT_EQ(tk_atoi("0x1"), 0x1); ASSERT_EQ(tk_atoi("0xf"), 0xf); ASSERT_EQ(tk_atoi("0Xf"), 0xf); ASSERT_EQ(tk_atoi("0b11"), 3); ASSERT_EQ(tk_atoi("0B101"), 5); ASSERT_EQ(tk_watoi(L"100"), 100); ASSERT_EQ(tk_atof("100"), 100); ASSERT_EQ(tk_atof("1e2"), 100); ASSERT_EQ(tk_watof(L"100"), 100); ASSERT_EQ(tk_atol("0x1122334455667788"), 0x1122334455667788); ASSERT_EQ(tk_atol("1122334455667788"), 1122334455667788); ASSERT_EQ(tk_atol("-1122334455667788"), -1122334455667788); ASSERT_EQ(strcmp(tk_itoa(str, sizeof(str), tk_atoi("100")), "100"), 0); } static void check_buff16(uint16_t* buff, uint16_t val, uint32_t size) { uint32_t i = 0; for (i = 0; i < size; i++) { ASSERT_EQ(buff[i], val); } } TEST(Utils, tk_memset16) { uint16_t buff[32]; uint16_t val = 0x1234; memset(buff, 0x00, sizeof(buff)); tk_memset16(buff, val, 1); check_buff16(buff, val, 1); memset(buff, 0x00, sizeof(buff)); tk_memset16(buff, val, 7); check_buff16(buff, val, 7); memset(buff, 0x00, sizeof(buff)); tk_memset16(buff + 1, val, 10); check_buff16(buff + 1, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset16(buff + 1, val, 11); check_buff16(buff + 1, val, 11); memset(buff, 0x00, sizeof(buff)); tk_memset16(buff, val, 10); check_buff16(buff, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset16(buff, val, 11); check_buff16(buff, val, 11); } static void check_buff24(uint32_t* buff, uint32_t val, uint32_t size) { uint32_t i = 0; uint8_t* p = (uint8_t*)buff; uint8_t* src = (uint8_t*)&(val); for (i = 0; i < size; i++) { ASSERT_EQ(p[0], src[0]); ASSERT_EQ(p[1], src[1]); ASSERT_EQ(p[2], src[2]); p += 3; } } TEST(Utils, tk_memset24) { uint32_t buff[32]; uint32_t val = 0x123456; memset(buff, 0x00, sizeof(buff)); tk_memset24(buff, &val, 1); check_buff24(buff, val, 1); memset(buff, 0x00, sizeof(buff)); tk_memset24(buff + 5, &val, 7); check_buff24(buff + 5, val, 7); memset(buff, 0x00, sizeof(buff)); tk_memset24(buff + 7, &val, 10); check_buff24(buff + 7, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset24(buff + 1, &val, 11); check_buff24(buff + 1, val, 11); memset(buff, 0x00, sizeof(buff)); tk_memset24(buff + 3, &val, 10); check_buff24(buff + 3, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset24(buff, &val, 11); check_buff24(buff, val, 11); } static void check_buff32(uint32_t* buff, uint32_t val, uint32_t size) { uint32_t i = 0; for (i = 0; i < size; i++) { ASSERT_EQ(buff[i], val); } } TEST(Utils, tk_memset32) { uint32_t buff[32]; uint32_t val = 0x1234; memset(buff, 0x00, sizeof(buff)); tk_memset32(buff, val, 1); check_buff32(buff, val, 1); memset(buff, 0x00, sizeof(buff)); tk_memset32(buff, val, 7); check_buff32(buff, val, 7); memset(buff, 0x00, sizeof(buff)); tk_memset32(buff + 1, val, 10); check_buff32(buff + 1, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset32(buff + 1, val, 11); check_buff32(buff + 1, val, 11); memset(buff, 0x00, sizeof(buff)); tk_memset32(buff, val, 10); check_buff32(buff, val, 10); memset(buff, 0x00, sizeof(buff)); tk_memset32(buff, val, 11); check_buff32(buff, val, 11); } TEST(Utils, tk_memcpy16) { uint32_t i = 0; uint16_t dst[100]; uint16_t src[100]; tk_memset16(src, 0x1234, ARRAY_SIZE(src)); for (i = 1; i < ARRAY_SIZE(src); i++) { tk_memcpy16(dst, src, i); ASSERT_EQ(memcmp(dst, src, i * 2), 0); } } TEST(Utils, tk_memcpy32) { uint32_t i = 0; uint32_t dst[100]; uint32_t src[100]; tk_memset32(src, 0x12345678, ARRAY_SIZE(src)); for (i = 1; i < ARRAY_SIZE(src); i++) { tk_memcpy32(dst, src, i); ASSERT_EQ(memcmp(dst, src, i * 4), 0); } } TEST(Utils, tk_strncpy) { char dst[32]; const char* str = "hello world"; ASSERT_EQ(string(tk_strncpy(dst, str, 1)), string("h")); ASSERT_EQ(string(tk_strncpy(dst, str, strlen(str))), string(str)); ASSERT_EQ(string(tk_strncpy(dst, str, strlen(str) + 1)), string(str)); } TEST(Utils, tk_strncpy_s) { char dst[32]; const char* str = "hello world"; ASSERT_EQ(tk_strncpy_s(dst, 0, str, 4), (const char*)NULL); ASSERT_EQ(string(tk_strncpy_s(dst, 1, str, 4)), string("")); ASSERT_EQ(string(tk_strncpy_s(dst, 2, str, 4)), string("h")); ASSERT_EQ(string(tk_strncpy_s(dst, 3, str, strlen(str))), string("he")); ASSERT_EQ(string(tk_strncpy_s(dst, sizeof(dst), str, strlen(str) + 1)), string(str)); } TEST(Utils, filename_to_name) { char name[TK_NAME_LEN + 1]; filename_to_name("test.png", name, TK_NAME_LEN); ASSERT_EQ(string(name), string("test")); filename_to_name("/a/test.png", name, TK_NAME_LEN); ASSERT_EQ(string(name), string("test")); } TEST(Utils, filename_to_name_ex) { char name[TK_NAME_LEN + 1]; filename_to_name_ex("test.png", name, TK_NAME_LEN, FALSE); ASSERT_EQ(string(name), string("test.png")); filename_to_name_ex("/a/test.png", name, TK_NAME_LEN, TRUE); ASSERT_EQ(string(name), string("test")); } TEST(Utils, filename_to_name_ex_dot) { char name[TK_NAME_LEN + 1]; filename_to_name_ex("/a/app.test.png", name, TK_NAME_LEN, TRUE); ASSERT_EQ(string(name), string("app.test")); } TEST(Utils, tk_skip_to_num) { ASSERT_EQ(tk_atoi(tk_skip_to_num("123")), 123); ASSERT_EQ(tk_atoi(tk_skip_to_num("abc123")), 123); ASSERT_EQ(tk_atoi(tk_skip_to_num("abc:@#123")), 123); } TEST(Utils, sscanf) { int r = 0; int g = 0; int b = 0; tk_sscanf("#123456", "#%02x%02x%02x", &r, &g, &b); ASSERT_EQ(r, 0x12); ASSERT_EQ(g, 0x34); ASSERT_EQ(b, 0x56); } TEST(Utils, xml_file_expand) { str_t s; str_init(&s, 0); const char* filename = "./tests/testdata/main.xml"; const char* xml_string = ""; const char* xml_string_1 = "\"/>"; const char* xml_string_2 = "\"/>\"/>"; const char* xml_string_3 = ""; ASSERT_EQ(xml_file_expand(filename, &s, xml_string), RET_OK); str_replace(&s, "\r\n", "\n"); ASSERT_EQ(string(s.str), "