<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/20331">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add osmo_float_str_to_int() and osmo_int_to_float_str_*()<br><br>This will be useful to handle latitude and longitude numbers for GAD, which is<br>the location estimate representation used for LCS (Location Services).<br><br>The OsmoSMLC VTY user interface will provide floating-point strings like<br>"23.456" while GAD stores them as micro-degress 23456000. The osmo_gad_to_str*<br>will also convert latitude and longitude to floating-point string.<br><br>There was code review concerns against adding this API, upon which I tried to<br>use floating point string formats. But I encountered various problems with<br>accuracy and trailing zeros. For global positioning data (latitude and<br>longitude), even inaccuracy on the sixth significant decimal digit causes<br>noticeable positional shift. To achieve sufficient accuracy on the least<br>significant end, I need to use double instead of float. To remove trailing<br>zeros, the idea was to use '%.6g' format, but that can cause rounding. '%.6f'<br>on a double looks ok, but always includes trailing zeros. A test program shows:<br><br> %.6g of ((double)(int32_t)23230100)/1e6 = "23.2301"     <-- good<br> %.6g of ((double)(int32_t)42419993)/1e6 = "42.42"       <-- bad rounding<br> %.6g of ((double)(int32_t)23230199)/1e6 = "23.2302"     <-- bad rounding<br><br> %.6f of ((double)(int32_t)23230100)/1e6 = "23.230100"   <-- trailing zeros<br> %.6f of ((double)(int32_t)42419993)/1e6 = "42.419993"   <-- good<br> %.6f of ((double)(int32_t)23230199)/1e6 = "23.230199"   <-- good<br><br>It looks like when accepting that there will be trailing zeros, using double<br>with '%.6f' would work out, but in the end I am not certain enough that there<br>aren't more hidden rounding / precision glitches. Hence I decided to reinforce<br>the need to add this API: it is glitch free in sufficient precision for<br>latitude and longitude data, because it is based on integer arithmetic.<br><br>The need for this precision is particular to the (new) OsmoSMLC vty<br>configuration, where reading and writing back user config must not modify the<br>values the user entered. Considering to add these functions to osmo-smlc.git,<br>we might as well add them here to libosmocore utils, and also use them in<br>osmo_gad_to_str_*() functions.<br><br>Change-Id: Ib9aee749cd331712a4dcdadfb6a2dfa4c26da957<br>---<br>M include/osmocom/core/utils.h<br>M src/utils.c<br>M tests/utils/utils_test.c<br>M tests/utils/utils_test.ok<br>4 files changed, 1,000 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h</span><br><span>index 8619120..c9d5560 100644</span><br><span>--- a/include/osmocom/core/utils.h</span><br><span>+++ b/include/osmocom/core/utils.h</span><br><span>@@ -279,6 +279,10 @@</span><br><span> </span><br><span> bool osmo_str_startswith(const char *str, const char *startswith_str);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_float_str_to_int(int64_t *val, const char *str, unsigned int precision);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_int_to_float_str_buf(char *buf, size_t buflen, int64_t val, unsigned int precision);</span><br><span style="color: hsl(120, 100%, 40%);">+char *osmo_int_to_float_str_c(void *ctx, int64_t val, unsigned int precision);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Translate a buffer function to a talloc context function.</span><br><span>  * This is the full function body of a char *foo_name_c(void *ctx, val...) function, implemented by an</span><br><span>  * int foo_name_buf(buf, buflen, val...) function:</span><br><span>diff --git a/src/utils.c b/src/utils.c</span><br><span>index 772b671..c0ab166 100644</span><br><span>--- a/src/utils.c</span><br><span>+++ b/src/utils.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> #include <errno.h></span><br><span> #include <stdio.h></span><br><span> #include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <limits.h></span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/bit64gen.h></span><br><span>@@ -1208,4 +1209,192 @@</span><br><span>      return strncmp(str, startswith_str, strlen(startswith_str)) == 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Convert a string of a floating point number to a signed int, with a decimal factor (fixed-point precision).</span><br><span style="color: hsl(120, 100%, 40%);">+ * For example, with precision=3, convert "-1.23" to -1230. In other words, the float value is multiplied by</span><br><span style="color: hsl(120, 100%, 40%);">+ * 10 to-the-power-of precision to obtain the returned integer.</span><br><span style="color: hsl(120, 100%, 40%);">+ * The usable range of digits is -INT64_MAX .. INT64_MAX -- note, not INT64_MIN! The value of INT64_MIN is excluded to</span><br><span style="color: hsl(120, 100%, 40%);">+ * reduce implementation complexity. See also utils_test.c.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] val  Returned integer value.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] str  String of a float, like '-12.345'.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] in_len  Length of string to parse, or -1 to use strlen(str).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] precision  Fixed-point precision, or  * \returns 0 on success, negative on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_float_str_to_int(int64_t *val, const char *str, unsigned int precision)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  const char *point;</span><br><span style="color: hsl(120, 100%, 40%);">+    char *endptr;</span><br><span style="color: hsl(120, 100%, 40%);">+ const char *p;</span><br><span style="color: hsl(120, 100%, 40%);">+        int64_t sign = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+     int64_t integer = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  int64_t decimal = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  int64_t precision_factor;</span><br><span style="color: hsl(120, 100%, 40%);">+     int64_t integer_max;</span><br><span style="color: hsl(120, 100%, 40%);">+  int64_t decimal_max;</span><br><span style="color: hsl(120, 100%, 40%);">+  int i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(val);</span><br><span style="color: hsl(120, 100%, 40%);">+     *val = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!str)</span><br><span style="color: hsl(120, 100%, 40%);">+             return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (str[0] == '-') {</span><br><span style="color: hsl(120, 100%, 40%);">+          str = str + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                sign = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else if (str[0] == '+') {</span><br><span style="color: hsl(120, 100%, 40%);">+           str = str + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!str[0])</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Validate entire string as purely digits and at most one decimal dot. If not doing this here in advance,</span><br><span style="color: hsl(120, 100%, 40%);">+     * parsing digits might stop early because of precision cut-off and miss validation of input data. */</span><br><span style="color: hsl(120, 100%, 40%);">+ point = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ for (p = str; *p; p++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              if (*p == '.') {</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (point)</span><br><span style="color: hsl(120, 100%, 40%);">+                            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+                       point = p;</span><br><span style="color: hsl(120, 100%, 40%);">+            } else if (!isdigit(*p))</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Parse integer part if there is one. If the string starts with a point, there's nothing to parse for the</span><br><span style="color: hsl(120, 100%, 40%);">+         * integer part. */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!point || point > str) {</span><br><span style="color: hsl(120, 100%, 40%);">+               errno = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+            integer = strtoll(str, &endptr, 10);</span><br><span style="color: hsl(120, 100%, 40%);">+              if ((errno == ERANGE && (integer == LONG_MAX || integer == LONG_MIN))</span><br><span style="color: hsl(120, 100%, 40%);">+             || (errno != 0 && integer == 0))</span><br><span style="color: hsl(120, 100%, 40%);">+                  return -ERANGE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             if ((point && endptr != point)</span><br><span style="color: hsl(120, 100%, 40%);">+                    || (!point && *endptr))</span><br><span style="color: hsl(120, 100%, 40%);">+                   return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Parse the fractional part if there is any, and if the precision is nonzero (if we even care about fractional</span><br><span style="color: hsl(120, 100%, 40%);">+        * digits) */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (precision && point && point[1] != '\0') {</span><br><span style="color: hsl(120, 100%, 40%);">+         /* limit the number of digits parsed to 'precision'.</span><br><span style="color: hsl(120, 100%, 40%);">+           * If 'precision' is larger than the 19 digits representable in int64_t, skip some, to pick up lower</span><br><span style="color: hsl(120, 100%, 40%);">+           * magnitude digits. */</span><br><span style="color: hsl(120, 100%, 40%);">+               unsigned int skip_digits = (precision < 20) ? 0 : precision - 20;</span><br><span style="color: hsl(120, 100%, 40%);">+          char decimal_str[precision + 1];</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_strlcpy(decimal_str, point+1, precision+1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            /* fill with zeros to make exactly 'precision' digits */</span><br><span style="color: hsl(120, 100%, 40%);">+              for (i = strlen(decimal_str); i < precision; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                  decimal_str[i] = '0';</span><br><span style="color: hsl(120, 100%, 40%);">+         decimal_str[precision] = '\0';</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              for (i = 0; i < skip_digits; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* When skipping digits because precision > nr-of-digits-in-int64_t, they must be zero;</span><br><span style="color: hsl(120, 100%, 40%);">+                     * if there is a nonzero digit above the precision, it's -ERANGE. */</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (decimal_str[i] != '0')</span><br><span style="color: hsl(120, 100%, 40%);">+                            return -ERANGE;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             errno = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+            decimal = strtoll(decimal_str + skip_digits, &endptr, 10);</span><br><span style="color: hsl(120, 100%, 40%);">+                if ((errno == ERANGE && (decimal == LONG_MAX || decimal == LONG_MIN))</span><br><span style="color: hsl(120, 100%, 40%);">+             || (errno != 0 && decimal == 0))</span><br><span style="color: hsl(120, 100%, 40%);">+                  return -ERANGE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             if (*endptr)</span><br><span style="color: hsl(120, 100%, 40%);">+                  return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (precision > 18) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Special case of returning more digits than fit in int64_t range, e.g.</span><br><span style="color: hsl(120, 100%, 40%);">+               * osmo_float_str_to_int("0.0000000012345678901234567", precision=25) -> 12345678901234567. */</span><br><span style="color: hsl(120, 100%, 40%);">+           precision_factor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+         integer_max = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              decimal_max = INT64_MAX;</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Do not surpass the resulting int64_t range. Depending on the amount of precision, the integer part</span><br><span style="color: hsl(120, 100%, 40%);">+          * and decimal part have specific ranges they must comply to. */</span><br><span style="color: hsl(120, 100%, 40%);">+              precision_factor = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+         for (i = 0; i < precision; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                 precision_factor *= 10;</span><br><span style="color: hsl(120, 100%, 40%);">+          integer_max = INT64_MAX / precision_factor;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (integer == integer_max)</span><br><span style="color: hsl(120, 100%, 40%);">+                   decimal_max = INT64_MAX % precision_factor;</span><br><span style="color: hsl(120, 100%, 40%);">+           else</span><br><span style="color: hsl(120, 100%, 40%);">+                  decimal_max = INT64_MAX;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (integer > integer_max)</span><br><span style="color: hsl(120, 100%, 40%);">+         return -ERANGE;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (decimal > decimal_max)</span><br><span style="color: hsl(120, 100%, 40%);">+         return -ERANGE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     *val = sign * (integer * precision_factor + decimal);</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Convert an integer with a factor of a million to a floating point string.</span><br><span style="color: hsl(120, 100%, 40%);">+ * For example, with precision = 3, convert -1230 to "-1.23".</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] buf  Buffer to write string to.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] buflen  sizeof(buf).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] val  Value to convert to float.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \returns number of chars that would be written, like snprintf().</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_int_to_float_str_buf(char *buf, size_t buflen, int64_t val, unsigned int precision)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct osmo_strbuf sb = { .buf = buf, .len = buflen };</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int i;</span><br><span style="color: hsl(120, 100%, 40%);">+       unsigned int w;</span><br><span style="color: hsl(120, 100%, 40%);">+       int64_t precision_factor;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (val < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_STRBUF_PRINTF(sb, "-");</span><br><span style="color: hsl(120, 100%, 40%);">+                if (val == INT64_MIN) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       OSMO_STRBUF_PRINTF(sb, "ERR");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return sb.chars_needed;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             val = -val;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (precision > 18) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Special case of returning more digits than fit in int64_t range, e.g.</span><br><span style="color: hsl(120, 100%, 40%);">+               * osmo_int_to_float_str(12345678901234567, precision=25) -> "0.0000000012345678901234567". */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!val) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   OSMO_STRBUF_PRINTF(sb, "0");</span><br><span style="color: hsl(120, 100%, 40%);">+                        return sb.chars_needed;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_STRBUF_PRINTF(sb, "0.");</span><br><span style="color: hsl(120, 100%, 40%);">+               for (i = 19; i < precision; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                   OSMO_STRBUF_PRINTF(sb, "0");</span><br><span style="color: hsl(120, 100%, 40%);">+                precision = 19;</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              precision_factor = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+         for (i = 0; i < precision; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+                 precision_factor *= 10;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                OSMO_STRBUF_PRINTF(sb, "%" PRId64, val / precision_factor);</span><br><span style="color: hsl(120, 100%, 40%);">+         val %= precision_factor;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (!val)</span><br><span style="color: hsl(120, 100%, 40%);">+                     return sb.chars_needed;</span><br><span style="color: hsl(120, 100%, 40%);">+               OSMO_STRBUF_PRINTF(sb, ".");</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* print fractional part, skip trailing zeros */</span><br><span style="color: hsl(120, 100%, 40%);">+      w = precision;</span><br><span style="color: hsl(120, 100%, 40%);">+        while (!(val % 10)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         val /= 10;</span><br><span style="color: hsl(120, 100%, 40%);">+            w--;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_STRBUF_PRINTF(sb, "%0*" PRId64, w, val);</span><br><span style="color: hsl(120, 100%, 40%);">+       return sb.chars_needed;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Convert an integer with a factor of a million to a floating point string.</span><br><span style="color: hsl(120, 100%, 40%);">+ * For example, convert -1230000 to "-1.23".</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] ctx  Talloc ctx to allocate string buffer from.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] val  Value to convert to float.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \returns resulting string, dynamically allocated.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+char *osmo_int_to_float_str_c(void *ctx, int64_t val, unsigned int precision)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_NAME_C_IMPL(ctx, 16, "ERROR", osmo_int_to_float_str_buf, val, precision)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! @} */</span><br><span>diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c</span><br><span>index 9ff023b..108bf5a 100644</span><br><span>--- a/tests/utils/utils_test.c</span><br><span>+++ b/tests/utils/utils_test.c</span><br><span>@@ -34,6 +34,7 @@</span><br><span> #include <arpa/inet.h></span><br><span> #include <errno.h></span><br><span> #include <limits.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span> </span><br><span> static void hexdump_test(void)</span><br><span> {</span><br><span>@@ -1443,6 +1444,446 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct float_str_to_int_test {</span><br><span style="color: hsl(120, 100%, 40%);">+    unsigned int precision;</span><br><span style="color: hsl(120, 100%, 40%);">+       const char *str;</span><br><span style="color: hsl(120, 100%, 40%);">+      int64_t expect_val;</span><br><span style="color: hsl(120, 100%, 40%);">+   int expect_err;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+struct float_str_to_int_test float_str_to_int_tests[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "1", 1 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "12.345", 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "+12.345", 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, "-12.345", -12 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "0.345", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, ".345", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, "-0.345", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 0, "-.345", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, "12.", 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, "-180", -180 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "180", 180 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, "360", 360 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, "123.4567890123", 123 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, "123.4567890123456789012345", 123 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, "9223372036854775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "-9223372036854775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "-9223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, "9223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "-9223372036854775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, "100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "-100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 0, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 0, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 0, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 0, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 0, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 0, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "1", 10 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, "12.345", 123 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, "+12.345", 123 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "-12.345", -123 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, "0.345", 3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 1, ".345", 3 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, "-0.345", -3 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 1, "-.345", -3 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, "12.", 120 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 1, "-180", -1800 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, "180", 1800 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, "360", 3600 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, "123.4567890123", 1234 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "123.4567890123456789012345", 1234 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 1, "922337203685477580.7", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, "-922337203685477580.7", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, "-922337203685477580.8", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "922337203685477580.8", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, "-922337203685477580.9", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "-100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 1, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 1, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 1, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 1, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "1", 1000000 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 6, "12.345", 12345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 6, "+12.345", 12345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, "-12.345", -12345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 6, "0.345", 345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, ".345", 345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "-0.345", -345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, "-.345", -345000 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "12.", 12000000 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, "-180", -180000000 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 6, "180", 180000000 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "360", 360000000 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "123.4567890123", 123456789 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, "123.4567890123456789012345", 123456789 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, "9223372036854.775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 6, "-9223372036854.775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, "-9223372036854.775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "9223372036854.775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 6, "-9223372036854.775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "-100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 6, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 6, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 18, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "1", 1000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 18, "1.2345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "+1.2345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 18, "-1.2345", -1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, "0.345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, ".345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 18, "-0.345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "-.345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "2.", 2000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, "-8", -8000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 18, "1.234567890123", 1234567890123000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "1.234567890123456789012345", 1234567890123456789LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, "123.4567890123", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "9.223372036854775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, "-9.223372036854775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "-9.223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "9.223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, "-9.223372036854775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "-100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 18, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 18, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 18, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 18, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, ".1", 1000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, ".12345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, "+.12345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, "-.12345", -1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 19, "0.0345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, ".0345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 19, "-0.0345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, "-.0345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, ".2", 2000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, "-.8", -8000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 19, ".1234567890123", 1234567890123000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, ".1234567890123456789012345", 1234567890123456789LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, "123.4567890123", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, ".9223372036854775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 19, "-.9223372036854775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, "-.9223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, ".9223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 19, "-.9223372036854775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, "100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, "-100000000000000000000", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 19, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 19, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 19, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 19, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 19, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 20, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, ".01", 1000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 20, ".012345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, "+.012345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 20, "-.012345", -1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 20, "0.00345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 20, ".00345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "-0.00345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 20, "-.00345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, ".02", 2000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 20, "-.08", -8000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, ".01234567890123", 1234567890123000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, ".01234567890123456789012345", 1234567890123456789LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 20, "12.34567890123", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 20, ".09223372036854775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "-.09223372036854775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, "-.09223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 20, ".09223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "-.09223372036854775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 20, ".1", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 20, "-.1", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 20, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 20, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 20, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 20, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 20, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 20, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 20, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 20, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 25, "0", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, ".0000001", 1000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, ".00000012345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 25, "+.00000012345", 1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, "-.00000012345", -1234500000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 25, "0.0000000345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 25, ".0000000345", 345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 25, "-0.0000000345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, "-.0000000345", -345000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 25, ".0000002", 2000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, "-.0000008", -8000000000000000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 25, ".0000001234567890123", 1234567890123000000LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 25, ".0000001234567890123456789012345", 1234567890123456789LL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, ".0001234567890123", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 25, ".0000009223372036854775807", 9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 25, "-.0000009223372036854775807", -9223372036854775807LL },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 25, "-.0000009223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 25, ".0000009223372036854775808", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 25, "-.0000009223372036854775809", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 25, ".000001", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 25, "-.000001", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, "999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 25, "-999999999999999999999999999.99", .expect_err = -ERANGE },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 25, "1.2.3", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, "foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 25, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, "1.foo", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 25, "12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 25, "-12.-345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, "12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 25, "+12.+345", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, "", .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 25, NULL, .expect_err = -EINVAL },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+const char *errno_str(int rc)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc == -EINVAL)</span><br><span style="color: hsl(120, 100%, 40%);">+            return "=-EINVAL";</span><br><span style="color: hsl(120, 100%, 40%);">+  if (rc == -ERANGE)</span><br><span style="color: hsl(120, 100%, 40%);">+            return "=-ERANGE";</span><br><span style="color: hsl(120, 100%, 40%);">+  return "";</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+void test_float_str_to_int()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      const struct float_str_to_int_test *t;</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("--- %s\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+       for (t = float_str_to_int_tests; (t - float_str_to_int_tests) < ARRAY_SIZE(float_str_to_int_tests); t++) {</span><br><span style="color: hsl(120, 100%, 40%);">+         int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+               int64_t val;</span><br><span style="color: hsl(120, 100%, 40%);">+          rc = osmo_float_str_to_int(&val, t->str, t->precision);</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("osmo_float_str_to_int(%s, %u) -> rc=%d%s val=%" PRId64 "\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_quote_str(t->str, -1), t->precision, rc, errno_str(rc), val);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             if (rc != t->expect_err)</span><br><span style="color: hsl(120, 100%, 40%);">+                   printf("  ERROR: expected rc=%d%s\n", t->expect_err, errno_str(t->expect_err));</span><br><span style="color: hsl(120, 100%, 40%);">+               if (val != t->expect_val)</span><br><span style="color: hsl(120, 100%, 40%);">+                  printf("  ERROR: expected val=%" PRId64 "\n", t->expect_val);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (rc != t->expect_err||val != t->expect_val)</span><br><span style="color: hsl(120, 100%, 40%);">+          exit(0);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct int_to_float_str_test {</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int precision;</span><br><span style="color: hsl(120, 100%, 40%);">+       int64_t val;</span><br><span style="color: hsl(120, 100%, 40%);">+  const char *expect_str;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+struct int_to_float_str_test int_to_float_str_tests[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, 1, "1" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, 1000000, "1000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, -1000000, "-1000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, 1000001, "1000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, -1000001, "-1000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, 1000100, "1000100" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, -1010000, "-1010000" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, 1100000, "1100000" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, 10000000, "10000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, -10000000, "-10000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, 100000000, "100000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 0, -100000000, "-100000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 0, 9223372036854775807, "9223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 0, -9223372036854775807, "-9223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 0, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 1, 1, "0.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 1, 1000000, "100000" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, -1000000, "-100000" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, 1000001, "100000.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, -1000001, "-100000.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, 1000100, "100010" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, -1010000, "-101000" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, 1100000, "110000" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 1, 10000000, "1000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, -10000000, "-1000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, 100000000, "10000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, -100000000, "-10000000" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 1, 9223372036854775807, "922337203685477580.7" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 1, -9223372036854775807, "-922337203685477580.7" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 1, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 3, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 3, 1, "0.001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 3, 1000000, "1000" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 3, -1000000, "-1000" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 3, 1000001, "1000.001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 3, -1000001, "-1000.001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 3, 1000100, "1000.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 3, -1010000, "-1010" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 3, 1100000, "1100" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 3, 10000000, "10000" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 3, -10000000, "-10000" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 3, 100000000, "100000" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 3, -100000000, "-100000" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 3, 9223372036854775807, "9223372036854775.807" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 3, -9223372036854775807, "-9223372036854775.807" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 3, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, 1, "0.000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 6, 1000000, "1" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 6, -1000000, "-1" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, 1000001, "1.000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, -1000001, "-1.000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 6, 1000100, "1.0001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, -1010000, "-1.01" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 6, 1100000, "1.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, 10000000, "10" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 6, -10000000, "-10" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, 100000000, "100" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 6, -100000000, "-100" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 6, 9223372036854775807, "9223372036854.775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 6, -9223372036854775807, "-9223372036854.775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 6, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ { 17, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 17, 1, "0.00000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 17, 1000000, "0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 17, -1000000, "-0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 17, 1000001, "0.00000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 17, -1000001, "-0.00000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 17, 1000100, "0.000000000010001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 17, -1010000, "-0.0000000000101" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 17, 1100000, "0.000000000011" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 17, 10000000, "0.0000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 17, -10000000, "-0.0000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 17, 100000000, "0.000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 17, -100000000, "-0.000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 17, 9223372036854775807, "92.23372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 17, -9223372036854775807, "-92.23372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 17, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 18, 1, "0.000000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, 1000000, "0.000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, -1000000, "-0.000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, 1000001, "0.000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 18, -1000001, "-0.000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, 1000100, "0.0000000000010001" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, -1010000, "-0.00000000000101" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, 1100000, "0.0000000000011" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 18, 10000000, "0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, -10000000, "-0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, 100000000, "0.0000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { 18, -100000000, "-0.0000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, 9223372036854775807, "9.223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 18, -9223372036854775807, "-9.223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+      { 18, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, 1, "0.0000000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 19, 1000000, "0.0000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 19, -1000000, "-0.0000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 19, 1000001, "0.0000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 19, -1000001, "-0.0000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 19, 1000100, "0.00000000000010001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, -1010000, "-0.000000000000101" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, 1100000, "0.00000000000011" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { 19, 10000000, "0.000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 19, -10000000, "-0.000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 19, 100000000, "0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 19, -100000000, "-0.00000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 19, 9223372036854775807, "0.9223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 19, -9223372036854775807, "-0.9223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 19, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { 23, 0, "0" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, 1, "0.00000000000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, 1000000, "0.00000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, -1000000, "-0.00000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 23, 1000001, "0.00000000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 23, -1000001, "-0.00000000000000001000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, 1000100, "0.000000000000000010001" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 23, -1010000, "-0.0000000000000000101" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 23, 1100000, "0.000000000000000011" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { 23, 10000000, "0.0000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, -10000000, "-0.0000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 23, 100000000, "0.000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { 23, -100000000, "-0.000000000000001" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 23, 9223372036854775807, "0.00009223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { 23, -9223372036854775807, "-0.00009223372036854775807" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { 23, INT64_MIN, "-ERR" },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+void test_int_to_float_str()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     const struct int_to_float_str_test *t;</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("--- %s\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+       for (t = int_to_float_str_tests;</span><br><span style="color: hsl(120, 100%, 40%);">+           (t - int_to_float_str_tests) < ARRAY_SIZE(int_to_float_str_tests);</span><br><span style="color: hsl(120, 100%, 40%);">+         t++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           char buf[128];</span><br><span style="color: hsl(120, 100%, 40%);">+                int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_int_to_float_str_buf(buf, sizeof(buf), t->val, t->precision);</span><br><span style="color: hsl(120, 100%, 40%);">+         printf("osmo_int_to_float_str_buf(%" PRId64 ", %u) -> rc=%d str=%s\n", t->val, t->precision, rc,</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_quote_str(buf, -1));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            if (rc != strlen(buf))</span><br><span style="color: hsl(120, 100%, 40%);">+                        printf("  ERROR: expected rc=%zu\n", strlen(buf));</span><br><span style="color: hsl(120, 100%, 40%);">+          if (strcmp(buf, t->expect_str))</span><br><span style="color: hsl(120, 100%, 40%);">+                    printf("  ERROR: expected str=%s\n", osmo_quote_str(t->expect_str, -1));</span><br><span style="color: hsl(120, 100%, 40%);">+         if (rc != strlen(buf) || strcmp(buf, t->expect_str))</span><br><span style="color: hsl(120, 100%, 40%);">+                       exit(0);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>       static const struct log_info log_info = {};</span><br><span>@@ -1468,5 +1909,7 @@</span><br><span>  name_c_impl_test();</span><br><span>  osmo_print_n_test();</span><br><span>         osmo_strnchr_test();</span><br><span style="color: hsl(120, 100%, 40%);">+  test_float_str_to_int();</span><br><span style="color: hsl(120, 100%, 40%);">+      test_int_to_float_str();</span><br><span>     return 0;</span><br><span> }</span><br><span>diff --git a/tests/utils/utils_test.ok b/tests/utils/utils_test.ok</span><br><span>index f1b07fa..0c71b8f 100644</span><br><span>--- a/tests/utils/utils_test.ok</span><br><span>+++ b/tests/utils/utils_test.ok</span><br><span>@@ -505,3 +505,367 @@</span><br><span> osmo_strnchr("foo=bar", 0, '=') -> -1</span><br><span> osmo_strnchr("foo", 9, '=') -> -1</span><br><span> osmo_strnchr("foo", 9, '\0') -> 3</span><br><span style="color: hsl(120, 100%, 40%);">+--- test_float_str_to_int</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 0) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1", 0) -> rc=0 val=1</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.345", 0) -> rc=0 val=12</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.345", 0) -> rc=0 val=12</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.345", 0) -> rc=0 val=-12</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.345", 0) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".345", 0) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.345", 0) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.345", 0) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.", 0) -> rc=0 val=12</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-180", 0) -> rc=0 val=-180</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("180", 0) -> rc=0 val=180</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("360", 0) -> rc=0 val=360</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123", 0) -> rc=0 val=123</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123456789012345", 0) -> rc=0 val=123</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9223372036854775807", 0) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854775807", 0) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854775808", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9223372036854775808", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854775809", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("100000000000000000000", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-100000000000000000000", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 0) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 0) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 1) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1", 1) -> rc=0 val=10</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.345", 1) -> rc=0 val=123</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.345", 1) -> rc=0 val=123</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.345", 1) -> rc=0 val=-123</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.345", 1) -> rc=0 val=3</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".345", 1) -> rc=0 val=3</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.345", 1) -> rc=0 val=-3</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.345", 1) -> rc=0 val=-3</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.", 1) -> rc=0 val=120</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-180", 1) -> rc=0 val=-1800</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("180", 1) -> rc=0 val=1800</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("360", 1) -> rc=0 val=3600</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123", 1) -> rc=0 val=1234</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123456789012345", 1) -> rc=0 val=1234</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("922337203685477580.7", 1) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-922337203685477580.7", 1) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-922337203685477580.8", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("922337203685477580.8", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-922337203685477580.9", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("100000000000000000000", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-100000000000000000000", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 1) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 1) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 6) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1", 6) -> rc=0 val=1000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.345", 6) -> rc=0 val=12345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.345", 6) -> rc=0 val=12345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.345", 6) -> rc=0 val=-12345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.345", 6) -> rc=0 val=345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".345", 6) -> rc=0 val=345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.345", 6) -> rc=0 val=-345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.345", 6) -> rc=0 val=-345000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.", 6) -> rc=0 val=12000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-180", 6) -> rc=0 val=-180000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("180", 6) -> rc=0 val=180000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("360", 6) -> rc=0 val=360000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123", 6) -> rc=0 val=123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123456789012345", 6) -> rc=0 val=123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9223372036854.775807", 6) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854.775807", 6) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854.775808", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9223372036854.775808", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9223372036854.775809", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("100000000000000000000", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-100000000000000000000", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 6) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 6) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 18) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1", 18) -> rc=0 val=1000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2345", 18) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+1.2345", 18) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-1.2345", 18) -> rc=0 val=-1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.345", 18) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".345", 18) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.345", 18) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.345", 18) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("2.", 18) -> rc=0 val=2000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-8", 18) -> rc=0 val=-8000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.234567890123", 18) -> rc=0 val=1234567890123000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.234567890123456789012345", 18) -> rc=0 val=1234567890123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9.223372036854775807", 18) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9.223372036854775807", 18) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9.223372036854775808", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("9.223372036854775808", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-9.223372036854775809", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("100000000000000000000", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-100000000000000000000", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 18) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 18) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 19) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".1", 19) -> rc=0 val=1000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".12345", 19) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+.12345", 19) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.12345", 19) -> rc=0 val=-1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.0345", 19) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0345", 19) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.0345", 19) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0345", 19) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".2", 19) -> rc=0 val=2000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.8", 19) -> rc=0 val=-8000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".1234567890123", 19) -> rc=0 val=1234567890123000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".1234567890123456789012345", 19) -> rc=0 val=1234567890123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("123.4567890123", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".9223372036854775807", 19) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.9223372036854775807", 19) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.9223372036854775808", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".9223372036854775808", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.9223372036854775809", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("100000000000000000000", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-100000000000000000000", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 19) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 19) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 20) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".01", 20) -> rc=0 val=1000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".012345", 20) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+.012345", 20) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.012345", 20) -> rc=0 val=-1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.00345", 20) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".00345", 20) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.00345", 20) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.00345", 20) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".02", 20) -> rc=0 val=2000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.08", 20) -> rc=0 val=-8000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".01234567890123", 20) -> rc=0 val=1234567890123000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".01234567890123456789012345", 20) -> rc=0 val=1234567890123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.34567890123", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".09223372036854775807", 20) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.09223372036854775807", 20) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.09223372036854775808", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".09223372036854775808", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.09223372036854775809", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".1", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.1", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 20) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 20) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0", 25) -> rc=0 val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000001", 25) -> rc=0 val=1000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".00000012345", 25) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+.00000012345", 25) -> rc=0 val=1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.00000012345", 25) -> rc=0 val=-1234500000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("0.0000000345", 25) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000000345", 25) -> rc=0 val=345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-0.0000000345", 25) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0000000345", 25) -> rc=0 val=-345000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000002", 25) -> rc=0 val=2000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0000008", 25) -> rc=0 val=-8000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000001234567890123", 25) -> rc=0 val=1234567890123000000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000001234567890123456789012345", 25) -> rc=0 val=1234567890123456789</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0001234567890123", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000009223372036854775807", 25) -> rc=0 val=9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0000009223372036854775807", 25) -> rc=0 val=-9223372036854775807</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0000009223372036854775808", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".0000009223372036854775808", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.0000009223372036854775809", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(".000001", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-.000001", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("999999999999999999999999999.99", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-999999999999999999999999999.99", 25) -> rc=-34=-ERANGE val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.2.3", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("foo", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("1.foo", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.-345", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("-12.-345", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("12.+345", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("+12.+345", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int("", 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_float_str_to_int(NULL, 25) -> rc=-22=-EINVAL val=0</span><br><span style="color: hsl(120, 100%, 40%);">+--- test_int_to_float_str</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 0) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 0) -> rc=1 str="1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 0) -> rc=7 str="1000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 0) -> rc=8 str="-1000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 0) -> rc=7 str="1000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 0) -> rc=8 str="-1000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 0) -> rc=7 str="1000100"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 0) -> rc=8 str="-1010000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 0) -> rc=7 str="1100000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 0) -> rc=8 str="10000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 0) -> rc=9 str="-10000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 0) -> rc=9 str="100000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 0) -> rc=10 str="-100000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 0) -> rc=19 str="9223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 0) -> rc=20 str="-9223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 0) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 1) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 1) -> rc=3 str="0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 1) -> rc=6 str="100000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 1) -> rc=7 str="-100000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 1) -> rc=8 str="100000.1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 1) -> rc=9 str="-100000.1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 1) -> rc=6 str="100010"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 1) -> rc=7 str="-101000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 1) -> rc=6 str="110000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 1) -> rc=7 str="1000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 1) -> rc=8 str="-1000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 1) -> rc=8 str="10000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 1) -> rc=9 str="-10000000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 1) -> rc=20 str="922337203685477580.7"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 1) -> rc=21 str="-922337203685477580.7"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 1) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 3) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 3) -> rc=5 str="0.001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 3) -> rc=4 str="1000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 3) -> rc=5 str="-1000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 3) -> rc=8 str="1000.001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 3) -> rc=9 str="-1000.001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 3) -> rc=6 str="1000.1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 3) -> rc=5 str="-1010"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 3) -> rc=4 str="1100"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 3) -> rc=5 str="10000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 3) -> rc=6 str="-10000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 3) -> rc=6 str="100000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 3) -> rc=7 str="-100000"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 3) -> rc=20 str="9223372036854775.807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 3) -> rc=21 str="-9223372036854775.807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 3) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 6) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 6) -> rc=8 str="0.000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 6) -> rc=1 str="1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 6) -> rc=2 str="-1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 6) -> rc=8 str="1.000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 6) -> rc=9 str="-1.000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 6) -> rc=6 str="1.0001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 6) -> rc=5 str="-1.01"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 6) -> rc=3 str="1.1"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 6) -> rc=2 str="10"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 6) -> rc=3 str="-10"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 6) -> rc=3 str="100"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 6) -> rc=4 str="-100"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 6) -> rc=20 str="9223372036854.775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 6) -> rc=21 str="-9223372036854.775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 6) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 17) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 17) -> rc=19 str="0.00000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 17) -> rc=13 str="0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 17) -> rc=14 str="-0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 17) -> rc=19 str="0.00000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 17) -> rc=20 str="-0.00000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 17) -> rc=17 str="0.000000000010001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 17) -> rc=16 str="-0.0000000000101"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 17) -> rc=14 str="0.000000000011"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 17) -> rc=12 str="0.0000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 17) -> rc=13 str="-0.0000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 17) -> rc=11 str="0.000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 17) -> rc=12 str="-0.000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 17) -> rc=20 str="92.23372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 17) -> rc=21 str="-92.23372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 17) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 18) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 18) -> rc=20 str="0.000000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 18) -> rc=14 str="0.000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 18) -> rc=15 str="-0.000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 18) -> rc=20 str="0.000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 18) -> rc=21 str="-0.000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 18) -> rc=18 str="0.0000000000010001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 18) -> rc=17 str="-0.00000000000101"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 18) -> rc=15 str="0.0000000000011"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 18) -> rc=13 str="0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 18) -> rc=14 str="-0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 18) -> rc=12 str="0.0000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 18) -> rc=13 str="-0.0000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 18) -> rc=20 str="9.223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 18) -> rc=21 str="-9.223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 18) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 19) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 19) -> rc=21 str="0.0000000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 19) -> rc=15 str="0.0000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 19) -> rc=16 str="-0.0000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 19) -> rc=21 str="0.0000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 19) -> rc=22 str="-0.0000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 19) -> rc=19 str="0.00000000000010001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 19) -> rc=18 str="-0.000000000000101"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 19) -> rc=16 str="0.00000000000011"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 19) -> rc=14 str="0.000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 19) -> rc=15 str="-0.000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 19) -> rc=13 str="0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 19) -> rc=14 str="-0.00000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 19) -> rc=21 str="0.9223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 19) -> rc=22 str="-0.9223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 19) -> rc=4 str="-ERR"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(0, 23) -> rc=1 str="0"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1, 23) -> rc=25 str="0.00000000000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000000, 23) -> rc=19 str="0.00000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000000, 23) -> rc=20 str="-0.00000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000001, 23) -> rc=25 str="0.00000000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1000001, 23) -> rc=26 str="-0.00000000000000001000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1000100, 23) -> rc=23 str="0.000000000000000010001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-1010000, 23) -> rc=22 str="-0.0000000000000000101"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(1100000, 23) -> rc=20 str="0.000000000000000011"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(10000000, 23) -> rc=18 str="0.0000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-10000000, 23) -> rc=19 str="-0.0000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(100000000, 23) -> rc=17 str="0.000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-100000000, 23) -> rc=18 str="-0.000000000000001"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(9223372036854775807, 23) -> rc=25 str="0.00009223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775807, 23) -> rc=26 str="-0.00009223372036854775807"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_int_to_float_str_buf(-9223372036854775808, 23) -> rc=4 str="-ERR"</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/20331">change 20331</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/20331"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib9aee749cd331712a4dcdadfb6a2dfa4c26da957 </div>
<div style="display:none"> Gerrit-Change-Number: 20331 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>