From 7a425ef1806183ac563507740e94b5d0a439dad3 Mon Sep 17 00:00:00 2001
From: Iztok Jeras <iztok.jeras@redpitaya.com>
Date: 摹曛, 08 10月 2015 03:00:34 +0800
Subject: [PATCH] integer parser: all functions handling a sign argument are now static, without the SCPI_ prefix

---
 libscpi/src/parser.c           |   93 +++++++-------
 libscpi/test/test_scpi_utils.c |  142 +++++++++--------------
 libscpi/inc/scpi/parser.h      |   21 +-
 libscpi/inc/scpi/utils.h       |   10 +
 libscpi/src/utils.c            |   58 ++++++++-
 5 files changed, 172 insertions(+), 152 deletions(-)

diff --git a/libscpi/inc/scpi/parser.h b/libscpi/inc/scpi/parser.h
index f7f2716..cfa944b 100644
--- a/libscpi/inc/scpi/parser.h
+++ b/libscpi/inc/scpi/parser.h
@@ -51,14 +51,10 @@
 
     size_t SCPI_ResultCharacters(scpi_t * context, const char * data, size_t len);
 #define SCPI_ResultMnemonic(context, data) SCPI_ResultCharacters((context), (data), strlen(data))
-    size_t SCPI_ResultInt32Base(scpi_t * context, int32_t val, int8_t base, scpi_bool_t sign);
-#define SCPI_ResultIntBase(context, val, base) SCPI_ResultInt32Base ((context), (val), (base), TRUE)
+    size_t SCPI_ResultUInt32Base(scpi_t * context, uint32_t val, int8_t base);
     size_t SCPI_ResultInt32(scpi_t * context, int32_t val);
-#define SCPI_ResultInt(context, val) SCPI_ResultInt32 ((context), (val))
-    size_t SCPI_ResultUInt32(scpi_t * context, uint32_t val);
-    size_t SCPI_ResultInt64Base(scpi_t * context, int64_t val, int8_t base, scpi_bool_t sign);
+    size_t SCPI_ResultUInt64Base(scpi_t * context, uint64_t val, int8_t base);
     size_t SCPI_ResultInt64(scpi_t * context, int64_t val);
-    size_t SCPI_ResultUInt64(scpi_t * context, uint64_t val);
     size_t SCPI_ResultDouble(scpi_t * context, double val);
     size_t SCPI_ResultText(scpi_t * context, const char * data);
     size_t SCPI_ResultArbitraryBlock(scpi_t * context, const char * data, size_t len);
@@ -70,9 +66,7 @@
     scpi_bool_t SCPI_ParamErrorOccurred(scpi_t * context);
     scpi_bool_t SCPI_ParamIsNumber(scpi_parameter_t * parameter, scpi_bool_t suffixAllowed);
     scpi_bool_t SCPI_ParamToInt32(scpi_t * context, scpi_parameter_t * parameter, int32_t * value);
-#define SCPI_ParamToInt(context, parameter, value) SCPI_ParamToInt32((context), (parameter), (value))
     scpi_bool_t SCPI_ParamToUInt32(scpi_t * context, scpi_parameter_t * parameter, uint32_t * value);
-#define SCPI_ParamToUnsignedInt(context, parameter, value) SCPI_ParamToUInt32((context), (parameter), (value))
     scpi_bool_t SCPI_ParamToInt64(scpi_t * context, scpi_parameter_t * parameter, int64_t * value);
     scpi_bool_t SCPI_ParamToUInt64(scpi_t * context, scpi_parameter_t * parameter, uint64_t * value);
     scpi_bool_t SCPI_ParamToDouble(scpi_t * context, scpi_parameter_t * parameter, double * value);
@@ -81,9 +75,7 @@
 
 
     scpi_bool_t SCPI_ParamInt32(scpi_t * context, int32_t * value, scpi_bool_t mandatory);
-#define SCPI_ParamInt(context, value, mandatory) SCPI_ParamInt32((context), (value), (mandatory))
     scpi_bool_t SCPI_ParamUInt32(scpi_t * context, uint32_t * value, scpi_bool_t mandatory);
-#define SCPI_ParamUnsignedInt(context, value, mandatory) SCPI_ParamUInt32((context), (value), (mandatory))
     scpi_bool_t SCPI_ParamInt64(scpi_t * context, int64_t * value, scpi_bool_t mandatory);
     scpi_bool_t SCPI_ParamUInt64(scpi_t * context, uint64_t * value, scpi_bool_t mandatory);
     scpi_bool_t SCPI_ParamDouble(scpi_t * context, double * value, scpi_bool_t mandatory);
