changeset 588:fb7e5cd69494

farray.sh: implement _farr_is_decimal_number() to prepare for more thorough index checks
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 18 Sep 2024 13:05:01 +0200
parents dab62498e69c
children d791601ac1be
files share/local-bsdtools/farray.sh tests/farray-misc.t
diffstat 2 files changed, 89 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/share/local-bsdtools/farray.sh	Wed Sep 18 03:21:55 2024 +0200
+++ b/share/local-bsdtools/farray.sh	Wed Sep 18 13:05:01 2024 +0200
@@ -102,6 +102,45 @@
 
 
 #:
+#: Check whether given argument string is a decimal number string
+#:
+#: Args:
+#:   $1: The string to be checked
+#:
+#: Returns:
+#:   int: 0 (truish) if `$1` is a valid decimal number,
+#:        1 (falsy) otherwise
+#:
+#: See Also:
+#:   https://mywiki.wooledge.org/BashFAQ/054
+#:
+_farr_is_decimal_number() {
+    case "$1" in
+        '')
+            # empty is not allowed
+            return 1
+            ;;
+        +|-)
+            # just the sign is not allowed
+            return 1
+            ;;
+        *)
+            # FALL THROUGH
+            ;;
+    esac
+    # here we can trim the optional sign safely
+    case "${1#[-+]}" in
+        *[!0123456789]*)
+            return 1
+            ;;
+        *)
+            return 0
+            ;;
+    esac
+}
+
+
+#:
 #: Quote the given input using "Dollar-Single-Quotes" to be safely used in
 #: evals.
 #:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/farray-misc.t	Wed Sep 18 13:05:01 2024 +0200
@@ -0,0 +1,50 @@
+Basic tests of farray.sh's internal helper functions
+
+Shell is /bin/sh.
+
+
+Setup
+=====
+
+  $ set -u
+  $ . "${TESTDIR}/testsetup.sh"
+  $ _p_datadir="${TESTDIR}/../share/local-bsdtools"
+  $ . "${_p_datadir}/farray.sh"
+
+
+Plain Decimal Number Checks
+===========================
+
+Valid
+-----
+
+  $ _farr_is_decimal_number 0
+  $ _farr_is_decimal_number 12345678901234567890
+  $ _farr_is_decimal_number -12345678901234567890
+  $ _farr_is_decimal_number +12345678901234567890
+
+Octal
+
+  $ _farr_is_decimal_number 012345678901234567890
+  $ _farr_is_decimal_number -012345678901234567890
+  $ _farr_is_decimal_number +12345678901234567890
+
+Invalid
+-------
+
+  $ _farr_is_decimal_number x
+  [1]
+  $ _farr_is_decimal_number ''
+  [1]
+  $ _farr_is_decimal_number '+'
+  [1]
+  $ _farr_is_decimal_number '-'
+  [1]
+  $ _farr_is_decimal_number '0x1'
+  [1]
+  $ _farr_is_decimal_number *12345678901234567890
+  [1]
+  $ _farr_is_decimal_number 0x0123456789abcdef
+  [1]
+  $ _farr_is_decimal_number 0123456789abcdef
+  [1]