Jan Breuer
2015-01-18 40fb36f5705e29a37e9fb0fbe62dbd667514a2ee
Update longToStr and update tests
3个文件已修改
61 ■■■■ 已修改文件
libscpi/src/utils.c 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/test/test_parser.c 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/test/test_scpi_utils.c 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/utils.c
@@ -75,32 +75,59 @@
 * @return number of bytes written to str (without '\0')
 */
size_t longToStr(int32_t val, char * str, size_t len, int8_t base) {
    uint32_t x = 1000000000L;
    const char digits[] = "0123456789ABCDEF";
#define ADD_CHAR(c) if (pos < len) str[pos++] = (c)
    uint32_t x = 0;
    int_fast8_t digit;
    size_t pos = 0;
    uint32_t uval = val;
    if (val == 0) {
        if (pos < len) str[pos++] = '0';
    if (uval == 0) {
        ADD_CHAR('0');
    } else {
        if (val < 0) {
            val = -val;
            if (pos < len) str[pos++] = '-';
        switch (base) {
            case 2:
                x = 0x80000000L;
                break;
            case 8:
                x = 0x40000000L;
                break;
            case 10:
                x = 1000000000L;
                break;
            case 0x10:
                x = 0x10000000L;
                break;
            default:
                x = 1000000000L;
                base = 10;
                break;
        }
        while ((val / x) == 0) {
        // add sign for numbers in base 10
        if ((val < 0) && (base == 10)) {
            uval = -val;
            ADD_CHAR('-');
        }
        // remove leading zeros
        while ((uval / x) == 0) {
            x /= base;
        }
        do {
            digit = (uint8_t) (val / x);
            if (pos < len) str[pos++] = digit + '0';
            val -= digit * x;
            digit = (uint8_t) (uval / x);
            ADD_CHAR(digits[digit]);
            uval -= digit * x;
            x /= base;
        } while (x && (pos < len));
    }
    if (pos < len) str[pos] = 0;
    return pos;
#undef ADD_CHAR
}
/**
@@ -435,6 +462,7 @@
#endif
#if !HAVE_STRNCASECMP && !HAVE_STRNICMP
int OUR_strncasecmp(const char *s1, const char *s2, size_t n) {
    unsigned char c1, c2;
libscpi/test/test_parser.c
@@ -68,9 +68,10 @@
    (void)context;
}
scpi_result_t SCPI_Test(scpi_t * context)
int32_t SCPI_Test(scpi_t * context)
{
    (void)context;   
    return 0;
}
scpi_result_t SCPI_Flush(scpi_t * context)
libscpi/test/test_scpi_utils.c
@@ -82,6 +82,16 @@
    CU_ASSERT(str[3] == '0');
    CU_ASSERT(str[4] == '\0');
    len = longToStr(10, str, 32, 16);
    CU_ASSERT(len == 1);
    CU_ASSERT(str[0] == 'A');
    CU_ASSERT(str[1] == '\0');
    len = longToStr(10, str, 32, 8);
    CU_ASSERT(len == 2);
    CU_ASSERT(str[0] == '1');
    CU_ASSERT(str[1] == '2');
    CU_ASSERT(str[2] == '\0');
}
void test_doubleToStr() {