@@ -99,6 +91,15 @@
     scpi_bool_t SCPI_Match(const char * pattern, const char * value, size_t len);
     scpi_bool_t SCPI_CommandNumbers(scpi_t * context, int32_t * numbers, size_t len, int32_t default_value);
 
+
+    // deprecated finction, should be removed later
+#define SCPI_ResultIntBase(context, val, base) SCPI_ResultInt32Base ((context), (val), (base), TRUE)
+#define SCPI_ResultInt(context, val) SCPI_ResultInt32 ((context), (val))
+#define SCPI_ParamToInt(context, parameter, value) SCPI_ParamToInt32((context), (parameter), (value))
+#define SCPI_ParamToUnsignedInt(context, parameter, value) SCPI_ParamToUInt32((context), (parameter), (value))
+#define SCPI_ParamInt(context, value, mandatory) SCPI_ParamInt32((context), (value), (mandatory))
+#define SCPI_ParamUnsignedInt(context, value, mandatory) SCPI_ParamUInt32((context), (value), (mandatory))
+
 #ifdef	__cplusplus
 }
 #endif
diff --git a/libscpi/inc/scpi/utils.h b/libscpi/inc/scpi/utils.h
index 6822650..66e5cda 100644
--- a/libscpi/inc/scpi/utils.h
+++ b/libscpi/inc/scpi/utils.h
@@ -43,11 +43,15 @@
 extern "C" {
 #endif
 
-    size_t SCPI_Int32ToStr(int32_t val, char * str, size_t len, int8_t base, scpi_bool_t sign);
-#define SCPI_LongToStr(val, str, len, base) SCPI_Int32ToStr((val), (str), (len), (base), TRUE)
-    size_t SCPI_Int64ToStr(int64_t val, char * str, size_t len, int8_t base, scpi_bool_t sign);
+    size_t SCPI_UInt32ToStrBase(uint32_t val, char * str, size_t len, int8_t base);
+    size_t SCPI_Int32ToStr(int32_t val, char * str, size_t len);
+    size_t SCPI_UInt64ToStrBase(uint64_t val, char * str, size_t len, int8_t base);
+    size_t SCPI_Int64ToStr(int64_t val, char * str, size_t len);
     size_t SCPI_DoubleToStr(double val, char * str, size_t len);
 
+    // deprecated finction, should be removed later
+#define SCPI_LongToStr(val, str, len, base) SCPI_Int32ToStr((val), (str), (len), (base), TRUE)
+
 #ifdef	__cplusplus
 }
 #endif
diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index 5e475a9..ffd8de1 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -317,46 +317,6 @@
 }
 
 /**
- * Write signed 32 bit integer value to the result
- * @param context
- * @param val
- * @return
- */
-size_t SCPI_ResultInt32(scpi_t * context, int32_t val) {
-    return SCPI_ResultInt32Base(context, val, 10, TRUE);
-}
-
-/**
- * Write unsigned 32 bit integer value to the result
- * @param context
- * @param val
- * @return
- */
-size_t SCPI_ResultUInt32(scpi_t * context, uint32_t val) {
-    return SCPI_ResultInt32Base(context, val, 10, FALSE);
-}
-
-/**
- * Write signed 64 bit integer value to the result
- * @param context
- * @param val
- * @return
- */
-size_t SCPI_ResultInt64(scpi_t * context, int64_t val) {
-    return SCPI_ResultInt64Base(context, val, 10, TRUE);
-}
-
-/**
- * Write unsigned 64 bit integer value to the result
- * @param context
- * @param val
- * @return
- */
-size_t SCPI_ResultUInt64(scpi_t * context, uint64_t val) {
-    return SCPI_ResultInt64Base(context, val, 10, FALSE);
-}
-
-/**
  * Return prefix of nondecimal base
  * @param base
  * @return
@@ -378,13 +338,13 @@
  * @param sign
  * @return
  */
