Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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]