-size_t SCPI_ResultInt32Base(scpi_t * context, int32_t val, int8_t base, scpi_bool_t sign) {
+static size_t resultUInt32BaseSign(scpi_t * context, uint32_t val, int8_t base, scpi_bool_t sign) {
     char buffer[32+1];
     const char * basePrefix;
     size_t result = 0;
     size_t len;
 
-    len = SCPI_Int32ToStr(val, buffer, sizeof (buffer), base, sign);
+    len = UInt32ToStrBaseSign(val, buffer, sizeof (buffer), base, sign);
     basePrefix = getBasePrefix(base);
 
     result += writeDelimiter(context);
@@ -404,13 +364,13 @@
  * @param sign
  * @return
  */
-size_t SCPI_ResultInt64Base(scpi_t * context, int64_t val, int8_t base, scpi_bool_t sign) {
+static size_t resultUInt64BaseSign(scpi_t * context, uint64_t val, int8_t base, scpi_bool_t sign) {
     char buffer[64+1];
     const char * basePrefix;
     size_t result = 0;
     size_t len;
 
-    len = SCPI_Int64ToStr(val, buffer, sizeof (buffer), base, sign);
+    len = UInt64ToStrBaseSign(val, buffer, sizeof (buffer), base, sign);
     basePrefix = getBasePrefix(base);
 
     result += writeDelimiter(context);
@@ -420,6 +380,47 @@
     result += writeData(context, buffer, len);
     context->output_count++;
     return result;
+}
+
+/**
+ * Write signed 32 bit integer value to the result
+ * @param context
+ * @param val
+ * @return
+ */
+size_t SCPI_ResultInt32(scpi_t * context, int32_t val) {
+    return resultUInt32BaseSign(context, val, 10, TRUE);
+}
+
+/**
+ * Write unsigned 32 bit integer value in specific base to the result
+ * Write signed/unsigned 32 bit integer value in specific base to the result
+ * @param context
+ * @param val
+ * @return
+ */
+size_t SCPI_ResultUInt32Base(scpi_t * context, uint32_t val, int8_t base) {
+    return resultUInt32BaseSign(context, val, base, FALSE);
+}
+
+/**
+ * Write signed 64 bit integer value to the result
+ * @param context
+ * @param val
+ * @return
+ */
+size_t SCPI_ResultInt64(scpi_t * context, int64_t val) {
+    return resultUInt64BaseSign(context, val, 10, TRUE);
+}
+
+/**
+ * Write unsigned 64 bit integer value in specific base to the result
+ * @param context
+ * @param val
+ * @return
+ */
+size_t SCPI_ResultUInt64Base(scpi_t * context, uint64_t val, int8_t base) {
+    return resultUInt64BaseSign(context, val, base, FALSE);
 }
 
 /**
@@ -468,7 +469,7 @@
     char block_header[12];
     size_t header_len;
     block_header[0] = '#';
-    SCPI_Int32ToStr(len, block_header + 2, 10, 10, FALSE);
+    SCPI_UInt32ToStrBase((uint32_t) len, block_header + 2, 10, 10);
 
     header_len = strlen(block_header + 2);
     block_header[1] = (char)(header_len + '0');
@@ -487,7 +488,7 @@
  * @return
  */
 size_t SCPI_ResultBool(scpi_t * context, scpi_bool_t val) {
-    return SCPI_ResultInt32Base(context, val ? 1 : 0, 10, FALSE);
+    return resultUInt32BaseSign(context, val ? 1 : 0, 10, FALSE);
 }
 
 /* parsing parameters */
diff --git a/libscpi/src/utils.c b/libscpi/src/utils.c
index 711782d..62de94a 100644
--- a/libscpi/src/utils.c
+++ b/libscpi/src/utils.c
@@ -69,7 +69,7 @@
 }
 
 /**
- * Converts signed/unsigned 32 bit integer value to string
+ * Converts signed/unsigned 32 bit integer value to string in specific base
  * @param val   integer value
  * @param str   converted textual representation
  * @param len   string buffer length
@@ -77,7 +77,7 @@
  * @param sign  
  * @return number of bytes written to str (without '\0')
  */
-size_t SCPI_Int32ToStr(int32_t val, char * str, size_t len, int8_t base, scpi_bool_t sign) {
+static size_t UInt32ToStrBaseSign(uint32_t val, char * str, size_t len, int8_t base, scpi_bool_t sign) {
     const char digits[] = "0123456789ABCDEF";
 
 #define ADD_CHAR(c) if (pos < len) str[pos++] = (c)
@@ -110,7 +110,7 @@
         }
 
         // add sign for numbers in base 10
-        if (sign && (val < 0) && (base == 10)) {
+        if (sign && ((int32_t) val < 0) && (base == 10)) {
             uval = -val;
             ADD_CHAR('-');
         }
@@ -134,7 +134,30 @@
 }
 
 /**
- * Converts signed/unsigned 64 bit integer value to string
+ * Converts signed 32 bit integer value to string
+ * @param val   integer value
+ * @param str   converted textual representation
+ * @param len   string buffer length
+ * @return number of bytes written to str (without '\0')
+ */
+size_t SCPI_Int32ToStr(int32_t val, char * str, size_t len) {
+    UInt32ToStrBaseSign((int32_t) val, str, len, 10, TRUE);
+}
+
+/**
+ * Converts unsigned 32 bit integer value to string in specific base
+ * @param val   integer value
+ * @param str   converted textual representation
+ * @param len   string buffer length
+ * @param base  output base
+ * @return number of bytes written to str (without '\0')
+ */
+size_t SCPI_UInt32ToStrBase(uint32_t val, char * str, size_t len, int8_t base) {
+    UInt32ToStrBaseSign(val, str, len, base, TRUE);
+}
+
+/**
+ * Converts signed/unsigned 64 bit integer value to string in specific base
  * @param val   integer value
  * @param str   converted textual representation
  * @param len   string buffer length
@@ -142,7 +165,7 @@
  * @param sign  
  * @return number of bytes written to str (without '\0')
  */
-size_t SCPI_Int64ToStr(int64_t val, char * str, size_t len, int8_t base, scpi_bool_t sign) {
+static size_t UInt64ToStrBaseSign(uint64_t val, char * str, size_t len, int8_t base, scpi_bool_t sign) {
     const char digits[] = "0123456789ABCDEF";
 
 #define ADD_CHAR(c) if (pos < len) str[pos++] = (c)
@@ -175,7 +198,7 @@
         }
 
         // add sign for numbers in base 10
-        if (sign && (val < 0) && (base == 10)) {
+        if (sign && ((int64_t) val < 0) && (base == 10)) {
             uval = -val;
             ADD_CHAR('-');
         }
@@ -199,6 +222,29 @@
 }
 
 /**
+ * Converts signed 64 bit integer value to string
+ * @param val   integer value
+ * @param str   converted textual representation
+ * @param len   string buffer length
+ * @return number of bytes written to str (without '\0')
+ */
+size_t SCPI_Int64ToStr(int64_t val, char * str, size_t len) {
+    UInt64ToStrBaseSign((int64_t) val, str, len, 10, TRUE);
+}
+
+/**
+ * Converts signed/unsigned 64 bit integer value to string in specific base
+ * @param val   integer value
+ * @param str   converted textual representation
+ * @param len   string buffer length
+ * @param base  output base
+ * @return number of bytes written to str (without '\0')
+ */
+size_t SCPI_UInt64ToStrBase(uint64_t val, char * str, size_t len, int8_t base) {
+    UInt64ToStrBaseSign(val, str, len, base, TRUE);
+}
+
+/**
  * Converts double value to string
  * @param val   double value
  * @param str   converted textual representation
diff --git a/libscpi/test/test_scpi_utils.c b/libscpi/test/test_scpi_utils.c
index 5951520..84b382b 100644
--- a/libscpi/test/test_scpi_utils.c
+++ b/libscpi/test/test_scpi_utils.c
@@ -76,53 +76,16 @@
     char ref[max];
     size_t len;
 
-    // test conversion to decimal numbers
+    // test signed conversion to decimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 10, TRUE);
+        len = SCPI_Int32ToStr(val[i], str, max);
         snprintf(ref, max, "%"PRIi32, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
     }
-
-    // test conversion to hexadecimal numbers
-    for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 16, TRUE);
-        snprintf(ref, max, "%"PRIX32, val[i]);
-        CU_ASSERT(len == strlen(ref));
-        CU_ASSERT_STRING_EQUAL(str, ref);
-    }
-
-    // test conversion to octal numbers
-    for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 8, TRUE);
-        snprintf(ref, max, "%"PRIo32, val[i]);
-        CU_ASSERT(len == strlen(ref));
-        CU_ASSERT_STRING_EQUAL(str, ref);
-    }
-
-    // test conversion to binary numbers
-    len = SCPI_Int32ToStr(0, str, max, 2, TRUE);
-    CU_ASSERT(len == 1);
-    CU_ASSERT_STRING_EQUAL(str, "0");
-
-    len = SCPI_Int32ToStr(1, str, max, 2, TRUE);
-    CU_ASSERT(len == 1);
-    CU_ASSERT_STRING_EQUAL(str, "1");
-
-    len = SCPI_Int32ToStr(-1, str, max, 2, TRUE);
-    CU_ASSERT(len == 32);
-    CU_ASSERT_STRING_EQUAL(str, "11111111111111111111111111111111");
-
-    len = SCPI_Int32ToStr(0x01234567, str, max, 2, TRUE);
-    CU_ASSERT(len == 25);
-    CU_ASSERT_STRING_EQUAL(str, "1001000110100010101100111");
-
-    len = SCPI_Int32ToStr(0x89abcdef, str, max, 2, TRUE);
-    CU_ASSERT(len == 32);
-    CU_ASSERT_STRING_EQUAL(str, "10001001101010111100110111101111");
 }
 
-static void test_UInt32ToStr() {
+static void test_UInt32ToStrBase() {
     const size_t max=32+1;
     uint32_t val[] = {0, 1, -1, INT32_MIN, INT32_MAX, 0x01234567, 0x89abcdef};
     char str[max];
@@ -131,7 +94,7 @@
 
     // test conversion to decimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 10, FALSE);
+        len = SCPI_UInt32ToStrBase(val[i], str, max, 10);
         snprintf(ref, max, "%"PRIu32, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
@@ -139,7 +102,7 @@
 
     // test conversion to hexadecimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 16, FALSE);
+        len = SCPI_UInt32ToStrBase(val[i], str, max, 16);
         snprintf(ref, max, "%"PRIX32, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
@@ -147,11 +110,32 @@
 
     // test conversion to octal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int32ToStr(val[i], str, max, 8, FALSE);
+        len = SCPI_UInt32ToStrBase(val[i], str, max, 8);
         snprintf(ref, max, "%"PRIo32, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
     }
+
+    // test conversion to binary numbers
+    len = SCPI_UInt32ToStrBase(0, str, max, 2);
+    CU_ASSERT(len == 1);
+    CU_ASSERT_STRING_EQUAL(str, "0");
+
+    len = SCPI_UInt32ToStrBase(1, str, max, 2);
+    CU_ASSERT(len == 1);
+    CU_ASSERT_STRING_EQUAL(str, "1");
+
+    len = SCPI_UInt32ToStrBase(-1, str, max, 2);
+    CU_ASSERT(len == 32);
+    CU_ASSERT_STRING_EQUAL(str, "11111111111111111111111111111111");
+
+    len = SCPI_UInt32ToStrBase(0x01234567, str, max, 2);
+    CU_ASSERT(len == 25);
+    CU_ASSERT_STRING_EQUAL(str, "1001000110100010101100111");
+
+    len = SCPI_UInt32ToStrBase(0x89abcdef, str, max, 2);
+    CU_ASSERT(len == 32);
+    CU_ASSERT_STRING_EQUAL(str, "10001001101010111100110111101111");
 }
 
 static void test_Int64ToStr() {
@@ -163,51 +147,14 @@
 
     // test conversion to decimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 10, TRUE);
+        len = SCPI_Int64ToStr(val[i], str, max);
         snprintf(ref, max, "%"PRIi64, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
     }
-
-    // test conversion to hexadecimal numbers
-    for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 16, TRUE);
-        snprintf(ref, max, "%"PRIX64, val[i]);
-        CU_ASSERT(len == strlen(ref));
-        CU_ASSERT_STRING_EQUAL(str, ref);
-    }
-
-    // test conversion to octal numbers
-    for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 8, TRUE);
-        snprintf(ref, max, "%"PRIo64, val[i]);
-        CU_ASSERT(len == strlen(ref));
-        CU_ASSERT_STRING_EQUAL(str, ref);
-    }
-
-    // test conversion to binary numbers
-    len = SCPI_Int64ToStr(0, str, max, 2, TRUE);
-    CU_ASSERT(len == 1);
-    CU_ASSERT_STRING_EQUAL(str, "0");
-
-    len = SCPI_Int64ToStr(1, str, max, 2, TRUE);
-    CU_ASSERT(len == 1);
-    CU_ASSERT_STRING_EQUAL(str, "1");
-
-    len = SCPI_Int64ToStr(-1, str, max, 2, TRUE);
-    CU_ASSERT(len == 64);
-    CU_ASSERT_STRING_EQUAL(str, "1111111111111111111111111111111111111111111111111111111111111111");
-
-    len = SCPI_Int64ToStr(0x0123456789abcdef, str, max, 2, TRUE);
-    CU_ASSERT(len == 57);
-    CU_ASSERT_STRING_EQUAL(str, "100100011010001010110011110001001101010111100110111101111");
-
-    len = SCPI_Int64ToStr(0xfedcba9876543210, str, max, 2, TRUE);
-    CU_ASSERT(len == 64);
-    CU_ASSERT_STRING_EQUAL(str, "1111111011011100101110101001100001110110010101000011001000010000");
 }
 
-static void test_UInt64ToStr() {
+static void test_UInt64ToStrBase() {
     const size_t max=64+1;
     uint64_t val[] = {0, 1, -1, INT64_MIN, INT64_MAX, 0x0123456789abcdef, 0xfedcba9876543210};
     char str[max];
@@ -216,7 +163,7 @@
 
     // test conversion to decimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 10, FALSE);
+        len = SCPI_UInt64ToStrBase(val[i], str, max, 10);
         snprintf(ref, max, "%"PRIu64, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
@@ -224,7 +171,7 @@
 
     // test conversion to hexadecimal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 16, FALSE);
+        len = SCPI_UInt64ToStrBase(val[i], str, max, 16);
         snprintf(ref, max, "%"PRIX64, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
@@ -232,11 +179,32 @@
 
     // test conversion to octal numbers
     for (uintptr_t i=0; i<7; i++) {
-        len = SCPI_Int64ToStr(val[i], str, max, 8, FALSE);
+        len = SCPI_UInt64ToStrBase(val[i], str, max, 8);
         snprintf(ref, max, "%"PRIo64, val[i]);
         CU_ASSERT(len == strlen(ref));
         CU_ASSERT_STRING_EQUAL(str, ref);
     }
+
+    // test conversion to binary numbers
+    len = SCPI_UInt64ToStrBase(0, str, max, 2);
+    CU_ASSERT(len == 1);
+    CU_ASSERT_STRING_EQUAL(str, "0");
+
+    len = SCPI_UInt64ToStrBase(1, str, max, 2);
+    CU_ASSERT(len == 1);
+    CU_ASSERT_STRING_EQUAL(str, "1");
+
+    len = SCPI_UInt64ToStrBase(-1, str, max, 2);
+    CU_ASSERT(len == 64);
+    CU_ASSERT_STRING_EQUAL(str, "1111111111111111111111111111111111111111111111111111111111111111");
+
+    len = SCPI_UInt64ToStrBase(0x0123456789abcdef, str, max, 2);
+    CU_ASSERT(len == 57);
+    CU_ASSERT_STRING_EQUAL(str, "100100011010001010110011110001001101010111100110111101111");
+
+    len = SCPI_UInt64ToStrBase(0xfedcba9876543210, str, max, 2);
+    CU_ASSERT(len == 64);
+    CU_ASSERT_STRING_EQUAL(str, "1111111011011100101110101001100001110110010101000011001000010000");
 }
 
 static void test_doubleToStr() {
@@ -624,9 +592,9 @@
     if (0
             || (NULL == CU_add_test(pSuite, "strnpbrk", test_strnpbrk))
             || (NULL == CU_add_test(pSuite, "Int32ToStr", test_Int32ToStr))
-            || (NULL == CU_add_test(pSuite, "UInt32ToStr", test_UInt32ToStr))
+            || (NULL == CU_add_test(pSuite, "UInt32ToStrBase", test_UInt32ToStrBase))
             || (NULL == CU_add_test(pSuite, "Int64ToStr", test_Int64ToStr))
-            || (NULL == CU_add_test(pSuite, "UInt64ToStr", test_UInt64ToStr))
+            || (NULL == CU_add_test(pSuite, "UInt64ToStrBase", test_UInt64ToStrBase))
             || (NULL == CU_add_test(pSuite, "doubleToStr", test_doubleToStr))
             || (NULL == CU_add_test(pSuite, "strToInt32", test_strToInt32))
             || (NULL == CU_add_test(pSuite, "strToUInt32", test_strToUInt32))

--
Gitblit v1.9.1